Autor Beitrag
D. Annies
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: Sa 18.02.12 23:11 
Hi, Delpher,

wie kann ich eine neu angelegte Tabelle mit mehreren Datensätzen feldweise füllen?

Ich habe bisher folgenden Code:

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:
23:
24:
25:
while not eof(tc) do    // tc ist eine csv-Textdatei
    begin
      readln(tc, recStr);                            // 1. Lies den String ein
      rcol := 0;
      repeat
        PosKomma := Pos(',', recStr);                // 2. Finde das (jeweils) erste Komma
        if PosKomma > 0 then
          sField := Copy(recStr, 1, PosKomma - 1)    // 3.a  Kopiere den Teilstring bis zum Komma nach sField
        else
          sField := recStr;                          // 3.b  das ist der letzte Teilstring
        
        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;            // 4.  ordne ein, z.B. in ein Stringgrid
        if TbSynctab.Fields[rcol].Datatype = ftDate then
          TbSynctab.Fields[rcol].AsDateTime := strtodate(sField);
        
        if PosKomma > 0 then
        begin                                        // 5. Lösche bis zum Komma incl.
          Delete(recStr, 1, PosKomma);
          rCol := rCol + 1;                          //    next column
        end;
      until PosKomma = 0;                            // 6. bis zum Ende des String
    end;


Wie kann ich den ersten Datensatz füllen, bzw. in der dbf-Tabelle "weiterschalten"?
Vielen Dank, Detlef

_________________
ut vires desint, tamen est laudanda voluntas
Narses
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Administrator
Beiträge: 10183
Erhaltene Danke: 1256

W10ent
TP3 .. D7pro .. D10.2CE
BeitragVerfasst: Sa 18.02.12 23:18 
Moin!

BDE? Ist schon länger her... :gruebel: Das ging so ähnlich:
ausblenden 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

_________________
There are 10 types of people - those who understand binary and those who don´t.

Für diesen Beitrag haben gedankt: D. Annies
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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

_________________
ut vires desint, tamen est laudanda voluntas
jasocul
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 6395
Erhaltene Danke: 149

Windows 7 + Windows 10
Sydney Prof + CE
BeitragVerfasst: 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:

Für diesen Beitrag haben gedankt: D. Annies, Narses
D. Annies Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 1843

windows 7
D6 Enterprise, D7 Pers und TD 2006
BeitragVerfasst: 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

_________________
ut vires desint, tamen est laudanda voluntas