Entwickler-Ecke
Datenbanken - Datensatz kopieren
landwehr - Di 03.01.12 13:42
Titel: Datensatz kopieren
Hallo Leute,
ich habe folgenden Code um einen Datensatz auf einer DB in eine andere DB mit gleicher Struktur zu kopieren.
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
Narses: Delphi-Tags hinzugefügt
bummi - Di 03.01.12 13:44
hast Du zusätzlich berechete oder Lookupfelder im Dataset Patient1Qry?
Lemmy - Di 03.01.12 13: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 - Di 03.01.12 14: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 - Di 03.01.12 17: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.
landwehr - Mi 04.01.12 14:56
Wie kann ich denn in einer Schleife nachfragen ob dis ein Datenfeld ist?
zuma - Mi 04.01.12 15:14
z.b mit
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:
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 ziel.post; quelle.next end; |
landwehr - Mi 04.01.12 17: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;
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!