![]() |
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 ? |
Re: Daten mit ADODataSet in Access schreiben ?
Hallo pnuernbe,
mal so aus der Hüfte geschossen :lol:
SQL-Code:
Den SQL-String zur Laufzeit (in einer Schleife?!) in die Eigenschaft CommandText schreiben.
INSERT INTO Personen (PersonenID) VALUES (1);
INSERT INTO Personen (PersonenID, KIND) VALUES (2,1); INSERT INTO Personen (PersonenID) VALUES (3)
Delphi-Quellcode:
ADODataSet1.CommandText = 'INSERT INTO Personen (PersonenID) VALUES (' + IntToStr (PersonenID) + ')';
|
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 |
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:
vorausgesetzt beide Felder sind Integer
UPDATE Personen
SET Kind = 1 WHERE PersonenID = 2 bye |
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:
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:
ADOQuery1.SQL.Clear;
ADOQuery1.SQL.Add('Update Personen'); ADOQuery1.SQL.Add(' set Kind = 1'); ADOQuery1.SQL.Add(' where PersonenID = 2'); ADOQuery1.ExecSQL;
Delphi-Quellcode:
greets
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; |
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 |
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. |
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 |
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; |
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. |
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