Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi SQL-Insert mit ADO in Access Master / Detail Tabelle (https://www.delphipraxis.net/71007-sql-insert-mit-ado-access-master-detail-tabelle.html)

Computerbabalulu 7. Jun 2006 23:08

Datenbank: Access • Version: 2002 • Zugriff über: ADO

SQL-Insert mit ADO in Access Master / Detail Tabelle
 
Hallo zusammen..

Kann mir jemand erklären wir man mit ADO bei einer Access Datenbank mit Master – Detail Tabellen ein Insert der Daten macht?

Hier die Tabellen:

Master-Tabelle:
ID : = AutoWert (PrimärSchlüssel)
PNR: = Zahl (Long Integer)
Datum: = Datum

Detail - Tabelle:
MasterID = ID aus Mastertabelle
Kostenstelle = Zahl
Stückzahl = Zahl

Auf der Form hab ich eine TADOConnection, und jeweils 2 TADOTable, TDataSource und
zwei TADOQuery.

Die MasterSource Einstellungen der ADOTable wurde wie im folgendem Link beschrieben gemacht.

Ado Master/Detail

Vielen Dank im vorraus….

Gruß Frank

jensw_2000 8. Jun 2006 01:12

Re: SQL-Insert mit ADO in Access Master / Detail Tabelle
 
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
:hi:

Computerbabalulu 8. Jun 2006 01:18

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

:thumb:

Danke, das macht Hoffnung! Ich sitz nun schon 2 Tage vor dem Problem und habe das halbe Internet durchgelesen.
Ich werde es gleich mal testen! Du hörst von mir.....

Vorerst vielen Dank :!:


Gruß
Frank

Computerbabalulu 8. Jun 2006 01:56

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

Hallo nochmal.

Es funktioniert super :thumb: :thumb:
Ich musste nur Q:=TAdoQuery.create(self) in Q:=TAdoQuery.create(nil) ändern und das ein oder andere Semikolon ergänzen :zwinker:

Perfekt :coder: , vielen lieben Dank!

:witch: :witch: :witch: :witch: :witch: :witch: :witch:

Gruß Frank


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