Autor Beitrag
Der Schreckliche
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: So 02.09.07 15:46 
Hallo zusammen,

einen Datensatz mit unbekannten Anzahl von Feldern in die eigene Tabelle kopieren habe ich soweit herausgefunden.
Mehrere Datensätze (unbekannte Anzahl)(gefiltert) in die eigene Tabelle kopieren, da hab ich noch erhebliche Probs.
Die gefilterte Anzahl kann ich schon kopieren aber immer nur den gleichen Datensatz.
Hat jemamd eine Idee?

Hier meine bisherige Lösung

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
Anzahl := ADODataSet5.RecordCount; {Bestimmt die Anzahl der Datensätze in Terminarten} 
max := ADODataSet5.Fields.Count -1; {Bestimmt die Anzahl der Datenfelder in Terminarten} 
Setlength (aRecord, max+1); 
Setlength (data, max+1); 
For n := 0 to Anzahl do {Wiederhole Vorgang so oft bis alle Datensätze kopiert sind} 
begin 
For i := 0 to max do 
begin 
aRecord[i].VType := vtVariant; 
aRecord[i].VVariant := @data[i]; 
end; 
For i := 0 to max do 
Data[i] := ADODataSet5.Fields[i].Value; {Terminarten} 
ADODataSet5.Append; {Kopiert den Datensatz in Terminarten} 
ADODataSet5.SetFields(aRecord); 
ADODataSet5.FieldByName('lfd').AsInteger := lfd;{Schreibt lfd in Terminarten} 
ADODataSet5.Next; 
end;


Hoffe auf eine Lösung

Gruß
Der Schreckliche

Moderiert von user profile iconChristian S.: Delphi-Tags hinzugefügt
Michael Stenzel
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 133


D3 Prof, D7 PE
BeitragVerfasst: So 02.09.07 22:21 
Hi, 'Der Schreckliche'.

Sollte bei Dir in Zeile 15 nicht aRecord[i] stehen?

ausblenden Delphi-Quelltext
1:
2:
3:
...
ADODataSet5.SetFields(aRecord[i]); 
...


Gruß
Michael.
raiguen
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 374

WIN 2000prof, WIN XP prof
D7EP, MSSQL, ABSDB
BeitragVerfasst: Mo 03.09.07 11:02 
user profile iconMichael Stenzel hat folgendes geschrieben:
Hi, 'Der Schreckliche'.

Sollte bei Dir in Zeile 15 nicht aRecord[i] stehen?

Nein! Die Syntax von 'Der Schreckliche' ist schon richtig, denn SetFields erwartet als Parameter ein Array, in diesem Fall ist es aRecord. Siehe auch die OH zu SetFields ;)

Lösungsvorschlag zum eigentlichen Thema:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
//Anzahl := ADODataSet5.RecordCount; {Bestimmt die Anzahl der Datensätze in Terminarten} 
max := GefiltertesDataSet.Fields.Count -1; {Bestimmt die Anzahl der Datenfelder in Terminarten} 
Setlength (aRecord, max+1); 
Setlength (data, max+1); 

//--VariantTyp der ArrayElemente festlegen
For i := 0 to max do
  aRecord[i].VType := vtVariant;

{Wiederhole Vorgang so oft bis alle Datensätze kopiert sind}
while not GefiltertesDataSet.Eof do  
  begin 
    For i := 0 to max do 
      aRecord[i].VVariant := GefilteresDataSet.Fields[i].Value; {Terminarten}; 

  {Kopiert den Datensatz in Terminarten}
  EigeneTabelle.Append;  
  EigeneTabelle.SetFields(aRecord); 
  EigeneTabelle.FieldByName('lfd').AsInteger := lfd;{Schreibt lfd in Terminarten} 
  EigeneTabelle.Post;
  GefiltertesDataSet.Next; 
end;

//--getippt und nicht getestet.
Der Schreckliche Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 48

Windows 7
Delphi XE5
BeitragVerfasst: Di 04.09.07 19:13 
Ich hab euren Vorschlag versucht.
Leider kommt in der Zeile 12

Inkompatible Typen: 'String und Integer!

Komm leider nicht weiter.

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
//Anzahl := ADODataSet5.RecordCount; {Bestimmt die Anzahl der Datensätze in Terminarten}
max := ADODataSet5.Fields.Count -1; {Bestimmt die Anzahl der Datenfelder in Terminarten}
Setlength (aRecord, max+1);
Setlength (data, max+1);
//--VariantTyp der ArrayElemente festlegen
For i := 0 to max do
  aRecord[i].VType := vtVariant;
{Wiederhole Vorgang so oft bis alle Datensätze kopiert sind}
while not ADODataSet5.Eof do
  begin
    For i := 0 to max do
      aRecord[i].VVariant := ADODataSet5[i].Value; {Terminarten};
  {Kopiert den Datensatz in Terminarten}
  ADODataSet5.Append;
  ADODataSet5.SetFields(aRecord);
  ADODataSet5.FieldByName('lfd').AsInteger := lfd;{Schreibt lfd in Terminarten}
  ADODataSet5.Post;
  ADODataSet5.Next;


Hat jemand eine Idee?