Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!

Mobiles Hauptmenü

Fehler 3450...Aber Wieso??

Begonnen von Knopf, Juli 22, 2017, 11:52:11

⏪ vorheriges - nächstes ⏩

Knopf

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

DF6GL

#1
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?

Lachtaube

Es fehlt zumindest eine schließende Klammer.

PS: warum gestaltest Du die Szenerie denn nicht so, dass die Aktualisierungsabfrage überflüssig wird?
Grüße von der (⌒▽⌒)

Knopf

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? :(

DF6GL

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.


Knopf

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

DF6GL

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.

Knopf

Leider nicht >. < aber ich probiere es gleich mal auf diese weise mit der right- function :)

Beaker s.a.

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
Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)

DF6GL

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 .

Lachtaube

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.
Grüße von der (⌒▽⌒)


Knopf

#12
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 :(:(:(:(

Lachtaube

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.
Grüße von der (⌒▽⌒)

Knopf

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