AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Algorithmen, Datenstrukturen und Klassendesign Delphi Dataset GetFieldNames setzt Stringlist Delimiter zurück
Thema durchsuchen
Ansicht
Themen-Optionen

Dataset GetFieldNames setzt Stringlist Delimiter zurück

Ein Thema von Blackpit · begonnen am 24. Sep 2019 · letzter Beitrag vom 25. Sep 2019
Antwort Antwort
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#1

Dataset GetFieldNames setzt Stringlist Delimiter zurück

  Alt 24. Sep 2019, 15:10
Hallo,
ist jemand dieser Fehler in Seattle bekannt?
Bei einem an Uwe's "Poor Man’s CSV Export" angelehnten Code wird mir der gesetzte Delimiter nach Aufruf von GetFieldNames default gesetzt.
wwClientDataSet1 ist ein TwwClientDataSet.
Delphi-Quellcode:
  writer := TStreamWriter.Create('DataSet.csv');
    try
      lst := TStringList.Create();
      try
        lst.QuoteChar := '"';
        lst.Delimiter := ';';
        lst.StrictDelimiter := true;
        wasActive := wwClientDataSet1.Active;
        try
          wwClientDataSet1.Active := true;
          wwClientDataSet1.GetFieldNames(lst); // <-- hier wird lst.Delimiter default
          writer.WriteLine(lst.DelimitedText);
          wwClientDataSet1.First;
Kennt das jemand?
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: Dataset GetFieldNames setzt Stringlist Delimiter zurück

  Alt 24. Sep 2019, 15:16
Hallo,
wird wohl ein Bug der Komponente sein.
Musst also deinen Delimiter retten und nach GetField neu setzen.
Heiko
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#3

AW: Dataset GetFieldNames setzt Stringlist Delimiter zurück

  Alt 24. Sep 2019, 15:44
...
Musst also deinen Delimiter retten und nach GetField neu setzen.
Wenn's so einfach wäre, zurückgesetzt wird vor der Rückgabe, damit hat die Headerzeile auch schon den default Delimiter.
Und ich müsste die dann explizit ersetzen.
  Mit Zitat antworten Zitat
hoika

Registriert seit: 5. Jul 2006
Ort: Magdeburg
8.270 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Dataset GetFieldNames setzt Stringlist Delimiter zurück

  Alt 24. Sep 2019, 16:03
Hallo,
ich kenne die Komponente nicht.
Laut Google gibt es TwwClientDataSet nicht ...
Ist denn der Quellcode vorhanden?

Oder setz doch gleich den Default-Delimiter auf den Wert, den Du haben willst.
Oder ich verstehe das Problem nicht ...
Heiko

Geändert von hoika (24. Sep 2019 um 16:06 Uhr)
  Mit Zitat antworten Zitat
Frickler

Registriert seit: 6. Mär 2007
Ort: Osnabrück
563 Beiträge
 
Delphi XE6 Enterprise
 
#5

AW: Dataset GetFieldNames setzt Stringlist Delimiter zurück

  Alt 24. Sep 2019, 16:16
Oder setz doch gleich den Default-Delimiter auf den Wert, den Du haben willst.
Oder ich verstehe das Problem nicht ...
Ich verstehe das so, dass er den Default-Delimiter setzt, und seine Komponente (ist übrigens aus dem InfoPower-Paket) setzt direkt vor dem Export den Delimiter auf einen anderen Wert. Eventuell mit nem Class Helper oder einer Interposer Class (type TwwClientDataSet = class(wwclient.TwwClientDataSet) ... ) nachhelfen...
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#6

AW: Dataset GetFieldNames setzt Stringlist Delimiter zurück

  Alt 24. Sep 2019, 16:32
So ist es, Komponente aus dem Info-PowerPaket.
Hhm, wenn ich die verwenden will komm ich scheinbar um einen Classhelper nicht rum.

Wie läuft das mit einer " Interposer Class "? Kenn ich noch nicht, würde mich interessieren.

Zitat:
An interposer class is a class with the same name of the class it wants to change (using inheritance). By adding its unit after the unit of its base class in a uses statement, a unit will use the modified version of the class rather than the original. Interposer classes are not a terribly neat technique, rather a hack.
Sollte ich nicht lieber einen Classhelper schreiben, wobei ich es bei Delphi nicht unbedingt als Hack sehe

Geändert von Blackpit (24. Sep 2019 um 16:36 Uhr)
  Mit Zitat antworten Zitat
Blackpit

Registriert seit: 27. Feb 2019
77 Beiträge
 
#7

AW: Dataset GetFieldNames setzt Stringlist Delimiter zurück

  Alt 25. Sep 2019, 15:54
Hallo,
die pragmatischte lösung war, Delimter und QuotedChar vor dem Schreiben nachzusetzten.
Delphi-Quellcode:
...
  writer := TStreamWriter.Create('DataSet.csv', False, TEncoding.UTF8);
    try
      lst := TStringList.Create();
      try
        lst.QuoteChar := '"';
        lst.Delimiter := ';';
        lst.StrictDelimiter := true;
        wasActive := wwClientDataSet1.Active;
        try
          wwClientDataSet1.Active := true;
          wwClientDataSet1.GetFieldNames(lst); // <-- hier wird lst.Delimiter default
          lst.QuoteChar := '"'; //neu setzen
          lst.Delimiter := ';';
          writer.WriteLine(lst.DelimitedText);
          wwClientDataSet1.First;
...
Gruß

BP
  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 14:18 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz