On Tue, 16 Sep 2014, Christof Thalhofer wrote:
> Hi Tobias,
> 
> Am 12.09.2014 um 10:52 schrieb Tobias Boege:
> 
> >>> Have you tested that? Do you have a patch for the project?
> 
> Did a correction, please test it. Now it should not hang any more and
> work as expected.
> 

Thank you!

Attached is the patch corresponding to your change (just for completeness;
I like patches better).

I will send it to Hans as I'm running a more recent Gambas version in which
the hang does not occur in the first place (with the original project).

Regards,
Tobi

-- 
"There's an old saying: Don't change anything... ever!" -- Mr. Monk
diff -urNaX /tmp/gambas-patch-ignore a/.project b/.project
--- a/.project	2014-09-11 19:38:49.000000000 +0200
+++ b/.project	2014-09-16 09:34:30.000000000 +0200
@@ -1,9 +1,9 @@
 # Gambas Project File 3.0
-# Compiled with Gambas 3.5.4
+# Compiled with Gambas 3.5.90
 Title=Meine Adressen
 Startup=FMain
 Icon=Symbols/projekt_icon.png
-Version=0.1.24
+Version=0.1.26
 Component=gb.image
 Component=gb.qt4
 Component=gb.form
@@ -15,5 +15,5 @@
 Description="Elektronisches Adressbuch"
 Authors="Dr. Hans Lehmann ~ Osterburg ~ 2009-2014"
 TabSize=2
-SourcePath=/home/hans/Arbeitsfl??che
+SourcePath=/home/christof/temp/delete
 Packager=1
diff -urNaX /tmp/gambas-patch-ignore a/.src/FMain.class b/.src/FMain.class
--- a/.src/FMain.class	2014-09-11 19:37:28.000000000 +0200
+++ b/.src/FMain.class	2014-09-16 07:53:51.000000000 +0200
@@ -1,76 +1,77 @@
 ' Gambas class file
 
+'reuse this connectin within the form
+Private con As Connection
+
 Public Sub Form_Open()
+
+  'initialize one time
+  'you can do this in other forms
+  'also and have only one connection
+  'to db "Kontakte" as long as the app lives
+  con = MDataBase.DBKontakte
+
   FMain.Center
   FMain.Resizable = False
-  
-  MDataBase.ConnectDB("mysql", "localhost", "3606", "root", "sql", "Kontakte", "kontakte")
-  DataSource1.Connection = MDataBase.cDBVerbindung
+
+  DataSource1.Connection = con
   DataSource1.Table = "kontakte"
-' DataSource1.Filter = "Wohnort <> 'Leipzig' AND Wohnort NOT LIKE 'G%'" ' "Wohnort <> \"Leipzig\""
+
+  ' DataSource1.Filter = "Wohnort <> 'Leipzig' AND Wohnort NOT LIKE 'G%'" ' "Wohnort <> \"Leipzig\""
   DataSource1.Filter = "" ' Standard-Filter ---> ohne Filterung
   DataSource1.Sort = "PLZ"
-  
+
   DataSource1.ReadOnly = True
   DataBrowser1.Editable = False
-  
+
   ' Print DataSource1.Connection.Charset
-  
+
 End ' Form_Open
 
 Public Sub Form_Show()
-  Dim sSQL_Anweisung As String
+
+  Dim qry As String
   Dim r As Variant
-  
- 
+
   DataBrowser1.Orientation = Align.Bottom
   DataBrowser1.Columns = ["Vorname", "Nachname", "Wohnort", "PLZ", "Strasse", "TelefonFestnetz"]
   DataBrowser1.Labels = ["Vorname", "Nachname", "Ort", "Postleitzahl", "Stra??e", "Festnetz-Nummer"]
-  
+
   DataBrowser1.View.Columns[0].Width = 100
   DataBrowser1.View.Columns[1].Width = 100
   DataBrowser1.View.Columns[2].Width = 110
   DataBrowser1.View.Columns[3].Width = 95
   DataBrowser1.View.Columns[4].Width = 130
   DataBrowser1.View.Columns[5].Width = 70
-  
+
   dcVorname.Field = "Vorname"   ' DB-Feld (datensensitiv)
-  dcNachname.Field = "Nachname" 
+  dcNachname.Field = "Nachname"
   cdWohnort.Field = "Wohnort"
   dcPLZ.Field = "PLZ"
   dcStrasse.Field = "Strasse"
   dcTelefonFestnetz.Field = "TelefonFestnetz"
-  
-  sSQL_Anweisung = "SELECT * FROM " & DataSource1.Table
-  MDataBase.rDBResult = MDataBase.cDBVerbindung.Exec(sSQL_Anweisung)
-    
-  DataBrowser1.Editable = True
-  'DataBrowser1.CanDelete = False
-  If MDataBase.rDBResult.Available Then
-     DataBrowser1.View.MoveTo(0, 0)
-  Endif
-  'DataBrowser1.Editable = True  ' ---> letzte Zeile
-  
-'   Print DataBrowser1.View.Columns.Count
- 
-  ' DataCheckBox1.Text = "Fahrsch??ler"
-  ' DataCheckBox1.Value = True ' hier m??sste ein Boolean-Feldname stehen
-  ' Print DataCheckBox1.Valid
 
+  DataBrowser1.Editable = True
+  DataBrowser1.View.MoveTo(0, 0)
 
 End ' Form_Show
 
 Public Sub Form_Close()
-  MDataBase.DBVerbindungSchliessen()
+
+  MDataBase.DeleteDBKontakte()
+
 End ' Form_Close
 
 Public Sub btnEnde_Click()
+
   FMain.Close
+
 End ' btnEnde_Click()
 
 Public Sub Button1_Click()
+
   Dim bFlag As Boolean
-  
+
   ' bFlag = DataSource1.Remove()
   ' Print bFlag
   If DataSource1.Remove() = False Then Print "L??SCHEN ERFOLGREICH!"
@@ -79,8 +80,6 @@
 
 Public Sub Button2_Click()
 
-  
-  DataSource1.MoveNext() 
-  
+  DataSource1.MoveNext()
 
 End
diff -urNaX /tmp/gambas-patch-ignore a/.src/MDataBase.module b/.src/MDataBase.module
--- a/.src/MDataBase.module	2014-09-11 19:37:28.000000000 +0200
+++ b/.src/MDataBase.module	2014-09-16 07:55:27.000000000 +0200
@@ -1,92 +1,128 @@
 ' Gambas module file
 
-Public rDBResult As Result
-Public cDBVerbindung As New Connection
-Public sDatenbankTyp As String
+''' Singleton, keeps one connection per DB permanent open
+''' allows more than one DB
+'''
+'''
+
+Public DBKontakte As New Connection
+
+Public Sub _init()
+
+  StartDBKontakte()
+  'maybe you want to start not only one db?
+  'here you could start and access some more
+  'you could even generate a factory-pattern
+  'for starting lots of dbs in this module ;-)
+
+End
+
+Private Sub StartDBKontakte()
+
+  Dim DBType As String, DBHost As String, DBPort As String
+  Dim DBUserName As String, DBUserPassword As String, DBName As String
+
+  DBType = "mysql"
+  DBHost = "localhost"
+  DBPort = "3306"
+  DBUserName = "test"
+  DBUserPassword = ""
+  DBName = "Kontakte"
+
+  'Useless:
+  ' If Upper(DBType) = "SQLITE3" And Not Exist(DBHost) Then
+  '   Try Mkdir DBHost
+  ' Endif
+
+  'We keep one connection open
+  'for reuse and do not close until end of app
+  'DBKontakte.Close()
+
+  If Not DBKontakte.Opened Then
+
+    DBKontakte.Type = Lower(DBType) ' Der Datenbank-Typ muss klein geschrieben werden
+    DBKontakte.Host = DBHost
+    DBKontakte.Port = DBPort
+    DBKontakte.User = DBUserName
+    DBKontakte.Password = DBUserPassword
+    DBKontakte.Name = DBName ' Das ist der Datenbank-Name
+
+    ' Versuche, eine Verbindung zur DB herzustellen
+    Try DBKontakte.Open()
+    If Error Then
+      'wenns nicht hinhaut, db erstellen
+      initDBKontakte("kontakte", DBName)
+    Endif
+
+  Endif
+
+End
+
+Private Sub initDBKontakte(DBTabellenName As String, DBName As String) As Boolean
 
-Public Sub ConnectDB(DBType As String, DBHost As String, DBPort As String, DBUserName As String, DBUserPassword As String, DBName As String, DBTabellenName As String)
   Dim DBTabelle As Table
   Dim sSQL_Anweisung As String
-  
-  If Upper(DBType) = "SQLITE3" And Not Exist(DBHost) Then
-     Try Mkdir DBHost
-  Endif
-  
-  cDBVerbindung.Close()
-  cDBVerbindung.Type = Lower(DBType) ' Der Datenbank-Typ muss klein geschrieben werden
-  cDBVerbindung.Host = DBHost
-  cDBVerbindung.Port = DBPort  
-  cDBVerbindung.User = DBUserName  
-  cDBVerbindung.Password = DBUserPassword
-  cDBVerbindung.Name = DBName ' Das ist der Datenbank-Name
-
-' Versuch, eine DB-Verbindung zur DB auf dem DB-Server herzustellen
-  Try cDBVerbindung.Open()
-  
+
+  'testen, ob Server antwortet
+  DBKontakte.Name = ""
+  Try DBKontakte.Open
   If Error Then
-   ' Pr??fen, ob die Datenbank mit dem angegebenen Namen existiert
-     If Not cDBVerbindung.Databases.Exist(DBName) Then
-        Message.Info("Die Datenbank " & DBName & " existiert nicht und wird angelegt!")
+    Message.Error("Der Server antwortet nicht")
+    Return False
+  Else
+    ' Pr??fen, ob die Datenbank mit dem angegebenen Namen existiert
+    If Not DBKontakte.Databases.Exist(DBName) Then
+      Message.Info("Die Datenbank " & DBName & " existiert nicht und wird angelegt!")
       ' Datenbank genau dann anlegen, wenn sie NICHT existiert
