Einzelnen Beitrag anzeigen

jensw_2000
(Gast)

n/a Beiträge
 
#2

Re: SQL-Insert mit ADO in Access Master / Detail Tabelle

  Alt 8. Jun 2006, 02:12
Inserts in die Master-Tabelle machst du so:

Delphi-Quellcode:
function SaveMaster(conn:TAdoConnection;ID,PNR:integer;Datum:TDatetime):boolean;
  var Q:TAdoQuery
begin
  result:=false;

  Q:=TAdoQuery.create(self);
  try
    q.connection:=conn;
    q.sql.text:='INSERT INTO [Mastertabelle] (ID,PNR,[Datum]) VALUES (:ID,:PNR,:DAT);';
    q.prepared:=true;
    q.paramcheck:=true;
    q.parameters.paramByName('ID').value:=ID;
    q.parameters.paramByName('PNR').value:=PNR;
    q.parameters.paramByName('DAT').value:=Datum;
    q.ExecSQL;
    result:=true;
  finally
    freeandnil(q);
  end;
end;
Inserts in die Detail Tabelle machst du so:

Delphi-Quellcode:
function SaveDetail(conn:TAdoConnection;MasterID,Kostenstelle,Stueckzahl:integer):boolean;
  var Q:TAdoQuery
begin
  result:=false;

  Q:=TAdoQuery.create(self);
  try
    q.connection:=conn;
    q.sql.text:='INSERT INTO [Detailtabelle] (MasterID,Kostenstelle,[Stückzahl]) VALUES (:MID,:KST,:ST);';
    q.prepared:=true;
    q.paramcheck:=true;
    q.parameters.paramByName('MID').value:=MasterID;
    q.parameters.paramByName('KST').value:=Kostenstelle;
    q.parameters.paramByName('ST').value:=Stueckzahl;
    q.ExecSQL;
    result:=true;
  finally
    freeandnil(q);
  end;
end;
Wenn du Detail-Datensätze zu einem existierenden Masterdatensatz speichern möchtest, dann rufst du nur SaveDetail auf:

Delphi-Quellcode:
if SaveDetail(MeineAdoConnection,MeineMasterAdoTable.fieldvalues['ID'],123,3) then
  showmessage('Detail-DS hinzugefügt');
Andernfalls speicherst du zuerst den Master-Datensatz ( SaveMaster() ), holst dir die ID und speicherst die Detail-Datensätze mit der neuen Master-ID dannach ab ...

UPDATE und DELETE laufen nach dem Selben Schema.

Den Code habe ich nicht getestet, aber grundlegend sollte es erstmal passen.



Schöne Grüße,
Jens
  Mit Zitat antworten Zitat