Entwickler-Ecke
Datenbanken - Neue Tabelle feldweise füllen
D. Annies - Sa 18.02.12 23:11
Titel: Neue Tabelle feldweise füllen
Hi, Delpher,
wie kann ich eine neu angelegte Tabelle mit mehreren Datensätzen feldweise füllen?
Ich habe bisher folgenden Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25:
| while not eof(tc) do begin readln(tc, recStr); rcol := 0; repeat PosKomma := Pos(',', recStr); if PosKomma > 0 then sField := Copy(recStr, 1, PosKomma - 1) else sField := recStr; if TbSynctab.Fields[rcol].DataType = ftInteger then TbSynctab.Fields[rcol].AsInteger := strtoint(sField); if TbSynctab.Fields[rcol].DataType = ftString then TbSynctab.Fields[rcol].AsString := sField; if TbSynctab.Fields[rcol].Datatype = ftDate then TbSynctab.Fields[rcol].AsDateTime := strtodate(sField); if PosKomma > 0 then begin Delete(recStr, 1, PosKomma); rCol := rCol + 1; end; until PosKomma = 0; end; |
Wie kann ich den ersten Datensatz füllen, bzw. in der dbf-Tabelle "weiterschalten"?
Vielen Dank, Detlef
Narses - Sa 18.02.12 23:18
Moin!
BDE? Ist schon länger her... :gruebel: Das ging so ähnlich:
Delphi-Quelltext
1: 2: 3:
| Table1.Append; Table1['Feld1'] := 'Test'; Table1.Post; |
Noch ein Tipp: Wenn du eine CSV-Datei lesen willst, dann geht das relativ elegant mit zwei TStringList. Eine für die Datei, die andere für eine Zeile, einfach auf .CommaText schreiben, dann hast du die Felder direkt getrennt. :idea:
cu
Narses
D. Annies - So 19.02.12 13:03
Danke, das war der richtige Tipp!
Ja, es geht eleganter, aber ich bin gehalten, es so (nach-) zu machen, wie ein Dozent es vorgetragen hat.
:) Gruß, Detlef
jasocul - Mo 20.02.12 08:54
Da die Feld-Typen (ftString, ftInteger, ...) aufzählbar sind, kannst du aus deiner If-Struktur auch eine Case-Struktur machen.
Zu Narses Tipp:
Das kommt sehr auf die Datenmenge an. Eine Zuweisung ohne Typ-Prüfung ist nach meiner Erfahrung langsamer, als eine typengenaue Zuweisung.
Wenn es also nur um ein paar Datensätze geht, die eingelesen werden sollen, kann man das so machen. Bei großen Datenmengen, kann das dann aber dauern.
Außerdem solltest du dafür sorgen, dass Umwandlungen "sicher" sind. Ein StrToInt muss nicht unbedingt das Ergebnis haben, das man sich wünscht. Besser ist in dem Fall wohl StrToIntDef, wobei du dann noch eine Plausibilitätsprüfung dranhängen könntest/solltest. Aber das nur am Rande. :wink:
D. Annies - Di 21.02.12 10:09
Hi, Peter,
danke für deine Nachsorge. Die CASE..Of-Struktur werde ich wohl noch setzen.
Bis dann denn, :))
Detlef
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!