[Firebird 2.1 Delphi 2007] Datensatz kopieren
spacer
Autor Nachricht
landwehr
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31


Delphi 2007
BeitragVerfasst: Di 03.01.12 14:42 
Betrifft: Firebird 2.1 Delphi 2007
Hallo Leute,

ich habe folgenden Code um einen Datensatz auf einer DB in eine andere DB mit gleicher Struktur zu kopieren.
ausblenden Delphi-Quelltext markieren
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.


Werbung ausblenden? Dann registriere Dich kostenlos. Weitere Gründe für eine Registrierung.
bummi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 979
Erhaltene Danke: 124

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
DRY DRY KISS
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
Lemmy
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starhalf offtopic starofftopic star
Beiträge: 615
Erhaltene Danke: 9

Windows XP/7 Kubuntu
RAD XE2
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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
landwehr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31


Delphi 2007
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.
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
HelgeLange
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 715
Erhaltene Danke: 4

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
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
landwehr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31


Delphi 2007
BeitragVerfasst: Mi 04.01.12 15:56 
Wie kann ich denn in einer Schleife nachfragen ob dis ein Datenfeld ist?
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
zuma
ontopic starontopic starontopic starontopic starontopic starontopic starofftopic starofftopic star
Beiträge: 630
Erhaltene Danke: 11


D7 Enterprise, Delphi XE, Interbase (5 - XE)
BeitragVerfasst: Mi 04.01.12 16:14 
z.b mit
ausblenden Delphi-Quelltext markieren
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 markieren
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!
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
landwehr Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 31


Delphi 2007
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;
 
Antworten mit Zitat Beitrag melden
Private Nachricht sendenPosting in privater Nachricht zitieren
home home