-        cDBVerbindung.Databases.Add(DBName)
-        cDBVerbindung.Name = DBName
-        Try cDBVerbindung.Open()
-        If Error Then
-           Message.Info("Eine DB-Verbindung zum Server konnte NICHT hergestellt werden!")
-           Error.Raise(Error.Text)
-        Endif
-     Endif
-     ' Message.Error("Eine DB-Verbindung zum DB-Server konnte NICHT hergestellt werden!")
-     ' Return
-  Endif
-  
-  ' sSQL_Anweisung = "DROP TABLE `kontakte`" 
-  ' cDBVerbindung.Begin
-  '   cDBVerbindung.Exec(sSQL_Anweisung)
-  ' cDBVerbindung.Commit
-  
-  
-  
-' Pr??fen, ob die Tabelle mit dem angegebenen Namen in der aktuellen DB existiert
-' Tabelle genau dann anlegen, wenn sie NICHT existiert  
-  If Not cDBVerbindung.Tables.Exist(Lower(DBTabellenName)) Then
-     Message.Info("Die DB-Tabelle <b>'" & DBTabellenName & "'</b> existiert nicht und wird angelegt!")
-   ' Leere Tabelle mit dem angegebenen Tabellen-Namen anlegen
-     DBTabelle = cDBVerbindung.Tables.Add(DBTabellenName, "InnoDB")
-          
-   ' Tabellenfelder definieren: 
-     DBTabelle.Fields.Add("Id", db.Serial)
-     DBTabelle.Fields.Add("Vorname", db.String, 16)
-     DBTabelle.Fields.Add("Nachname", db.String, 24) ' Nachname ---> Text mit 24 Zeichen
-     DBTabelle.Fields.Add("Wohnort", db.String, 32)
-     DBTabelle.Fields.Add("PLZ", db.String, 5)
-     DBTabelle.Fields.Add("Strasse", db.String, 24)
-     DBTabelle.Fields.Add("TelefonFestnetz", db.String, 16)
-     
-     DBTabelle.PrimaryKey = ["Id"]
-
-     DBTabelle.Update()
-     cDBVerbindung.Tables.Refresh ' Liste der Tabellen in der DB erneuern
-  
-     sSQL_Anweisung = "INSERT INTO `kontakte` VALUES " 
-     sSQL_Anweisung &= "('1','Arno','Adler','Arneburg','39606','Am Hafen 3','03937864322'),"
-     sSQL_Anweisung &= "('2','Bruno','B??r','Berlin','10404','Bode-Strasse 1','03094157777'),"
-     sSQL_Anweisung &= "('3','Gerda','Geier','Gera','07997','Gartenweg 23','03657788989'),"
-     sSQL_Anweisung &= "('4','Lutz','Lama','Leipzig','04103','Lessing-Allee 5','0641432222'),"
-     sSQL_Anweisung &= "('5','Maria','Meise','M??nchen','80805','Malergasse 10','0867554324'),"
-     sSQL_Anweisung &= "('6','Wolf','Walter','Werra','06766','Waldweg 6a','036922123');"
-     
-     cDBVerbindung.Begin
-       cDBVerbindung.Exec(sSQL_Anweisung)
-     cDBVerbindung.Commit
-  
+      DBKontakte.Databases.Add(DBName)
+      DBKontakte.close
+      DBKontakte.Name = DBName
+      DBKontakte.Open()
+    Endif
+
+    ' Pr??fen, ob die Tabelle mit dem angegebenen Namen in der aktuellen DB existiert
+    ' Tabelle genau dann anlegen, wenn sie NICHT existiert
+    If Not DBKontakte.Tables.Exist(Lower(DBTabellenName)) Then
+      Message.Info("Die DB-Tabelle <b>'" & DBTabellenName & "'</b> existiert nicht und wird angelegt!")
+      ' Leere Tabelle mit dem angegebenen Tabellen-Namen anlegen
+      DBTabelle = DBKontakte.Tables.Add(DBTabellenName, "InnoDB")
+
+      ' Tabellenfelder definieren:
+      DBTabelle.Fields.Add("Id", db.Serial)
+      DBTabelle.Fields.Add("Vorname", db.String, 16)
+      DBTabelle.Fields.Add("Nachname", db.String, 24) ' Nachname ---> Text mit 24 Zeichen
+      DBTabelle.Fields.Add("Wohnort", db.String, 32)
+      DBTabelle.Fields.Add("PLZ", db.String, 5)
+      DBTabelle.Fields.Add("Strasse", db.String, 24)
+      DBTabelle.Fields.Add("TelefonFestnetz", db.String, 16)
+
+      DBTabelle.PrimaryKey = ["Id"]
+
+      DBTabelle.Update()
+      DBKontakte.Tables.Refresh ' Liste der Tabellen in der DB erneuern
+
+      sSQL_Anweisung = "INSERT INTO `kontakte` VALUES "
+      sSQL_Anweisung &= "('1','Arno','Adler','Arneburg','39606','Am Hafen 3','03937864322'),"
+      sSQL_Anweisung &= "('2','Bruno','B??r','Berlin','10404','Bode-Strasse 1','03094157777'),"
+      sSQL_Anweisung &= "('3','Gerda','Geier','Gera','07997','Gartenweg 23','03657788989'),"
+      sSQL_Anweisung &= "('4','Lutz','Lama','Leipzig','04103','Lessing-Allee 5','0641432222'),"
+      sSQL_Anweisung &= "('5','Maria','Meise','M??nchen','80805','Malergasse 10','0867554324'),"
+      sSQL_Anweisung &= "('6','Wolf','Walter','Werra','06766','Waldweg 6a','036922123');"
+
+      DBKontakte.Begin
+      DBKontakte.Exec(sSQL_Anweisung)
+      DBKontakte.Commit
+    Endif
+    Return True
   Endif
-    
+
 End ' ConnectDB()
 
-Public Sub DBVerbindungSchliessen()
-  If cDBVerbindung.Opened Then
-     Try cDBVerbindung.Close()
-     If Error Then Message.Error("Fehler bei Trennen der DB-Verbindung zu " & sDatenbankTyp)
+Public Sub DeleteDBKontakte()
+
+  If DBKontakte.Opened Then
+    Try DBKontakte.Close()
+    If Error Then Message.Error("Fehler bei Trennen der DB-Verbindung zu Mysql")
   Endif
+
 End
------------------------------------------------------------------------------
Want excitement?
Manually upgrade your production database.
When you want reliability, choose Perforce.
Perforce version control. Predictably reliable.
http://pubads.g.doubleclick.net/gampad/clk?id=157508191&iu=/4140/ostg.clktrk
_______________________________________________
Gambas-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/gambas-user

Reply via email to