Autor Beitrag
landwehr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

WIN XP, WIN 7, WIN 8
Delphi 6, Delphi 2007, Delphi XE2
BeitragVerfasst: Di 03.01.12 14:42 
Hallo Leute,

ich habe folgenden Code um einen Datensatz auf einer DB in eine andere DB mit gleicher Struktur zu kopieren.
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
        dmMain.qryEmpfang.Open;
        dmMain.qryEmpfang.Append;
        for i := 0 to Patient1Qry.fieldcount -1 do
         begin
              dmMain.qryEmpfang.Fields[i].Value := Patient1Qry.Fields[i].Value;
         end;
        dmMain.qryEmpfang.post;
       end;
Die Schleife läuft alle Felder durch un am ende kommt die Meldung EListError "ListenIndex überschreitet das Maximum(141)"

141 Felder sind in der Tabelle.

Warum kommt diese Meldung und was mache ich da falsch.?

Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1248
Erhaltene Danke: 187

XP - Server 2008R2
D2 - Delphi XE
BeitragVerfasst: Di 03.01.12 14:44 
hast Du zusätzlich berechete oder Lookupfelder im Dataset Patient1Qry?

_________________
Das Problem liegt üblicherweise zwischen den Ohren H₂♂
DRY DRY KISS
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 792
Erhaltene Danke: 49

Windows 7 / 10; CentOS 7; LinuxMint
Delphi 7-XE10.1, VS 2015
BeitragVerfasst: Di 03.01.12 14:57 
Hi,

Durchdebuggen bis zum schluss und dann schauen welche der Queries keine 141 Felder hat und dann überlegen warum die Struktur doch nicht übereinstimmt. Hast Du ggf. vergessen nach einer DB Anpassung die manuell erzeugten Felder zu aktualisieren?

GRüße
landwehr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

WIN XP, WIN 7, WIN 8
Delphi 6, Delphi 2007, Delphi XE2
BeitragVerfasst: Di 03.01.12 15:39 
Ich habe ein Computed Feld 'Namekomplett' (Vorname|| ' ' ||Name)

Ist das der Grund?

DB1 ist gleich DB2 habe ich kopiert. Die DB ist nicht verändert worden.
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 735
Erhaltene Danke: 6

Windows 7
Delphi7 - Delphi XE
BeitragVerfasst: Di 03.01.12 18:01 
Wenn DU im der Quelle ein computed field hast, dann ist das im Ziel wohl eher nicht vorhanden, da es ja kein physisches Feld in Deiner DB ist. Vielleicht einfach in der Schleife fragen, ob das Feld ein Datenfeld ist oder nicht. Der Fehler scheint ja zu sein, dass Deine Quelle mehr Felder hat als Dein Ziel.

_________________
"Ich bin bekannt für meine Ironie. Aber auf den Gedanken, im Hafen von New York eine Freiheitsstatue zu errichten, wäre selbst ich nicht gekommen." - George Bernhard Shaw
landwehr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

WIN XP, WIN 7, WIN 8
Delphi 6, Delphi 2007, Delphi XE2
BeitragVerfasst: Mi 04.01.12 15:56 
Wie kann ich denn in einer Schleife nachfragen ob dis ein Datenfeld ist?
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 660
Erhaltene Danke: 21

Win XP, Win7, Win 8
D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 04.01.12 16:14 
z.b mit
ausblenden Delphi-Quelltext
1:
quelle.Fields[i].DataType ?					


ich mach sowas eher so:
1 Quelldaten lesen
2 Zielstruktur aus quellstruktur erzeugen (Select wie bei Quellstruktur aber mit zusatz rows = 0 oder bedingung 1=0, ergibt ne leere Datenmenge mit lediglich der Struktur)
3 Daten schaufeln in etwa so:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
while not quelle.eof do
begin
 Ziel.Append;
 for i := 0 to quelle.fieldcount-1 do
  fields[i].asvariant := quelle.asvariant
 // evtl. Keyfelder anpassen
 ziel.post;
 quelle.next
end;

_________________
Ich habe nichts gegen Fremde. Aber diese Fremden sind nicht von hier! (Methusalix)
Warum sich Sorgen ums Leben machen? Keiner überlebts!
landwehr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 46

WIN XP, WIN 7, WIN 8
Delphi 6, Delphi 2007, Delphi XE2
BeitragVerfasst: Mi 04.01.12 18:22 
Hab ich jetzt so gelöst.

for i := 0 to Patient1Qry.FieldCount -2 do
begin
if dmMain.qryEmpfang.Fields[i] <> Nil then
dmMain.qryEmpfang.Fields[i].asVariant := Patient1Qry.Fields[i].AsVariant;
end;
dmMain.qryEmpfang.post;
end;