![]() |
Datenbank: Access • Version: 2003/10 • Zugriff über: ADO
Insert/MS Access
Hallo Leute,
mitlerweile habe ich mein ganzes Programm fertig, aber wie solls auch sein ...es gibt immer etwas was schief läuft.
Delphi-Quellcode:
oben könnt ihr mein Quelltext zum insertbefehl sehen. Laut meinem Wissen und Internet ist eig der Insertbefehl richtig. ich habe auf datum in der datenbank geachtet und auch mal in text umgewandelt und immer wieder bekomm ich eine fehlermeldung und ich weiß nicht was falsch ist. ich habe auch die fehlermeldung (Datentypen in Kriterienausdruck unvertraglich.) gegooglet und hat auch net wirklich weiter geholfen.
with ADOQuery_Buchen3 do
begin SQL.Text:= ('INSERT INTO Buchung (Pass_Nr, Zimmer_Nr, Anreise, Abreise) Values ("bu_e_passnummer.Text", "strtoint(bu_e_zimmernummer.Text)", "anreise", "abreise");'); ExecSQL; Active:= True; end; hatte auch mal wie mir mal geraten wurde mit parametern probiert, da kam aber auch i.eine fehlermeldung. ...entweder mach ich was falsch oder die datenbank ist faul :/ Habt ihr vlt ne idee woran es liegen könnte? danke im voraus :D |
AW: Insert/MS Access
Wenn Deine Buchungstabelle nur aus Varchars bestehen würde hättest Du hinterher folgende Daten in der Datenbank:
Pass_Nr |Zimmer_Nr |Anreise|Abreise __________________________________________________ ____________________ bu_e_passnummer.Text|strtoint(bu_e_zimmernummer.Te xt)|anreise|abreise :roll: |
AW: Insert/MS Access
Ich würde es mir nicht so schwer machen und lieber auf einige Millisekunden an Performance verzichten:
Delphi-Quellcode:
// die Bedingung WHERE 0=1 bewirkt, das keine unnötigen Daten abgerufen werden
ADOQuery_Buchen.SQL.Text := 'SELECT * FROM Buchung WHERE 0=1'; ADOQuery_Buchen.Open; ADOQuery_Buchen.Append; // Datensatz anhängen // das direkte Befüllen der Felder macht die Sache sehr einfach ADOQuery_Buchen['Pass_Nr'] := bu_e_passnummer.Text; ADOQuery_Buchen['Zimmer_Nr'] := strtoint(bu_e_zimmernummer.Text); ADOQuery_Buchen['Anreise'] := anreise; ADOQuery_Buchen['Abreise'] := abreise; // Datensatz speichern // im Hintergrund erzeugt die VCL eine INSERT-Anweisung und schickt sie an die Datenbank ADOQuery_Buchen.Post; |
AW: Insert/MS Access
Zitat:
|
AW: Insert/MS Access
Du hast hier mehr als nur einen Fehler drin ...
Delphi-Quellcode:
with ADOQuery_Buchen3 do
begin // Wenn ADOQuery_Buchen3 jetzt aber noch geöffnet ist ... ? SQL.Text:= ( // Wozu die Klammer? 'INSERT INTO Buchung (Pass_Nr, Zimmer_Nr, Anreise, Abreise) ' + 'Values (' + '"bu_e_passnummer.Text", ' + '"strtoint(bu_e_zimmernummer.Text)", ' + '"anreise", ' + '"abreise"' + ');' ); ExecSQL; Active:= True; // Wieso soll diese Abfrage (INSERT) wieder geöffnet werden? end;
Jetzt mal ein Schuss ins Blaue: Ich vermute, dass in
Delphi-Quellcode:
eine Abfrage enthalten ist, die du (evtl. in einem Grid) anzeigst. Aus unerfindlichen Spargründen versuchst du Komponenten einzusparen und für unterschiedliche Zwecke zu gebrauchen.
ADOQuery_Buchen3
Jetzt ein Lösungsvorschlag: Erstelle dir für jede dieser Datenveränderungs-Aufgaben eine Methode (in einem TDataModule)/eine Prozedur und rufe dann diese Methode/Prozedur auf. Für das oben genannte Beispiel würde dass dann wie folgt aussehen:
Delphi-Quellcode:
Aufrufen kannst du das nun mit
procedure AddBuchung( AConnection : TADOConnection; const Pass_Nr : string; Zimmer_Nr : Integer; Anreise, Abreise : TDateTime );
var LQry : TADOQuery; begin LQry := TADOQuery.Create( nil ); try LQry.Connection := AConnection; LQry.SQL.Add( 'INSERT INTO Buchung (Pass_Nr, Zimmer_Nr, Anreise, Abreise)' ); LQry.SQL.Add( 'VALUES ( :Pass_Nr, :Zimmer_Nr, :Anreise, :Abreise )' ); LQry.ParamByName( 'Pass_Nr' ).Value := Pass_Nr; LQry.ParamByName( 'Zimmer_Nr' ).Value := Zimmer_Nr; LQry.ParamByName( 'Anreise' ).Value := Anreise; LQry.ParamByName( 'Abreise' ).Value := Abreise; LQry.ExecSQL; finally LQry.Free; end; end;
Delphi-Quellcode:
AddBuchung( ADOConnection1, bu_e_passnummer.Text, StrToInt( bu_e_zimmernummer.Text ), Anreise, Abreise );
// Jetzt noch den Refresh/Requery auf das DataSet, womit die Buchungsdaten angezeigt werden |
AW: Insert/MS Access
Und zur Not läßt man sich den SQL-Text einfach mal anzeigen – entweder mit einem ShowMessage oder einem SaveToFile für weitere Verwendung. Meist sieht man spätestens dann, was man mal wieder für einen Murks zusammengepfuscht hat :o
|
AW: Insert/MS Access
Zitat:
|
AW: Insert/MS Access
Ist aber in diesem speziellen Fall nicht wirklich möglich, da der TE mit Delphi-Variablen arbeitet bzw. zu arbeiten versucht – und die kann Access beim besten Willen nicht kennen ...
|
AW: Insert/MS Access
Zitat:
|
AW: Insert/MS Access
... dann sollte man sich erst einmal mit SQL und Datenbank-Grundlagen befassen. Irgendwie find ich's immer etwas peinlich, wenn einfachste Fehlermeldungen nicht verstanden werden. Da frag ich mich dann manchmal, ob derjenige sich nicht besser ein anderes Hobby zulegen sollte als ausgerechnet Software-Entwicklung ... Oft wird ja nicht mal die Fehlermeldung genannt, sondern einfach nur "hilfe ich hab eine Fehlermeldung, was soll ich machen!" geschrien :roll:
|
AW: Insert/MS Access
Zitat:
Zitat:
|
AW: Insert/MS Access
Zitat:
Zitat:
Zitat:
|
AW: Insert/MS Access
Zitat:
|
AW: Insert/MS Access
Zitat:
Zitat:
Die wenigsten dürften den ganzen Tag damit verbringen Delphi-Code zu produzieren. Da wird noch schnell das Firmen Netzt administriert, der Kollegin nebenan gezeigt, daß nur eingeschaltete Drucker wirklich drucken, Und nebenher erklärt man seinem Chef warum Oracle und MS-SQL-Datenbanken einen weitgend aber nicht vollständig kompatiblen SQL-Dialekt nutzen. Zitat:
Zitat:
Zitat:
Gruß K-H |
AW: Insert/MS Access
Zitat:
Als ich vor vielen Jahren (irgendwann in den 80ern mit dem C-64) mit dem Programmieren anfing, gab es weder ein Forum noch sonst irgendwelche Hilfestellung von anderen, abgesehen von den monatlich erscheinenden C64-Heften. Ohne echtes Interesse und Freude an der Sache hätte ich keinen Antrieb verspürt, da dran zu bleiben. |
AW: Insert/MS Access
Hallo-
Ich habe nicht aktiv zu irgendeiner Lösung hier beigetragen - Datenbanken sind nicht mein Gebiet. Trotzdem will ich mich jetzt auch einschalten und Anfänger2013 in Schutz nehmen: Ich habe selber eine ziemlich miserable Schule besucht. Ich weiß nicht, ob es in anderen Bundesländern als NRW oder anderen deutschsprachigen Staaten großartig anders ist - Aber das ganze Fach "Informatik" ist nicht ernst zunehmen, wenn man vielleicht 45 oder 90 Minuten in der Woche einen Pseudo-Lehrer für so etwas einstellt. Einem Schüler jetzt den Vorwurf zu machen, nicht mit vollstem Herzblut Informatik (ein zufälliges Fach von einem Dutzend!) zu seinem neuen Hobby uns Lebensstil machen zu wollen - Das finde ich wirklich weit hergeholt. Ich habe in meiner Schulzeit selber oft genug erlebt, wie ein Hampelmann, der nur Physik auf Lehramt gelernt hat, jegliche Begeisterung für die Sache im Keim erstickt. Dass Anfänger2013 überhaupt seit mehreren Tagen dranbleibt finde ich schon eine tolle Sache. Dass plötzlich die Aufgabe besteht, irgendetwas zusammenzuschustern ohne dass man verstanden hat, was relational bei "relationalen Datenbanken" überhaupt bedeutet - So habe ich meine Schulzeit in Sachen Informatik in Erinnerung. Bei ihm wird es nicht anders sein. Mir fällt es zumindest schwer, jemandem trotzdem zu sagen "Arbeite einfach härter dran" und es wird schon klappen. PS: ![]() |
AW: Insert/MS Access
@ Der schöne Günther
Es geht nicht darum, leidgeprüfte Schüler zu verunglimpfen. Zumindest ich sehe aber nicht ein, den Leuten ständig Grundlagen erklären zu müssen, die bereits in etlichen Anfänger-Tutorials stehen. Natürlich ist das Forum da, um sich gegenseitig bei Programmierproblemen zu helfen, jedoch nicht, um die mangelhafte Qualifikation von Lehrkräften auszugleichen oder gar um deren Arbeit zu machen. Häufig werden Lösungsvorschläge nicht einmal wahr- und angenommen, geschilderte Zusammenhänge ignoriert und dann lieber in einem anderen Forum die Frage noch einmal gestellt, in der Hoffnung, vielleicht dort den so dringend benötigten Code zu erhalten. @ alle Schüler: Da ihr wohl alle bereits festgestellt habt, daß das, was ihr im Unterricht lernt, nicht ausreicht, eine Programmiersprache so weit zu beherrschen, um damit ansprechende Programme zu entwickeln, kommt ihr nicht darum herum, euch mit den verfügbaren Einsteiger- und Anfänger-Tutorials zu befassen. Alles andere führt zu nichts. Es ist mühsam und nervtötend, wenn man liest, daß z.B. jemand einfach einen Quellcode aus dem Internet kopiert und dann rumheult, weil das Programm nicht auf Anhieb funktioniert. Erst gestern las ich von einem Anfänger, der den Code eines Formulars verwandte, ohne die entsprechenden Komponenten auf seinem Form zu haben und sich dann über Zugriffsverletzungen wunderte. Wenn man sowas jahrelang Tag für Tag zu lesen bekommt, kann einem schon mal der Gaul durchgehen ... |
AW: Insert/MS Access
Zitat:
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz