AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

TClientDataSet füllen

Ein Thema von DelTurbo · begonnen am 10. Mai 2024 · letzter Beitrag vom 11. Mai 2024
Antwort Antwort
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#1

AW: TClientDataSet füllen

  Alt 11. Mai 2024, 09:33
CSVDataSet.FieldByName(Fieldnames.Strings[i]).AsString := CSVFile.FieldByName[Fieldnames.Strings[i]];
Hi,
da kommt ein String zurück. Der kann nichts anderes.

@jbg,
ich dachte er erweitert den String automatisch... AHH da wars wieder... ich dachte.

Aber eine andere Frage, gibt es nicht einen Feldtyp der "mitwächst"? Also der so viel Platz belegt wie der String lang ist. Wenn nicht müsste ich wohl einmal die CSV durchlesen und schauen was Integer oder Boolean und mir den längsten String merken.

Aber noch eine frage zum Abschluss, wenn ich nun eine komplette CSV geladen habe und muss ein Feld/Spalte anfügen, kann CDS das?

Danke
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
jbg

Registriert seit: 12. Jun 2002
3.485 Beiträge
 
Delphi 10.1 Berlin Professional
 
#2

AW: TClientDataSet füllen

  Alt 11. Mai 2024, 13:40
Aber eine andere Frage, gibt es nicht einen Feldtyp der "mitwächst"?
Ein Blob-Feld könnte dies, aber das wäre dann wohl der völlig falsche Datentyp. Ansonsten nein, so einen Datentyp gibt es beim CDS nicht.

Aber noch eine frage zum Abschluss, wenn ich nun eine komplette CSV geladen habe und muss ein Feld/Spalte anfügen, kann CDS das?
Auch das geht nicht. Wenn das CreateDataSet gelaufen ist, kann man keine weiteren Felder hinzufügen. Die müssen vorher schon angelegt worden sein. Man muss sie nicht initial befüllen.

Deswegen denke ich, dass ein ClientDataSet für deinen Zweck ungeeignet ist und, wenn auch mehr Tipparbeit, eine Lösung ohne DataSet die bessere ist.

Geändert von jbg (11. Mai 2024 um 13:53 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Uwe Raabe
Uwe Raabe

Registriert seit: 20. Jan 2006
Ort: Lübbecke
11.629 Beiträge
 
Delphi 12 Athens
 
#3

AW: TClientDataSet füllen

  Alt 11. Mai 2024, 13:59
Kannst du nicht die einzelnen CSV-Dateien einmal alle durchlaufen um die Felder anzulegen und dann nochmal separat für den Import?
Delphi-Quellcode:
    CSVDataSet:=TClientDataSet.Create(nil);
    CSVDataSet.Active:=False;
    CSVDataSet.FieldDefs.Clear;
    for <all CSV files> do begin
      <load FieldNames>
      for i:=0 to FieldNames.Count-1 do begin
        if CSVDataSet.FieldDefs.IndexOf(FieldNames.Strings[i]) < 0 then
          CSVDataSet.FieldDefs.Add(FieldNames.Strings[i],ftWideString,255,False);
      end;
    end;
    CSVDataSet.CreateDataSet;
    CSVDataSet.Active:=True;
Uwe Raabe
Certified Delphi Master Developer
Embarcadero MVP
Blog: The Art of Delphi Programming
  Mit Zitat antworten Zitat
DelTurbo

Registriert seit: 12. Dez 2009
Ort: Eifel
1.245 Beiträge
 
Delphi 2007 Architect
 
#4

AW: TClientDataSet füllen

  Alt 11. Mai 2024, 14:03
Hallo Uwe,
ich habe es mal Laufen lassen. Leider ist das mit CDS soooo langsam das es keinen spass macht. Ich bin gerade dabei, so wie jbg schrieb, das selber zu machen. Ich habe Dynamische Arrays wo ich alles in TStringList laufen lasse. Das ist viel viel schneller.

Trotzdem danke
Alle meine Rechtschreibfehler sind Urheberrechtlich geschützt!!
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:35 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz