Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Daten mit ADODataSet in Access schreiben ? (https://www.delphipraxis.net/10774-daten-mit-adodataset-access-schreiben.html)

pnuernbe 24. Okt 2003 23:02


Daten mit ADODataSet in Access schreiben ?
 
Möchte mit ADODataSet Daten in eine Access Tabelle einfügen.
Der Eintrag in der Zeile Kind soll nur bei PersonenID 2 erfolgen.

Tabelle Personen
PersonenID KIND
1
2 1
3

Kennt jemand den richtigen SQL String bzw. Delphi Quelltext ?

r_kerber 25. Okt 2003 09:35

Re: Daten mit ADODataSet in Access schreiben ?
 
Hallo pnuernbe,

mal so aus der Hüfte geschossen :lol:
SQL-Code:
INSERT INTO Personen (PersonenID) VALUES (1);
INSERT INTO Personen (PersonenID, KIND) VALUES (2,1);
INSERT INTO Personen (PersonenID) VALUES (3)
Den SQL-String zur Laufzeit (in einer Schleife?!) in die Eigenschaft CommandText schreiben.
Delphi-Quellcode:
ADODataSet1.CommandText = 'INSERT INTO Personen (PersonenID) VALUES (' + IntToStr (PersonenID) + ')';

pnuernbe 25. Okt 2003 23:20

Re: Daten mit ADODataSet in Access schreiben ?
 
Also...danke erst mal...aber geht weiter...bin auf en Query umgestiegen und haben mit folgendem Quelltext eine Eintrag in die Datenbank vornehmen können:

Tabelle Personen
PersonenID KIND
1
2 1
3


ADOQuery.SQL.Text:='select * from Personen';
ADOQuery.Active:=True;
ADOQuery.Insert;
ADOQuery.FieldByName('Kind').Value:='1';
ADOQuery.Post;

Allerdings bekomme ich den Eintrag nur über FieldByName und nich über den String :
ADODataSet1.CommandText = 'INSERT INTO Personen (PersonenID) VALUES (' + IntToStr (PersonenID) + ')';
Weißt Du villeicht warum ?
...und möchte die eins bei Kind nur, wenn die zwei bei PersonenID ist.Bräuchte also glaube noch en
WHERE im SQL.

Gruß aus

Koblenz

pnuernbe

Duffy 25. Okt 2003 23:29

Re: Daten mit ADODataSet in Access schreiben ?
 
Hallo pnuernbe,
willst Du Datensätze einfügen oder bestehende Datensätze ändern. Falls Du ändern willst, ist INSERT das Falsche. Richtig wäre da
Code:
UPDATE Personen
  SET Kind = 1
WHERE PersonenID = 2
vorausgesetzt beide Felder sind Integer
bye

Leuselator 25. Okt 2003 23:49

Re: Daten mit ADODataSet in Access schreiben ?
 
Wie Duffy sagte (wieder mal einer schneller) :

Du solltest Dir erstmal klar machen, was Du willst. Wenn Du bestehende Daten ändern willst (und das hinzufügen eines Wertes in ein vormals leeres Feld eines schon existenten Datensatzes ist eine Änderung) dann Duffy's Variante um Delphicode ergänzt:
Delphi-Quellcode:
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('Update Personen');
  ADOQuery1.SQL.Add('  set Kind = 1');
  ADOQuery1.SQL.Add(' where PersonenID = 2');
  ADOQuery1.ExecSQL;
Sollten Die Datensätze jedoch noch nicht in der DB existieren, so kannst Du die Bedingung nicht im SQL-Statement formulieren, sondern mußt das schon in Delphi tun:
Delphi-Quellcode:
var i : Integer;
begin
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('insert into Personen');
  ADOQuery1.SQL.Add('           (       ');
  ADOQuery1.SQL.Add('           FeldA, ');//PersonenID sollte identity sein und darf
  ADOQuery1.SQL.Add('           FeldB, ');//deshalb nicht eingefügt werden (macht DB selbst)
  ADOQuery1.SQL.Add('           Kind  ');
  ADOQuery1.SQL.Add('           )     ');
  ADOQuery1.SQL.Add('           VALUES ');
  ADOQuery1.SQL.Add('           (       ');
  ADOQuery1.SQL.Add('           :ParaA, ');
  ADOQuery1.SQL.Add('           :ParaB, ');
  ADOQuery1.SQL.Add('           :ParaK ');
  ADOQuery1.SQL.Add('           )      ');
  ADOQuery1.Prepare;
  for i := 1 to 4 do
  begin
    ADOQuery1.ParamByName('ParaA').AsString := 'Test'; //Werte könnten aus z.B. TStringList
    ADOQuery2.ParamByName('ParaA').AsString := 'Probe'; //o.ä. stammen
    if i = 2 
      then begin
        ADOQuery2.ParamByName('ParaK').AsInteger := 1;
      end else begin
        ADOQuery2.ParamByName('ParaK').Clear;         // weist dem Parameter für Kind NULL
        ADOQuery2.ParamByName('ParaK').Bound := True; // zu und verhindert Setzung eines
      end;                                            // Standardwertes
    ADOQuery2.ExecSql
  end;
end;
greets

pnuernbe 26. Okt 2003 00:05

Re: Daten mit ADODataSet in Access schreiben ?
 
Glaube meinen das gleiche...

..aber bekomme mit diesem Quelltext keinen Eintrag.

ADO_Wahl.SQL.Text:='UPDATE Personen SET Kind = 1 WHERE PersonenID = 2;
ADO_Wahl.Active:=True;
ADO_Wahl.Insert;
ADO_Wahl.Post;


PS. Hab Folgende Einstellungen Im Objetinspector
Connection:=Connection
Active:=True
SQL:=Select * FROM Schuelertabelle

villeicht hast Du ja noch en Tip ?

Gruß

pnuernbe

Leuselator 26. Okt 2003 00:43

Re: Daten mit ADODataSet in Access schreiben ?
 
¿Warum versuchst Du garnicht erst die angebotenen Hilfen zu benutzen?

Wenn Du ein vernünftiges SQL-Statement baust, brauchst Du weder TAdoQuery.Insert noch TAdoQuery.Post
und auch nicht TAdoQuery.Active.

pnuernbe 26. Okt 2003 17:02

Re: Daten mit ADODataSet in Access schreiben ?
 
O.K. Leuselator...

ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Update Personen');
ADOQuery1.SQL.Add(' set Kind = 1');
ADOQuery1.SQL.Add(' where PersonenID = 2');
ADOQuery1.ExecSQL;

...hiermit konnte ich das Feld Kind an der Stele, wo PersonenID 2 ist füllen.
Super Fortschritt, da es sich bei mir um ne WebAnwendung (dll) handelt und ich
nicht weiter im Explorer testen kann wenn's nicht läuft.

nun aber folgendes...

var vergleich:string;
ADOQuery1.SQL.Add(' where PersonenID = vergleich');

Weißt Du villeicht mit welcher Syntax ich den String (vergleich) richtig eingebe.
Danke im Voraus....

Gruß

pnuernbe

Leuselator 26. Okt 2003 17:13

Re: Daten mit ADODataSet in Access schreiben ?
 
vielleicht nicht auf den ersten, aber auf den 2. Blick ersichtlich aus meinem 2. Beispiel:
Delphi-Quellcode:
var FVergleich : String; // zur besseren Unterscheidbarkeit "F" vorangestellt
begin
  ADOQuery1.SQL.Clear;
  // ... Statement mit Add zusammenbauen un dann:
  ADOQuery1.SQL.Add('where FeldName = :Parameter');//Prinzip:Doppelpunkt+Bezeichner=Parameter
  // für Dein konkretes Beispiel:
  ADOQuery1.SQL.Add('where PeronenID = :PVergleich'); // Parameter heisst "PVergleich"
  ADOQuery1.Prepare;
  ADOQuery1.ParamByName('PVergleich').AsString := FVergleich;// Wert an Parameter übergeben
  ADOQuery2.ExecSql // wenn Update- oder Insert-Befehl oder:
  ADOQuery2.Open   // wenn Select-Befehl
end;

pnuernbe 26. Okt 2003 18:43

Re: Daten mit ADODataSet in Access schreiben ?
 
Ja..gute Idee mit ParamBy Name..
aber
ADOQuery1.ParamByName('PVergleich').AsString := FVergleich;
gibt ne Fehlermeldung."Undefinierter Bezeichner Param By Name".

Weiß nicht warum, aber mir ist aufgefallen, das die Query Komponente aus der BDE
Registerkarte ander Features hat, als die aus der ADO Registerkarte...mit der
man bei em ParamByName keine Probleme hat.


Da geht folgendes einwandfrei, ist aber nicht auf ADO Query übertragbar...hab's
aus em früheren Projekt übernommen.

WorktimeQuery.SQL.Add('INSERT INTO Worktime (Personalnummer)');
WorktimeQuery.SQL.ADD('VALUES (:Personalnummer)');
WorktimeQuery.Params[0].AsString := PersonalnummerDBText.Caption;


Gruß

Pnuernbe


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:13 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