wie share ich eine connection?

Programmierung unter AOO/LO (StarBasic, Python, Java, ...)

Moderator: Moderatoren

oliver1804
**
Beiträge: 39
Registriert: Fr, 27.11.2009 15:07

wie share ich eine connection?

Beitrag von oliver1804 »

Hallo,

ich hab als externe DB sqlite am Laufen und möchte nun Transaktionen per Makro auslösen. Wenn ich nun aber für das Datenverbindungsobjekt <setAutoCommit("false")> (Code: Zeile 32) setze, wird die Fehlermeldung "This call is not allowed when sharing connections.." ausgegeben. Mir ist allerdings nicht klar, wie ich eine Verbindung zur DB erhalte, die nicht "shared" ist. Wäre nett, wenn mir da mal jemand beistehen könnte. Hier der Code:

Code: Alles auswählen

01	REM  *****  BASIC  *****
   
02	Option Explicit
   
   
03	Sub KUSTaktualisieren()
04		
05		' Statement zur KUST-Abfrage
06		Const cKUSTquery   = "SELECT KDNR+0 AS KDNR, NAME, STRASSE, PLZ, ORT, NR_VKB FROM KUST"
   
   
07	    Dim oStatement as Object
08	    Dim oResultSet as Object
09	    
10	    
11	    Dim oAnzRecordsResult as Object
12	    Dim iRecordCount      as Integer
13	    iRecordCount = 0
14	    
15	    
16	    ' KUST-Record-Values in Variablen
17	    Dim iKDNR as String, iPLZ as Integer, iNR_VKB as Integer
18	    Dim sNAME as String, sSTRASSE as String, sORT as String
19	    
20	    
21	    ' SQL-String für INSERT/UPDATE
22	    Dim sSQL as String
23	    
   
24	    ' KUST.DBF abfragen
25	    oConBEFOdat = ConnecttoDatabase(cBEFOdatDSN,"","") 'Verbindung herstellen
26	    oStatement = oConBEFOdat.createStatement()
27	    oResultSet = oStatement.executeQuery(cKUSTquery)
   
28		
29		' Verbindungsobjekt für ADSteuerung erstellen
30		oConADsteuer = ConnecttoDatabase(cDSN,"","")
31		
32		oConADsteuer.setAutoCommit("false")
33		
34		'XRay oConADsteuer
35	    
36	    
37	    ' Objektvariable für SQL-Statement-Ausführung
38	    oStatement = oConADsteuer.createStatement()
   
39	    if not isNull(oResultSet) then
40	      Do while oResultSet.Next()
   
41	         iKDNR    = oResultSet.getString(1)
42	         sNAME    = """" & oResultSet.getString(2) & """"
43	         sSTRASSE = """" & oResultSet.getString(3) & """"
44	         iPLZ     = oResultSet.getInt(4)
45	         sORT     = """" & oResultSet.getString(5) & """"
46	         iNR_VKB  = oResultSet.getInt(6)
47	         
48	         
49	         ' Prüfabfrage, ob ein Kunde bereits in der Tabelle customer vorhanden ist
50	         sSQL = "SELECT 1 FROM customer WHERE id_customerorigin = 2 AND kdnr = " & iKDNR
51	         
52	         oAnzRecordsResult = oStatement.executeQuery(sSQL)
53	  
54	         Do while oAnzRecordsResult.next()
55	            iRecordCount = oAnzRecordsResult.getInt(1)
56	         Loop
   
57	                 
58	         If iRecordCount = 1 then
59	           sSQL = "UPDATE customer SET " & _
60	                                       "id_staff_editor = 1, " & _
61	                                       "name            = " & sNAME & ", " & _
62	                                       "street          = " & sSTRASSE & ", " & _
63	                                       "plz             = " & iPLZ & ", " & _
64	                                       "city            = " & sORT & ", " & _
65	                                       "nr_vkb          = " & iNR_VKB & " " & _
66	                  "WHERE id_customerorigin = 2 AND kdnr = " & iKDNR & ";"
67	         else
68	           sSQL = "INSERT INTO customer(id_staff_editor, id_customerorigin, kdnr, name, street, plz, city, nr_vkb) " & _
69	                  "VALUES(1,2," & iKDNR & "," & sNAME & "," & sSTRASSE & "," & iPLZ & "," & sORT & "," & iNR_VKB & ");"
70	         End if
71	         
72	         
73	         oStatement.executeUpdate(sSQL)
74	         
75	      
76	      loop
77	    End if
78	         
79	        
80	    oConBEFOdat.close()
81	    oConADsteuer.close()
82	    
83	    Info_KUSTupdate()
   
84	End Sub
   
Gruß
Oliver
oliver1804
**
Beiträge: 39
Registriert: Fr, 27.11.2009 15:07

Re: wie share ich eine connection?

Beitrag von oliver1804 »

Selbst ist der Mann:

Code: Alles auswählen

        'Transaktion starten
        oStatement.executeUpdate("BEGIN TRANSACTION;")

        '<irgendwelche SQL-Statements>

        'Transaktion beenden
        oStatement.executeUpdate("COMMIT;")
Dann wird <setAutoCommit("false")> offenbar nicht benötigt.

Gruß
Oliver
Antworten