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
 
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
 


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:26 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-2025 by Thomas Breitkreuz