AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Daten mit ADODataSet in Access schreiben ?
Thema durchsuchen
Ansicht
Themen-Optionen

Daten mit ADODataSet in Access schreiben ?

Ein Thema von pnuernbe · begonnen am 24. Okt 2003 · letzter Beitrag vom 27. Okt 2003
Antwort Antwort
Seite 1 von 2  1 2      
pnuernbe

Registriert seit: 2. Jan 2003
18 Beiträge
 
#1

Daten mit ADODataSet in Access schreiben ?

  Alt 24. Okt 2003, 23:02
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 ?
  Mit Zitat antworten Zitat
Benutzerbild von r_kerber
r_kerber

Registriert seit: 11. Feb 2003
Ort: Trittau
3.538 Beiträge
 
Delphi XE Professional
 
#2

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 25. Okt 2003, 09:35
Hallo pnuernbe,

mal so aus der Hüfte geschossen
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.
ADODataSet1.CommandText = 'INSERT INTO Personen (PersonenID) VALUES (' + IntToStr (PersonenID) + ')';
  Mit Zitat antworten Zitat
pnuernbe

Registriert seit: 2. Jan 2003
18 Beiträge
 
#3

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 25. Okt 2003, 23:20
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
  Mit Zitat antworten Zitat
Benutzerbild von Duffy
Duffy

Registriert seit: 19. Mär 2003
Ort: Wuppertal
835 Beiträge
 
Delphi 3 Standard
 
#4

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 25. Okt 2003, 23:29
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
Künftige Generationen wollen ihre Fehler selber machen.
Jedes Programm wird nie das können, was Du wirklich brauchst.
Das Gegenteil von gut ist gut gemeint
-----
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#5

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 25. Okt 2003, 23:49
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
Tim Leuschner
  Mit Zitat antworten Zitat
pnuernbe

Registriert seit: 2. Jan 2003
18 Beiträge
 
#6

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 26. Okt 2003, 00:05
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
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#7

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 26. Okt 2003, 00:43
¿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.
Tim Leuschner
  Mit Zitat antworten Zitat
pnuernbe

Registriert seit: 2. Jan 2003
18 Beiträge
 
#8

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 26. Okt 2003, 17:02
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
  Mit Zitat antworten Zitat
Benutzerbild von Leuselator
Leuselator

Registriert seit: 18. Mär 2003
Ort: Berlin
589 Beiträge
 
Delphi 8 Architect
 
#9

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 26. Okt 2003, 17:13
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;
Tim Leuschner
  Mit Zitat antworten Zitat
pnuernbe

Registriert seit: 2. Jan 2003
18 Beiträge
 
#10

Re: Daten mit ADODataSet in Access schreiben ?

  Alt 26. Okt 2003, 18:43
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 (ersonalnummer)');
WorktimeQuery.Params[0].AsString := PersonalnummerDBText.Caption;


Gruß

Pnuernbe
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:24 Uhr.
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