AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Insert/MS Access

Ein Thema von Anfänger2013 · begonnen am 14. Apr 2013 · letzter Beitrag vom 16. Apr 2013
Antwort Antwort
Seite 1 von 2  1 2      
Anfänger2013

Registriert seit: 8. Apr 2013
11 Beiträge
 
#1

Insert/MS Access

  Alt 14. Apr 2013, 22:30
Datenbank: Access • Version: 2003/10 • Zugriff über: ADO
Hallo Leute,
mitlerweile habe ich mein ganzes Programm fertig, aber wie solls auch sein ...es gibt immer etwas was schief läuft.
Delphi-Quellcode:
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;
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.
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
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#2

AW: Insert/MS Access

  Alt 14. Apr 2013, 22:39
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

Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 15. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#3

AW: Insert/MS Access

  Alt 15. Apr 2013, 00:02
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;
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#4

AW: Insert/MS Access

  Alt 15. Apr 2013, 04:10
Datentypen in Kriterienausdruck unvertraglich
Also deutlicher kann eine Fehlermeldung wohl nicht mehr ausfallen. Du mußt jetzt einfach überprüfen, ob alle Daten, die du an Access schickst, den richtigen Datentypen entsprechen. Oder worauf sonst sollte diese Fehlermeldung wohl hinweisen? Zeig doch mal deine Tabellendefinition.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#5

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:46
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;
  1. Du weist der ADOQuery_Buchen3 einfach etwas zu, obwohl die geöffnet sein kann -> vorher schließen
  2. Du schreibst direkt in das SQL-Skript (wird in der/durch die Database-Engine ausgeführt) Bezüge aus deinem Programm (bu_e_passnummer.Text , bu_e_zimmernummer.Text ) bzw. benutzt dort Delphi-Funktionen (strtoint ).
    Dies/e sind aber der Database-Engine (MS-Access) gänzlich unbekannt
  3. Nach dem Ausführen des SQl-Skripts (INSERT -> verändert Daten aber liefert keine Daten zurück) setzt du das auf aktiv, aber was soll das bezwecken? Da kann nichts zurückkommen, ausser dass der INSERT hier nochmals ausgeführt wird

Jetzt mal ein Schuss ins Blaue:

Ich vermute, dass in ADOQuery_Buchen3 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.

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:
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;
Aufrufen kannst du das nun mit
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
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#6

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:52
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
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#7

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:54
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
... und wenn man es nicht sieht, dann führt man den einfach mal direkt im Datenbank-System aus und lässt sich dort die Fehler um die Ohren hauen ... um zu merken, dass ist kein Delphi-Fehler, sondern mein Murks
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#8

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:56
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 ...
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#9

AW: Insert/MS Access

  Alt 15. Apr 2013, 05:58
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 ...
Aber wenn man das nicht erkennt
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: Insert/MS Access

  Alt 15. Apr 2013, 06:04
... 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
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz