Office: (Office 2016) Buchungsprobleme

Helfe beim Thema Buchungsprobleme in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Die Werte in VALUES sehen aber gut aus. Aussehen ist nicht alles. Datum an SQL-String übergeben Werte, die von außen (über eingebundene Variablen,... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von Horst14, 16. Juni 2020.

  1. Buchungsprobleme


    Aussehen ist nicht alles.

    Datum an SQL-String übergeben
    Werte, die von außen (über eingebundene Variablen, Formularfelder & Co.) übergeben werden, müssen vom Datentyp her passen und zusätzlich SQL-gerecht formatiert werden, damit sie erkannt, akzeptiert und verarbeitet werden können.
     
  2. Hi, danke für deine Antwort und sorry für meine späte Rückmeldung...

    Ich habe den Code jetzt angepasst:

    Code:
    Jetzt kommt eine Meldung: Datentypenkonflickt :-/
    Liegt das vielleicht an meinem Standardeingabeformat: 00.00.00 00:00;0;_ ?
     
    Horst14, 28. Juni 2020
    #17
  3. strDatum ist schon fertig formatiert. Dort keine zusätzlichen Hochkommata verwenden.
     
  4. Buchungsprobleme

    Hi, ich habe den Code abgeändert.

    Code:
    Wenn ich jetzt auf Buchen klicke, erscheint eine Fehlermeldung:
    Syntaxfehler (fehlender Operator) in Abfrageausruck
    Ich kann mit der 500063 nichts anfangen :-/ sowie mit der 0 am Ende.
    Liegt da mein Fehler?
     
    Horst14, 29. Juni 2020
    #19
  5. Hallo Horst,
    Ist "Haltefrist" nicht auch ein Datum?
    gruss ekkehard
     
    Beaker s.a., 29. Juni 2020
    #20
  6. Code:
    Es ist verwegen, in der Einzahl zu sprechen.

    Grundsätzlich: Wiederum die gesamte erzeugte Anweisung per Debug anschauen und prüfen, also mit korrekter Syntax (von der man im Vorfeld eine konkrete Vorstellung haben sollte) vergleichen.

    So könnte man seine Tätigkeit vom Würfeln (Try&Error) verschieben in Richtung Zielgerichtetheit.
     
  7. Hi, nein.
    Haltefrist ist eine Zahl Feldgröße Intager.

    Aber du hast recht, in einer Abfrage errechne ich, ab wann es Steuerfrei ist und das mache ich so: Steuerfrei: DatAdd("t";+[haltefrist];[trans_datum]).
     
    Horst14, 30. Juni 2020
    #22
  8. Buchungsprobleme

    Hi,

    "#2020-06-30# = strDatum _
    500063, = .txt_buchID
    365, = .txt_haltefrist
    'keine', .txt_trans_beschr
    0". = ?

    Es ist verwegen, in der Einzahl zu sprechen. --> Wie meinst du das?
    also mit korrekter Syntax --> Wie lautet die korrekte Syntax?
    Ich habe etwas mit & Replace(strDatum) _ gefunden aber das geht ebenfalls nicht.
     
    Horst14, 30. Juni 2020
    #23
  9. Die Ziel-Syntax für die Anfügeabfrage, damit sie auch ausgeführt werden kann, würde etwa so lauten:
    Code:
     
  10. Hi, ich habe die Abfrage jetzt umgeschrieben und mich an deine Aufzählung gehalten:
    Aber der Fehler besteht weiterhin.

    Code:
    Ich habe auch etwas gelesen, das ich Replace.strDatum schreiben müsste aber das ging auch nicht.
    Ich finde aber auch niergends etwas eindeutiges geschrieben :-(
     
    Horst14, 30. Juni 2020
    #25
  11. Das nicht nur hinschreiben, sondern sich auch das Ergebnis anschauen. Wenn nicht auffällt, dass Dein "Ergebnis" des Umschreibens etwas anderes als die beispielhafte Anweisung ist, dann sollte man arg nachdenklich werden.
    Deine Klammersetzung ist "kreativ", aber eben falsch, und mal ein Komma zu viel und woanders ein Komma zu wenig ist auch nicht hilfreich.

    Wenn man beim Beheben eines Fehlers zwei, drei neue einbaut, ist der Fortschritt nicht der, den man sich vorstellt.

    Wie schon mal vermerkt, würde ich Replace an der Stelle gar nicht einsetzen.

    Siehe auch VBA-(SQL)-String Video-Tutorial für Anfänger
    Wobei: Probleme bei der Stringverkettung (SQL-Anweisung in VBA einbinden mit externen Werten) zeigen sich nicht nur bei Anfängern. Die sieht man öfter. Genau das gleiche Problem hat man z.B. auch, wenn man Domänenaggregatfunktionen in normale SQL-Anweisungen einbindet.

    Grundlagen - SQL ist leicht (5) - Datentypbehandlung für VBA
    Eine Möglichkeit ist es, sich eine Formatierungsfunktion zu hinterlegen und die dann stupide anzuwenden. Man muss dann nur noch Datentypen erkennen und richtig verwenden, etwa ...
    Code:
    Das Ganze ist grundlegendes Handwerkszeug. Das sollte man beherrschen und sich nicht in einem 50-Beiträge-Thema verlieren.

    Daneben gibt es noch Alternativen, um das Gleiche zu tun.
    Das eine wäre die Verwendung einer richtigen Parameterabfrage. Durch die Schnittstelle definierter Parameter werden die Werte ohne gesonderte Formatierung entgegen genommen.

    Eine andere wäre das Erzeugen des neuen Datensatzes per Recordset-Methode (AddNew). Auch da braucht man keine gesonderten Formatierungen, und bei einem einzelnen Datensatz sind Anfügeabfrage und Recordset-Insert praktisch gleich schnell.
     
  12. Hi, danke für deine Links.
    das mit den Stings meine ich habe ich jetzt auch verstanden...
    Aber ich bekomme deine Funktion nicht in meine DB integriert.
    Andauernd geht was anderes nicht bzw jetzt kommen nur noch Fehler *mad.gif*
    hattest du dir mal die Beispiel DB angesehen? Habe ich vielleicht noch einen 2. Fehler?

    Mit folgendem Code konnte ich wenigstens die Buchungen mal normal durchführen:

    Code:
    Aber selbst das geht nicht mehr...
     
    Horst14, 1. Juli 2020
    #27
  13. Buchungsprobleme

    Naja, wenn Du mit dem gleichen Mist wieder von vorne anfängst, also sich der Lerneffekt bei der Umsetzung so überhaupt nicht zeigt, sollte man seine Erwartungen nicht sehr hoch ansetzen.
    Code:
    Einen Wert von außen muss man datentypgerecht formatieren. Hier wird Datum/Uhrzeit als Text losgefeuert. Wie soll das funktionieren?
    SQL ist nicht so fehlertolerant und selbstkonvertierend wie VBA, sondern konsequent stur.
    Wie sagte früher eine Waschmittelwerbung: Da weiß man, was man hat.

    Alternative (vereinfachend):
    Funktionen, die keine Argumente von außen brauchen, können als solche auch direkt im SQL-String verwendet werden.
    Code:
    Ja. An der konnte ich aber Deine Fragen nicht wirklich nachvollziehen mit vertretbarem Aufwand. Daher hatte ich sie schnell wieder weggelegt.
     
    ebs17, 1. Juli 2020
    #28
  14. Hi, ich will nicht mit dem alten weiter machen, ich will das es richtig funktioneirt.
    Now() nimmt das aktuelle Datum was es ja nicht soll... ich wollte nur damit sagen das es mal so ging und selbst wenn ich das so wieder rein schreibe wie es mal ging geht es nicht mehr da ich irgenwas scheinbar vermorgst habe.

    Ich musste mal meinem Frust freien lauf lassen :-).

    Spaß beiseite... aktuell geht halt gerade nicht wirklich was nichtmal das was du mir da geschickt hast wenn ich das rein kopiere als VBA Code bzw die Funktion als Modul.

    Hat es bei dir funktioniert wenn du es in meine beispiel Datenbank implementierst? Nicht das ich noch einen 2. fehler habe das den richtigen Code abhält richtig zu funktionieren :-/.
     
    Horst14, 1. Juli 2020
    #29
  15. Nachdem ich nun den Kopf wieder etwas freier habe, wittwe ich mich wieder meiner Datenbank. Ich habe mir die Datenbank wie von @ebs17 beschrieben angepasst.

    SQL Debug gibt mir jetzt folgendes zurück:
    Das sollte auch soweit passen, den das sind die Werte die ich eingetragen habe.

    Wenn ich jetzt auf Buchen klicke erscheint die Meldung:
    Fehler beim Kompilieren:
    Jedoch erscheint die Fehlermeldung nur wenn ich den Funktionsaufruf nicht auskommentiere.
    Code:
    Die Public Sub steht in der mdl_settings da wo auch die Public Function cSql steht.

    Habe ich wieder ein flüchtigkeitsfehler eingebaut?
     
    Horst14, 20. Juli 2020
    #30
Thema:

Buchungsprobleme

  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden