Hallo Snake, 8)
vielleicht hilft Dir dies hier....
Diese Prozedur ist in der Lage gezielt nur bestimmte Felder eines Datensatzes kopieren
...hier alle Felder bis auf zwei die nicht mitkopiert werden sollten:
QueryTableCopy(Query1, Table1, ['ID', 'AENDDATUM'];
oder alle Felder:
QueryTableCopy(Query1, Table1, [];
Natürlich die Hauptaufgabe ist hier ALLE Datensätze die in der
Query vorhanden sind zu kopieren…
Gruß
Paul Jr.
Delphi-Quellcode:
(* Komplete SQL-Tabellen kopieren!!!
TQuery (Quelle) in die TTable (Ziel) kopieren.
Hier werden NUR gleiche Felder von Querry in die Tabelle kopiert...
Aber NUR bis auf verbotene Felder (z.B. ID's und ÄnderungsDatum 'AENDDATUM'
sollen nicht mitkopiert werden
und dies ist so zu programmieren (Beispiel):
QueryTableCopy(Query1, Table1, ['ID', 'AENDDATUM'];
*)
PROCEDURE QueryTableCopy(
Query : TQuery; Tabelle : TTable; VerboteneFelder :
ARRAY OF STRING);
VAR
Index : Integer;
// für VerboteneFelder
IndexTable : Integer;
IndexQuery : Integer;
bVerboten : Boolean;
BEGIN
IF NOT Query.Active
THEN
Query.Open;
IF Query.EOF
THEN
BEGIN
Query.First;
IF Query.EOF
THEN
Exit;
END;
IF NOT Tabelle.Active
THEN
BEGIN
Tabelle.Open;
Tabelle.Append;
END
ELSE
IF Tabelle.State <> dsInsert
THEN
BEGIN
Tabelle.Cancel;
Tabelle.Append;
END;
WHILE NOT Query.EOF
DO
BEGIN
IF Tabelle.State <> dsInsert
THEN
Tabelle.Append;
TRY
FOR IndexTable := 0
TO Tabelle.FieldCount - 1
DO
FOR IndexQuery := 0
TO Query.FieldCount - 1
DO
IF CompareText(Tabelle.Fields[IndexTable].FullName,
Query.Fields[IndexQuery].FullName) = 0
THEN
BEGIN // kopiere, aber bis auf verbotene Felder (z.B. ID's sollen nicht kopiert werden
bVerboten := FALSE;
FOR Index := Low(VerboteneFelder)
TO High(VerboteneFelder)
DO
IF CompareText(Tabelle.Fields[IndexTable].FullName,VerboteneFelder[
Index]) = 0
THEN
bVerboten := TRUE;
IF NOT bVerboten
THEN
Tabelle.Fields[IndexTable].Assign(
Query.Fields[IndexQuery]);
END;
Tabelle.CheckBrowseMode;
Tabelle.Cancel;
EXCEPT
Tabelle.Cancel;
RAISE;
END;
Query.Next;
END;
END;