Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi ADO: ein simples INSERT (https://www.delphipraxis.net/82003-ado-ein-simples-insert.html)

Ajin 6. Dez 2006 15:30

Datenbank: MS ACCESS • Version: 2003 • Zugriff über: ADO Komponenten

ADO: ein simples INSERT
 
Hallo DP!

Eine klitzekleine test.mdb hat nur 2 Felder: ID und text. Das ID Feld ist der PK und hat einen auto-inkrement.

Gebastelt hab ich folgende Funktion:

Delphi-Quellcode:
function insert_test(wert1: string):boolean;
begin
 insert_test := true;
 try
  Fmain.ADOCommand1.CommandType := cmdText;
  Fmain.ADOCommand1.CommandText := 'INSERT INTO test VALUES (' + '' + ', ' + wert1 + ');';
  Fmain.ADOCommand1.Execute;
 Except
  insert_test := FALSE;
 end;
End;
Der Aufruf der Funktion soll so aussehen:

Delphi-Quellcode:
insert_test('Hallo Welt');
Dann müsste bei jedem Aufruf das ID Feld hochgezählt werden und im Text Feld steht immer Hallo Welt.

Ich habe schon ettliche Beispiele durch die Suchfunktion gefunden, aber ich werd einfach nicht aus den vielen Klammern und Hochkommatas schlau. Ich bekomme durch meine experimente verschiedene Fehlermeldungen.

Wie lautet denn nun die richtige Syntax zu

Delphi-Quellcode:
Fmain.ADOCommand1.CommandText := 'INSERT INTO test VALUES (' + '' + ', ' + wert1 + ');';

Maja Jessica 6. Dez 2006 15:45

Re: ADO: ein simples INSERT
 
Hi,

meine Meinung:

Delphi-Quellcode:

Fmain.ADOCommand1.CommandText := 'INSERT INTO test VALUES ("", '
                                  + QuotedStr(wert1) + ')';
Bei dem AutoID-Feld bin ich mir nicht sicher, könnte daher auch so:

Delphi-Quellcode:

Fmain.ADOCommand1.CommandText := 'INSERT INTO test (text) VALUES ('
                                  + QuotedStr(wert1) + ')';
Soviel zu meinem Halbwissen, kann ich im Moment nicht testen ...

MJ

Ajin 6. Dez 2006 15:50

Re: ADO: ein simples INSERT
 
Hallo Maja Jessica!

Beim Test deiner 1. Variante bekomm ich den Fehler: Datentypen in Kriterienausdruck unverträglich
und bei der 2. Variante ein Syntaxfehler in der INSERT INTO Anweisung :|

Ich danke dir trotzdem für deine Antwort !

Maja Jessica 6. Dez 2006 16:23

Re: ADO: ein simples INSERT
 
Zitat:

Zitat von Ajin
Hallo Maja Jessica!

Beim Test deiner 1. Variante bekomm ich den Fehler: Datentypen in Kriterienausdruck unverträglich
und bei der 2. Variante ein Syntaxfehler in der INSERT INTO Anweisung :|

Ich danke dir trotzdem für deine Antwort !

grrr (daher auch meine Warnung "Halbwissen") :wink:

Ich benutze kein ADO sondern mache alles mit AbsoluteDB. Sollte aber von SQL-Syntax her etwa gleich sein.
Wie war das noch bei einem Insert und Auto-ID ... :gruebel: ich komm' jetzt nicht darauf...
Schliesslich füllt die DB das Feld ja selbst mit einem Wert. Muss ich den jetzt angeben oder nicht?
Schonmal mit einer Übergabe von 0 an das AutoID-Feld versucht?

Oder warten auf die Profis im Forum :?


MJ

shmia 6. Dez 2006 16:23

Re: ADO: ein simples INSERT
 
[quote="Ajin"]Eine klitzekleine test.mdb hat nur 2 Felder: ID und text. [delphi]
Das ist schon mal schlecht: "text" ist ein reserviertes Wort und kann einen Syntaxfehler verursachen! :warn:
Ich würde beide Feldnamen ändern, denn "ID" ist auch sehr allgemein.

Ajin 6. Dez 2006 16:27

Re: ADO: ein simples INSERT
 
Also den Wert für das ID (autoinkrement) Feld kann man mit leer angeben, das Hochzählen macht die DB dann selbst. Dennoch kann ich keinen einzigen Datensatz anlegen.

Maja Jessica 6. Dez 2006 16:41

Re: ADO: ein simples INSERT
 
Ein wenig googlen auf SwissDeplhi ergab

Delphi-Quellcode:
// Insert a new Record...
var
  LastID: Integer;
//  Query: TADOQuery;
//  oder
//  Query: TQuery;
begin
  Query.Active := False;
  Query.SQL.Clear;
  Query.SQL.Append('INSERT INTO Table (Spalte) VALUES (Value)');
  Query.ExecSQL;
end;
Ist also so, daß man die ID-Spalte links liegen lässt. Punkt.
Du bekommst keine Fehlermeldung?

:gruebel:

bttb930 6. Dez 2006 16:46

Re: ADO: ein simples INSERT
 
warum nicht

Delphi-Quellcode:
  Query.sql.Text := 'INSERT INTO Tabelle (Feld) VALUES (:Feld)';
  Query.ParamByName('Feld').Value := 'Hallo DB';
  Query.Execute; // oder ExecSQL?? Die Code-Vervollständigung weiß es
oder

Delphi-Quellcode:
  Query.sql.Text := 'SELECT * FROM Tabelle WHERE id=0';
  Query.Open;
  Query.Append;
  Query.FieldByName('Feld').Value := 'Hallo DB';
  Query.Post;
  Query.Close;

Ajin 7. Dez 2006 12:34

Re: ADO: ein simples INSERT
 
Moin Ihr!

Ich hab die Lösung nun:

Delphi-Quellcode:
procedure TFmain.Button1Click(Sender: TObject);
var wert1, wert2: string;
begin
  Fmain.ado_query.Active:= FALSE;
  Fmain.ado_query.SQL.Clear;
  wert1:='Hallo Du';
  Fmain.ado_query.SQL.Append('INSERT INTO test (w1,w2) VALUES ("' + wert1 + '",'+
                                                              '"' + Wert1 + '")');
  try
    Fmain.ado_query.ExecSQL;
  except
    Messagebox(handle,'Duplikat?','',0);
  end;
end;
Mfg

Ajin

Maja Jessica 7. Dez 2006 12:42

Re: ADO: ein simples INSERT
 
Hi,
schön das es jetzt klappt! :thumb:
Du hast nun aber in Spalte w1 und w2 den gleichen Eintrag 'Hallo Du'.
Funktioniert auch die AutoID?

MJ


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:43 Uhr.
Seite 1 von 2  1 2      

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