Hallo liebe Experten!
Meine Datenbank steht unter dem Motto "Wie gewonnen, so zerronnen"...
Immer wenn ich denke es gerade geht Berg auf und Access und ich könnten richtig dicke Freunde werden, werde ich eines Besseren belehrt :(
Mein Problem heute: Wo kommt dieser blöde Syntaxfehler 3450 "Die Abfrage ist unvollständig" her?? An sich funktioniert alles soweit...beim Kompilieren bekomme ich keine Fehler...aber eine vage Vermutung habe ich doch:
Habe ich hier vielleicht eines der beliebten Kommata vergessen?
Public Sub AuswJ2()
Dim db As DAO.Database
Dim varReturn As Variant
On Error GoTo Fehler
varReturn = SysCmd(acSysCmdSetStatus, "Bitte warten Sie...")
With DBEngine(0)(0)
.Execute "DELETE FROM tblAuswJahr_2", dbFailOnError
.Execute "INSERT INTO tblAuswJahr_2 SELECT * FROM tblAusw", dbFailOnError
.Execute "UPDATE tblAuswJahr_2 SET KWBenAusw = " & _
"Replace(KWBenAusw, Right([KWBenAusw], 4), Right([KWBenAusw], 4) + 2)", dbFailOnError
End With
varReturn = SysCmd(acSysCmdSetStatus, " ")
Exit Sub
Fehler:
varReturn = SysCmd(acSysCmdSetStatus, "Fehler")
MsgBox Err.Number & ": " & Err.Description & " (aus Prozedur modAuslastJ.AuswJ2)"
varReturn = SysCmd(acSysCmdSetStatus, " ")
End Sub
Die Prozedur befindet sich in einem normalen Modul und wird von einem Klassenmodul aufgerufen. Ich hoffe ihr könnt mir mal wieder helfen! Vielen Dank!
lg Knopf
Hallo,
Zitat.Execute "UPDATE tblAuswJahr_2 SET KWBenAusw = '" & _
Replace(KWBenAusw, Right([KWBenAusw], 4), Right([KWBenAusw], 4) + 2) & "'" , dbFailOnError
<Edit>
Das ist Quatsch, wenn es sich bei "[KWBenAusw]" um ein Tabellenfeld handelt. 8)
dann sollte es so heißen:
.Execute "UPDATE tblAuswJahr_2 SET KWBenAusw = " & _
" Replace([KWBenAusw], Right([KWBenAusw], 4), Right([KWBenAusw], 4) + 2) ", dbFailOnError
</edit>
Um was handelt es sich denn hierbei ?? :
KWBenAusw = Replace(KWBenAusw, Right([KWBenAusw], 4), Right([KWBenAusw], 4) + 2)
Wirfst Du da nicht Zahlen und Text durcheinander?
Es fehlt zumindest eine schließende Klammer.
PS: warum gestaltest Du die Szenerie denn nicht so, dass die Aktualisierungsabfrage überflüssig wird?
ich habe jetzt folgendes gemacht:
Public Sub AuswJ2()
Dim ys As String
Dim db As DAO.Database
Dim varReturn As Variant
On Error GoTo Fehler
ys = 2
varReturn = SysCmd(acSysCmdSetStatus, "Bitte Warten...")
With DBEngine(0)(0)
.Execute "DELETE FROM tblAuswJahr_2", dbFailOnError
.Execute "INSERT INTO tblAuswJahr_2 SELECT * FROM tblAusw", dbFailOnError
.Execute "UPDATE tblAuswJahr_2 SET KWBenAusw = " & _
"Replace(KWBenAusw, Right([KWBenAusw], 4), (Right([KWBenAusw], 4) + ys))", dbFailOnError
End With
varReturn = SysCmd(acSysCmdSetStatus, " ")
Exit Sub
Fehler:
varReturn = SysCmd(acSysCmdSetStatus, "Fehler")
MsgBox Err.Number & ": " & Err.Description & " (aus Prozedur modAuslastJ.AuswJ2)"
varReturn = SysCmd(acSysCmdSetStatus, " ")
End Sub
Mit den beiden zusätzlichen Klammern ist es durchgelaufen, aber den syntaxfehler bekomme ich noch immer :( Die Umwandlung in einen String (ys) hat überhaupt nicht funktioniert (Habe ich vermutlich auch eh falsch umgesetzt).
@ Lachtaube: Ich weiß nicht wie ich das umgehen soll.
Ich habe Daten die ich auf die nächsten Jahre "übertragen" muss. ich habe es schon mit rst.AddNew und was da noch zugehört probiert. Problem: Es ist unfassbar langsam...Deshalb fand ich die Anfügeabfrage eig eine gute Lösung...aber ihr könnt das sicherlich besser bewerten.
Ne allgemeine Frage dazu: Was ist, wenn der Fehler aus einer anderen Prozedur kommt? Wie finde ich das raus? Alle Prozeduren auskommentieren und dann den Fehler prüfen wird nicht funktionieren oder? Alle Prozeduren rauslöschen? :(
Hallo,
das ist noch "falscher"....
beantworte bitte meine Frage, was mit dem Replace erreicht werden soll und welche Datentypen die Tabellenfelder haben.
Zeige zudem ein authentisches Beispiel über die Daten die manipuliert werden sollen und welches Ergebnis erwartet wird.
Es geht um eine Prognose. Deshalb sollen Daten von dem Jahr 2016 auf das Jahr 2018 "überspielt" werden.
Tabelle tblAusw:
Auftragnr [Text]
KWBenAusw [Text] --> Kalenderwochen
Daten von KWBenAusw:
14_2016
15_2016
17_2016
Tabelle ablAuswJahr_2:
Auftragsnr [Text]
KWBenAusw [Text]
In KWBenAusw dieser Tabelle sollen die oberen Werte nun so aussehen:
14_2018
15_2018
17_2018
Im Prinzip soll die Jahreszahl geändert werden.
Ich muss die Kalenderwochen in dieser Form nutzen und nicht als Datum, weil sie mir nur so bereitgestellt werden können.
lg und vielen Dank
Hallo,
ich gehe der Einfachheit halber jetzt erstmal davon aus, dass die KW immer zwei-stellig angegeben ist...
.Execute "UPDATE tblAuswJahr_2 SET KWBenAusw = Left([KWBenAusw], 3) & CStr( Val(Right([KWBenAusw], 4))+2) ", dbFailOnError
Entspr. dem Hinweis von Lachtaube könnte diese Aktualisierung auch gleich in die Insert-Abfrage eingebaut werden.
Leider nicht >. < aber ich probiere es gleich mal auf diese weise mit der right- function :)
Hallo Knopf,
Nur mal so am Rande, - investiere doch mal eine viertel Stunde in das
Studium der Datentypen.
Dim ys as String
.
ys = 2
.
... ) + ys) ...
funktioniert nämlich nur, weil VBA das gnädigerweise jedesmal in den
benötigten Datentyp konvertiert.
gruss ekkehard
Hallo,
das mit der Variablen funktioniert auch deswegen nicht, weil ein SQL-Statement nicht auf VBA-Variablen zugreifen kann. D. H., die Variable (deren Wert) muss syntaktisch richtig in den SQL-String eingebaut werden .
Im Sinne der Regeln der Normalisierung (Deine Daten verstoßen schon gegen die erste dieser Regeln, die besagt, dass alle Feldinhalte atomar sein müssen.) würde man die Felder auch trennen oder zumindest umkehren in eine JJJJ_KW-Darstellung, damit ein ordentliches Sortieren und Filtern gewährleistet ist. Das Zerstückeln der Tabellen wäre damit IMHO auch obsolet.
Tja... ;)
Ich habe es jetzt so ausprobiert: (Weil die Left-Funktion hier nicht funktioniert:
.Execute "UPDATE tblAuswJahr_2 SET KWBenAusw = " & _
"Replace([KWBenAusw], Right([KWBenAusw], 4), Cstr(Val((Right([KWBenAusw], 4)) + 2)))", dbFailOnError
das läuft auch so durch aber den Syntaxfehler habe ich noch immer :(:(:(:(
Also ich das Szenario mit einer Tabelle t und einem Feld f getestet (mit Right und mit Right$), wobei keine Fehler auftraten.
UPDATE T
SET f = Replace( f, Right$( f, 4 ), Right(f, 4) + 2 );
Erstelle bitte ein Minimalbeispiel, anhand dessen der Fehler reproduzierbar ist und lade es hier hoch.
Hallo,
ich habe ein absolut minimalistisches Beispiel erstellt. Es sind keine Codes drin, nur zwei Tabellen und eine Abfrage. Und trotzdem bekomme ich den Fehler! :( Vielleicht habt ihr ja eine Idee
Zitat von: Knopf am Juli 24, 2017, 19:42:31ich habe ein absolut minimalistisches Beispiel erstellt. Es sind keine Codes drin, nur zwei Tabellen und eine Abfrage.
Wann bekommst du wo einen Fehler? Ich kann deine Anfügeabfrage ohne Fehler ausführen.
Ich sehe zwar jetzt keinen Zusammenhang zwischen Upload und der Ausgangslage der Thematik, aber die Tabellenerstellung verursacht bei mir auch keinen Fehler.
Ja meine idee war, alle abfragen nach und nach zu checken. Und schon bei der ersten ist der fehler aufgetreten. Deshslb dachte ich, ich lade direkt das hoch.
Doe abfrage funktioniert bei mir auch. Aber wenn ich die abfrage in der tabellenansicjt sortieren will, dann bekomme ich den fehler.
Hallo,
eine Tabellerstellungsabfrage muss man nicht sortieren. Es macht auch keinen Sinn. Die Sortierung in einer Datenbanktabelle ist auch bedeutungslos. Sortiert wird die fertige Tabelle über eine Abfrage. Ganz abgesehen davon, liefert Dein Beispiel ein Datensatz, was willst Du da sortieren ?
Jaa es geht mir auch nicht um das sortieren. Deutet der fehler denn nicht auf mehr hin? Ich hatte mal einen anderen syntaxfehler beim sortieren festgestellt. Ursache war ein problem mit den tabellenbeziehungen. Der konnte behoben werden. Kann ich solche fehler einfach ignorieren?
Wenn Abfragen komplex werden und/oder keine Beziehungen mit referentieller Integrität bestehen und/oder Vereinigungsabfragen bei der Zielabfrage involviert sind, tendiert Access auch schon mal zu fehlerhaften oder unvollständigen Abfrageresultaten.
Nicht vergessen, Du arbeitest mit Software (dabei meine ich die Access- bzw. Jet-Engine), die im Kern seit ca. 20 Jahren keine großartigen Neuerungen oder Verbesserungen erfahren hat.
Okay, also solange die abfrage funktioniert kann ich den fehler außer acht lassen?...
Vielen Dank dass ihr euch auch den kleinen access problemen widmet!!! Sry...dachte da steckt mehr dahinter :(