Access-o-Mania

Access-Forum (Deutsch/German) => Access Programmierung => Thema gestartet von: Knopf am Juli 22, 2017, 11:52:11

Titel: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 22, 2017, 11:52:11
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
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: DF6GL am Juli 22, 2017, 12:17:25
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?
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Lachtaube am Juli 22, 2017, 12:21:28
Es fehlt zumindest eine schließende Klammer.

PS: warum gestaltest Du die Szenerie denn nicht so, dass die Aktualisierungsabfrage überflüssig wird?
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 22, 2017, 15:03:17
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? :(
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: DF6GL am Juli 22, 2017, 15:09:05
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.

Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 22, 2017, 16:46:48
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
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: DF6GL am Juli 22, 2017, 16:56:06
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.
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 22, 2017, 19:29:41
Leider nicht >. < aber ich probiere es gleich mal auf diese weise mit der right- function :)
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Beaker s.a. am Juli 22, 2017, 21:47:21
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
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: DF6GL am Juli 23, 2017, 07:09:27
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 .
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Lachtaube am Juli 23, 2017, 09:00:08
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.
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: DF6GL am Juli 23, 2017, 09:07:26
Tja...     ;)
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 23, 2017, 11:31:04
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 :(:(:(:(
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Lachtaube am Juli 23, 2017, 11:48:55
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.
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 24, 2017, 19:42:31
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
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: PhilS am Juli 24, 2017, 19:53:01
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.
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Lachtaube am Juli 24, 2017, 20:02:44
Ich sehe zwar jetzt keinen Zusammenhang zwischen Upload und der Ausgangslage der Thematik, aber die Tabellenerstellung verursacht bei mir auch keinen Fehler.
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 24, 2017, 20:07:51
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.
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: MzKlMu am Juli 24, 2017, 20:12:12
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 ?
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 24, 2017, 20:15:56
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?
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Lachtaube am Juli 24, 2017, 21:17:02
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.
Titel: Re: Fehler 3450...Aber Wieso??
Beitrag von: Knopf am Juli 24, 2017, 22:23:46
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 :(