Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi INSERT INTO Probleme. (https://www.delphipraxis.net/66963-insert-into-probleme.html)

anarkids 7. Apr 2006 07:19

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:
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;
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 :(

mfg, anarkids

alzaimar 7. Apr 2006 07:33

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.

marabu 7. Apr 2006 07:38

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:
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;
Freundliche Grüße vom marabu

anarkids 7. Apr 2006 07:44

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

Gollum 7. Apr 2006 07:47

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:

Zitat von alzaimar
... Die TADOQuery-Komponente dient zum laden von Recordsets, die verändert werden können.

:gruebel:

anarkids 7. Apr 2006 07:55

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

anarkids 7. Apr 2006 09:40

Re: INSERT INTO Probleme.
 
:( neuer fehler, neues pech :(

hi.

habe meine probleme mit dem insert into jetzt anders gelöst:
Delphi-Quellcode:
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;
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:
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

mkinzler 7. Apr 2006 09:46

Re: INSERT INTO Probleme.
 
Hat die atbelle eien Feld mit diesem Namen (Groß/Kleinschreibung)?

anarkids 7. Apr 2006 09:48

Re: INSERT INTO Probleme.
 
also sie wird genauso geschrieben wie oben angegeben...wenn du das meintest!

marabu 7. Apr 2006 09:50

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:
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;
marabu


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:16 Uhr.
Seite 1 von 2  1 2      

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