valume91
Goto Top

Access SQL syntax Fehler

Access bringt mir die Fehlermeldung das ich einen Syntax Fehler in meinem Code habe, ich kann diesen jedoch nicht finden.

Hallo liebes Forum

Ich erhalte einen Laufzeitfehler 3144: Syntaxfehler in UPDATE Anweisung wenn ich versuche den Folgenden Code im Access VBA auszuführen:

Dim strSQL2 As String
    strSQL2 = "UPDATE tbl_messungen SET (Titel, Auftragsteilnummer) = (SELECT Titel, Auftragsteilnummer FROM tbl_messungen WHERE Messauftrag_IDFS = " & idMessauftragalt & ") WHERE Messauftrag_IDFS = 9999"  
    DoCmd.RunSQL strSQL2

Ich sehe den Fehler leider nicht...

Kann es sein das Access bzw MSSQL den SELECT im UPDATE nicht versteht?

lg Valume

Content-ID: 156974

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

Ausgedruckt am: 22.11.2024 um 10:11 Uhr

32067
32067 14.12.2010 um 15:40:31 Uhr
Goto Top
Bin mir da nicht 100% sicher, aber ich denke, daß ist syntaktisch tatsächlich so nicht zulässig, weil bei deinem SELECT grundsätzlich keine oder mehrere Zeilen als Ergebnis rauskommen können, das SET aber wirklich exakt nur _ein_ Wertepaar gebrauchen kann.
Valume91
Valume91 14.12.2010 um 15:44:00 Uhr
Goto Top
Hi DKrause

Danke für deine Antwort!
Kennst du evtl. eine Alternative?

lg Valume
NilsErik
NilsErik 14.12.2010 um 17:09:22 Uhr
Goto Top
1. Werte einzeln zuweisen

UPDATE Tabelle SET (feld1, feld2)=(1,2) WHERE id=1
geht nicht

UPDATE Tabelle SET feld1=1, feld2=2 WHERE id=1
geht

2. Access mag keine SELECTs in UPDATEs
Ich würde entweder Unterabfragen verwenden, oder mit DLookup arbeiten, z.B.

Dim strTitel As String
Dim lngAuftragsteilNummer As Long

strTitel = DLookup("Titel", "tbl_messungen", "Messauftrag_IDFS=" & idMessauftragAlt)  
lngAuftragsteilNummer = DLookup("Auftragsteilnummer", "tbl_messungen", "Messauftrag_IDFS=" & idMessauftragAlt)  

strSQL2 = "UPDATE tbl_messungen SET Titel='" & strTitel & "', Auftragsteilnummer=" & lngAuftragsteilNummer & " WHERE Messauftrag_IDFS = 9999"  
Valume91
Valume91 14.12.2010 um 17:38:41 Uhr
Goto Top
Hi NilsErik

Danke erstmal für deine Antwort!

Werte einzeln zuweisen kann ich nicht machen, da ich alle Updaten will die die IDFS 9999 haben, und genauere Angaben habe ich nicht.
Geht das wirklich so mit deiner Variante mit Dlookup?
Weil strTitel, bzw. lngAuftragsteilNummer enthalten dann ja mehrere Werte. Das Würde dann so aussehen
UPDATE tbl_messungen SET Titel='bla, test, hmm, jaja, so', Auftragsteilnummer=12, 15, 18, 16, 13 WHERE Messauftrag_IDFS = 9999  

Der Code bringt bei mir ausserdem die Fehlermeldung: "Unzulässige verwendung von NULL" bei der Zeile:
 lngAuftragsteilNummer = DLookup("Auftragsteilnummer", "tbl_messungen", "Messauftrag_IDFS=" & idMessauftragAlt)   

Was ist daran noch Falsch?

lg Valume
NilsErik
NilsErik 15.12.2010 um 08:14:35 Uhr
Goto Top
Da meine Antwort von gestern leider verschluckt wurde, nochmal in Kurzform:

Du versuchst mehrere Werte einer Spalte zuzuordnen, deren ID 9999 ist. Das geht so nicht. Die Zuweisung muss eindeutig sein.

