goodbytes
Goto Top

SQL - mehrere UPDATE-Anweisungen in einem String per vbs

Hallo,
ich möchte mehrere Werte in eine MySQL-Datenbank mittels vbs-Script eintragen. Eigentlich besteht jede Zeile aus "Update... ;", bei der letzten Zeile entfällt das Semikolon. Funktioniert ja auch. Wenn eine einzelne Zeile per vbs update funktioniert es auch. Wie kann ich mehrere Zeilen in einem einzelnen String übergeben? In eine Zeile mittels ";" getrennt geht nicht. Auch eine Trennung wie unten mittels vbCrLf oder vbLf funktioniert nicht, immer wird als Fehlermeldung der SQL-String angemeckert.

strSQL = "UPDATE MyDatabase.MyTab SET messageon=0 WHERE User='Mustermann';" & vbCrLf & "UPDATE MyDatabase.MyTab SET expires=0 WHERE User='Mustermann';" & vbCrlf & "UPDATE MyDatabase.MyTab SET expiredate='2016-07-11 00:00:00' WHERE User='Mustermann'"  

Set objConnection = CreateObject("ADODB.Connection")  
Set objRecordset = CreateObject("ADODB.Recordset")  

strConnectionString = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=localhost;" & _  
"DATABASE=MyDatabase;" & _  
"USER=admin;" & _  
"PASSWORD=Password;" & _  
"OPTION=11;"  
	  
objConnection.Open(strConnectionString)
Set objRecordset = objConnection.Execute(strSQL)
objRecordset.Open
objConnection.Close()

Irgendwie bin ich gerade ziemlich ratlos... face-plain

Gruß goodbytes

Content-ID: 310186

Url: https://administrator.de/contentid/310186

Ausgedruckt am: 21.11.2024 um 23:11 Uhr

emeriks
Lösung emeriks 18.07.2016 aktualisiert um 16:16:24 Uhr
Goto Top
Hi,
was hindert Dich daran, jedes Kommando einzeln mit "Execute" zu übergeben?
strSQL1 = "UPDATE MyDatabase.MyTab SET messageon=0 WHERE User='Mustermann'  
strSQL2 = "UPDATE MyDatabase.MyTab SET expires=0 WHERE User='Mustermann'  
strSQL3 = "UPDATE MyDatabase.MyTab SET expiredate='2016-07-11 00:00:00' WHERE User='Mustermann'"  

Set objConnection = CreateObject("ADODB.Connection")  
Set objRecordset = CreateObject("ADODB.Recordset")  

strConnectionString = "DRIVER={MySQL ODBC 5.3 Unicode Driver};SERVER=localhost;" & _  
"DATABASE=MyDatabase;" & _  
"USER=admin;" & _  
"PASSWORD=Password;" & _  
"OPTION=11;"  
	  
objConnection.Open(strConnectionString)
Set objRecordset = objConnection.Execute(strSQL1)
Set objRecordset = objConnection.Execute(strSQL2)
Set objRecordset = objConnection.Execute(strSQL3)
objRecordset.Open
objConnection.Close()

Ich bin jetzt der SQL-Experte, aber mir ist so, als wenn nach dem ";" ein Leerzeichen folgen muss ....

E.
emeriks
Lösung emeriks 18.07.2016 aktualisiert um 16:18:50 Uhr
Goto Top
bzw.

strSQL = "UPDATE MyDatabase.MyTab SET messageon=0, expires=0, expiredate='2016-07-11 00:00:00' WHERE User='Mustermann'

Edit: nochmal korrigiert
Biber
Lösung Biber 18.07.2016 um 16:24:37 Uhr
Goto Top
Moin goodbytes,

ich bin nicht ganz sicher, ob ich dein Anliegen richtig verstehe.
Wenn du mehrere Spalten in demselben Datensatz (oder derselben Datenmenge) updaten willst, dann würde aus
' Dein Beispiel  
strSQL = "UPDATE MyDatabase.MyTab SET messageon=0 WHERE User='Mustermann';" & vbCrLf & "UPDATE MyDatabase.MyTab SET expires=0 WHERE User='Mustermann';" & vbCrlf & "UPDATE MyDatabase.MyTab SET expiredate='2016-07-11 00:00:00' WHERE User='Mustermann'"  
...

...diese UPDATE-Anweisung.
strSQL = "UPDATE MyDatabase.MyTab SET messageon=0,  expires=0, expiredate='2016-07-11 00:00:00'  WHERE User='Mustermann';"   

Wenn du mehrere UPDATEs auf unterschiedliche Datensätze und/oder in verschiedenen Tabellen machst, dann sind und bleiben es mehrere UPDATE-Anweisungen, die du nicht sinnvoll zu einem Block zusammenfassen kannst.

Grüße
Biber
goodbytes
goodbytes 18.07.2016 um 17:24:56 Uhr
Goto Top
Hallo emeriks, hallo Biber!

@Biber
Stimmt, ich habe gerade völlig quer gedacht, weiß auch nicht was mich da geritten hat... face-plain Momentan muss ich ja nur in eine Tabelle schreiben und da mache ich es natürlich so.

@emeriks
Es ist aber absehbar, dass noch mehr Tabellen dazu kommen. Offenbar funktioniert die Trennung der verschiedenen UPDATES in einem String nicht. Daher ist die Aufteilung in mehrere Strings und einzelnes Absetzen dann notwendig.

Vielen Dank euch Beiden !!! face-smile