![]() |
Datenbank: ACCESS • Version: 2003 • Zugriff über: ADO/JET
INSERT INTO Probleme.
hi erstmal.
Ich habe gestern mit Delphi eine Verbindung zu meiner ACCESS 2003 Datenbank erstellt. Nun soll Delphi der ADO/JET Datensätze in diese Datenbank einfügen und auch wieder auslesen können. Dabei stellt sich mir aber wenn ich Datensätze per Klick auf "Button2CLick" in die Datenbank einfügen will folgende Fehlermeldung in den Weg: Unzulässige SQL-Anweisung; 'DELETE, 'INSERT', 'SELECT' oder 'UPDATE erwartet. Daraus schließe ich, dass sich im SQL-Befehl irgendein Schreibfehler versteckt, welchen ich noch nicht finden konnte (benutze Delphi seit 2 Wochen). Noch der Code:
Delphi-Quellcode:
Und um nochmal etwas vorwegzunehmen: JA ich habe natürlich vorher die Suchfunktion benutzt und auch dazu gegoogelt. Leider hab ich nix gefunden, was passen würde :(
procedure TForm4.Button2Click(Sender: TObject);
begin ado_q.active := true; //Das ist mein TADOQuery try ado_q.SQL.Clear; ado_q.SQL.Add('INSERT INTO Serverdaten([Servername],[URL],[IPAdresse],[ServiceLevel]) values("'+S_Edit1.text'","'+S_Edit2.text'","'+S_Edit3.text'","'+S_Edit5.text'")'); ado_Q.SQL.ExecSQL; finally ADO_Q.Active := false; end; end; mfg, anarkids |
Re: INSERT INTO Probleme.
Was steht VORHER (vor der 1.Zeile) im ado_q.SQL drin? Wieso setzt Du Active auf True/False? Schmeiss das raus.
Verwende außerdem die TADOConnection.Execute - Methode, um SQL-Befehle abzusetzen. Die TADOQuery-Komponente dient zum laden von Recordsets, die verändert werden können. |
Re: INSERT INTO Probleme.
Herzlich willkommen in der Delphi-PRAXiS, anarkids.
Die Fehlermeldung erhältst du, weil du bei Aktivierung der Query (Active := true) noch kein SQL-Statement zugewiesen hast.
Delphi-Quellcode:
Freundliche Grüße vom marabu
procedure TForm4.Button2Click(Sender: TObject);
begin with ADOCommand do begin CommandText := 'INSERT INTO Serverdaten(' + 'Servername, URL, IPAdresse, ServiceLevel' + ') VALUES(' + ':servername, :url, :ipadresse, :servicelevel' + ')'; Parameters.ParamByName('servername').Value := S_Edit1.Text; // ... ExecSQL; end; end; |
Re: INSERT INTO Probleme.
danke ihr beiden.
endlich mal jemand, der mir seriöse-antworten auf meine frage geben konnte. hat alles geklappt und bin total zufrieden ;-) dankeschön!!!! |
Re: INSERT INTO Probleme.
Hallo,
@anarkids: Wie alzaimir bereits geschrieben hat, nimm die Active-Anweisung weg. Wenn du einem Query-Object ein SQL-Statement zuweist, darf die Query nicht aktiv sein. Ausserdem könntest Du dir angewöhnen, Deinen SQL-String übersichtlicher zu gestalten und Parameters zu benutzen:
Delphi-Quellcode:
with ado_q do
begin Close; SQL.Text:= 'INSERT INTO Serverdaten '+#13#10+ '([Servername], [URL], [IPAdresse], [ServiceLevel])'+#13#10+ 'VALUES (:server, :url, :ip, :service)'; with Parameters do begin ParamByName('server').Value:=S_Edit1.text; ParamByName('url').Value:=S_Edit2.text; ParamByName('ip').Value:=S_Edit3.text; ParamByName('service').Value:=S_Edit4.text; end; // with Parameters try ExecSQL; except on E: Exception do ShowMessage(E.Message); end; // try end; // with ado_q Zitat:
|
Re: INSERT INTO Probleme.
also das es an der active anweisung lag. darauf wär ich nie gekommen :-D . aber danke für die wirklich nützlichen infos.
in dem sinne: wer nicht fragt, der nicht gewinnt ;-) liebe grüße anarkids |
Re: INSERT INTO Probleme.
:( neuer fehler, neues pech :(
hi. habe meine probleme mit dem insert into jetzt anders gelöst:
Delphi-Quellcode:
Also in die ersten beiden Tabellen (Serverdaten, Personen) schreibt das Programm alle Datensätze super schnell rein, doch wenn er in die Tabelle Kunden etwas schreiben soll sagt er mir:
server_A := 'select * from Personen';
ado_q.close; ado_q.sql.text := server_a; ado_q.insert; ado_q.fieldbyname('Name').asstring := A_Edit1.text; ado_q.fieldbyname('Vorname').asstring := A_Edit2.text; ado_q.fieldbyname('Strasse').asstring := A_Edit3.text; ado_q.fieldbyname('Hausnummer').asstring := A_Edit4.text; ado_q.fieldbyname('PLZ').asstring := A_Edit5.text; ado_q.fieldbyname('Ort').asstring := A_Edit6.text; ado_q.fieldbyname('TelFirma').asstring := A_Edit7.text; ado_q.fieldbyname('TelPrivat').asstring := A_Edit8.text; ado_q.fieldbyname('TelHandy').asstring := A_Edit9.text; ado_q.fieldbyname('EMailW').asstring := A_Edit10.text; ado_q.fieldbyname('EMailS').asstring := A_Edit11.text; ado_q.Post; server_k := 'select * from Kunden'; ado_q.close; ado_q.sql.text := server_k; ado_q.insert; ado_q.fieldbyname('Firmenname').asstring := K_Edit12.text; //hier sitzt meine fehlermeldung! ado_q.fieldbyname('Firmenname2').asstring := K_Edit13.text; //das geht noch bis K_Edit20.text weiter (...) ado_q.post; Feld 'Firmenname' wurde nicht gefunden. Und ich verstehe absolut nicht warum. Habe schon seit 2 Tagen völligen Denk-Blackout :( Für einen kleinen Anstoß wär ich sehr dankbar |
Re: INSERT INTO Probleme.
Hat die atbelle eien Feld mit diesem Namen (Groß/Kleinschreibung)?
|
Re: INSERT INTO Probleme.
also sie wird genauso geschrieben wie oben angegeben...wenn du das meintest!
|
Re: INSERT INTO Probleme.
Hi.
Du solltest nicht immer alle Sätze vom Server holen, wenn du nur einen einzigen Satz hinzufügen willst. Das Setzen von SQL.Text schließt eine offene Query. ADOCommand magst du wohl nicht. Felder die nicht gefunden werden existieren meistens auch nicht - Hallo Markus.
Delphi-Quellcode:
marabu
begin
with ADO_Q do begin SQL.Text := 'select * from Personen where 1 = 0'; Open try Insert; Fieldbyname('Name').AsString := A_Edit1.Text; // ... Post; finally Close; end; end; // ... end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:24 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