Ich interpretiere Deine Absicht mal so, dass Du Teilmessungen einer Gesamtmessung zuordnen möchtest.
Dazu versuchst Du die IDs der Teilmessungen bei der Gesamtmessung zu hinterlegen. Dafür bräuchtest Du dann eine eigene Zuordnungstabelle.
Sollten die Teilmessungen eindeutig zuzuordnen sein, wäre eine andere Möglichkeit die ID der Gesamtmessung bei den Teilmessungen zu hinterlegen. Die Datenstruktur solltest Du vielleicht auch noch einmal überdenken. Es sieht so aus, als ob Du einige Daten doppelt speicherst (z.B. Titel). Mit einer Tabelle für die Gesamtmessung, deren ID Du bei den Teilmessungen in der eigenen Tabelle hinterlegst, wäre das zu bereinigen.
Valume91
Valume91 15.12.2010 um 08:54:48 Uhr
Goto Top
Hi NilsErik

Also damit du mein Problem verstehst nochmals von ganz Anfang:
Ich habe mehrere Datensätze mit der Messauftrag_IDFS x (steht in Variable idMessauftragAlt) in der Tabelle tbl_messungen.
Nun möchte ich diese Datensätze dublizieren! Also jeweils Titel, und Auftragsteilnummer in einen neuen Datensatz einfügen.
Dabei soll die Messauftrag_IDFS geändert werden auf den Wert der in der Variable idMessauftragneu steht.

Nun zu meinem Lösungsansatz:
Ich dachte ich mache das so:
1. Erstellen neuer Datensätze mit Messauftrag_IDFS 9999
2. Kopieren von Titel und Auftragsteilnummer aus den alten in die neuen Datensätze
3. Ändern der Messauftrag_IDFS von 9999 auf den Wert aus Variable idMEssauftragneu.

Ich hoffe du verstehst nun mein Problem ;)
Hier noch mein VBA Code für oben Berschriebenes:
Dim strSQL As String
    strSQL = "INSERT INTO tbl_messungen (Messauftrag_IDFS) VALUES (9999)"  
    DoCmd.RunSQL strSQL
Dim strSQL2 As String
    strSQL2 = "UPDATE tbl_messungen SET (Titel, Auftragsteilnummer) = (SELECT Titel, Auftragsteilnummer FROM tbl_messungen WHERE Messauftrag_IDFS = " & idMessauftragalt & ") WHERE Messauftrag_IDFS = 9999"  
    MsgBox strSQL2
    DoCmd.RunSQL strSQL2
Dim strSQL3 As String
    strSQL3 = "UPDATE tbl_messungen SET Messauftrag_IDFS = idMessauftragneu WHERE Messauftrag_IDFS = 9999"  
    DoCmd.RunSQL strSQL2

Gibt es evtl sogar eine einfachere Möglichkeit?

lg Valume
Valume91
Valume91 15.12.2010 um 10:05:07 Uhr
Goto Top
Hi

Habs jetzt noch versucht anderst zu lösen:
Und zwar habe ich in der tbl_messungen ein Feld "Erstellt_zeit" als "Datum/Zeit" erstellt.

Und arbeite mit Folgendem VBA Code:
Dim datum_zeit As Date
datum_zeit = Now()

Dim strSQL As String
    strSQL = "INSERT INTO tbl_messungen (Titel, Auftragsteilnummer) SELECT Titel, Auftragsteilnummer FROM tbl_messungen WHERE Messauftrag_IDFS = " & idMessauftragalt  
    DoCmd.RunSQL strSQL
Dim strSQL2 As String
    strSQL2 = "UPDATE tbl_messungen SET Messauftrag_IDFS = " & idMessauftragneu & " WHERE '" & datum_zeit & "' < Erstellt_zeit"  
    MsgBox strSQL2
    DoCmd.RunSQL strSQL2

Jedoch erhalte ich jetzt ein Fehler "Datentypen unverträglich".

Was mache ich falsch?

lg Valume
NilsErik
NilsErik 15.12.2010 um 13:19:48 Uhr
Goto Top
Bei welcher Anweisung passiert der Fehler?

strSQL oder strSQL2?

Wandelst Du das Datum entsprechend um?

http://www.donkarl.com/FAQ/FAQ6VBA.htm#6.8

bzw.

http://www.office-loesung.de/ftopic174075_0_0_asc.php
Valume91
Valume91 23.01.2011 um 20:52:54 Uhr
Goto Top
Habe das Problem auf andere Weise gelöst.
Danke für die Tipps!
-->Close