![]() |
Datenbank: belliebige • Zugriff über: ODBC
DBGrid -> CSV
Moin Moin,
ich stehe malwieder total auf den schlauch kann mir einer mal kurz sagen wie ich eine text datei erstelle und die beschreib ich habe es mit FileWrite probiert nur schon beim Fileopen habe ich immer -1 und die Datei wird nicht erstellt ich will aus einer Query bzw DBGrid eine CSV datei erstellen nun habe ich schon eine Funktion dafür erstellt
Delphi-Quellcode:
und selbs das läuft noch nicht
i := 1;
zeile := mQuery.Fields[0].asString; mQuery.First; while not mQuery.Eof do begin Zeile := zeile + '; ' + mQuery.Fields[i].asString; mQuery.Next; inc(i); end; wie würdet ihr das machen? sollte einfach nur eine super einfache lösung sein |
Re: DBGrid -> CSV
Delphi-Quellcode:
?
Nicht eher so:
mQuery.First; while not mQuery.Eof do begin begin zeile := ''; for i := 0 to mQuery.Fields.Count -1 do begin Zeile := zeile + '; ' + mQuery.Fields[i].asString; end; mQuery.Next; ...//Ausgabe Zeile end; |
Re: DBGrid -> CSV
sieht super aus
nun such ich noch ein kleines beispiel wie ich txt datein erstelle und und fülle |
Re: DBGrid -> CSV
Z.B.
Code vor dem obigen Block:
Delphi-Quellcode:
In der Schleife (Ausgabe):
var
sl: TStrings; ... begin try sl := TStringList.Create; ... Zitat:
Delphi-Quellcode:
sl.SaveToFile( <Dateiname>);
finally sl.Free; end; |
Re: DBGrid -> CSV
hmm
nun weiss ich wo das problem ist und zwar
Delphi-Quellcode:
die Komponente die ich einsetze kennt halt .Fields nicht
Zeile := zeile + '; ' + mQuery.Fields[i].asString;
setze zur zeit die mODBC ein :( ich weiss die tQuery kanns auch gibs sonst eine alternative für mQuery.Fields[i] ? |
Re: DBGrid -> CSV
hmm
wollte nun eine neue version von der mODBC installieren naja und genau an der stelle harkt es er erwartet immer hinter den Fields immer [] statt . hmmm ist zum mäusemelken |
Re: DBGrid -> CSV
Entschuldige aber mODBC kennt FIELDS!
Meinen wir das gleiche? Zitat:
klar
Delphi-Quellcode:
Du mußt ja das Feld aussuchen um das es geht.
Fields[i].Fieldname
Fields[i].asstring Gruß K-H |
Re: DBGrid -> CSV
|
Re: DBGrid -> CSV
verdammt
quark ich bin dumm das ist garnicht das problem und zwar das problem ist leider in einer anderen zeile
Delphi-Quellcode:
naja da muss ich wissen wieviele spalten es gibt :(
mQuery.Fields.Count -1
hmm dumm |
Re: DBGrid -> CSV
Ich hab Dir was herauskopiert, ist zwar Futter für ein Stringgrid aber das Prinzip ist das gleiche:
Delphi-Quellcode:
Gruß
var
tl : tStringlist; .... tl:=tStringlist.Create; .... if not DM_1.mQuery1.eof then begin for i:=0 to DM_1.mQuery1.fieldcount-1 do dummy:=dummy+DM_1.mQuery1.fields[i].fieldname+#9; delete(dummy,length(dummy),1); {trailing TAB to delete} tl.add(dummy); repeat dummy:=''; for i:=0 to DM_1.mQuery1.fieldcount-1 do dummy:=dummy+DM_1.mQuery1.fields[i].asstring+#9; delete(dummy,length(dummy),1); {trailing TAB to delete} tl.add(dummy); DM_1.mQuery1.next; until DM_1.mQuery1.eof; end K-H |
Re: DBGrid -> CSV
Das sollte eigentlich das machen was du wünschst:
Delphi-Quellcode:
procedure DataSetExportToCSV( const DataSet : TDataSet; const FileName : string; const Header : boolean = False; const Delim : string = ';'; const Quote : string = '"' );
var bm : TBytes; idx : integer; row, val : string; csv : Text; begin if DataSet.Active then begin bm := DataSet.GetBookmark; DataSet.DisableControls; AssignFile( csv, FileName ); try AssignFile( csv, FileName ); ReWrite( csv ); try if Header then begin row := ''; for idx := 0 to DataSet.FieldCount - 1 do begin val := DataSet.Fields.Fields[ idx ].FieldName; val := Quote + StringReplace( val, Quote, Quote+Quote, [ rfReplaceAll ] ) + Quote; if idx > 0 then row := row + Delim; row := row + val; end; WriteLn( csv, row ); end; DataSet.First; while not DataSet.Eof do begin row := ''; for idx := 0 to DataSet.FieldCount - 1 do begin val := DataSet.Fields.Fields[ idx ].AsString; if Pos( Delim, val ) + Pos( Quote, val ) > 0 then val := Quote + StringReplace( val, Quote, Quote+Quote, [ rfReplaceAll ] ) + Quote; if idx > 0 then row := row + Delim; row := row + val; end; WriteLn( csv, row ); DataSet.Next; end; finally CloseFile( csv ); end; finally DataSet.EnableControls; end; if DataSet.BookmarkValid( bm ) then DataSet.GotoBookmark( bm ); end; end; |
Re: DBGrid -> CSV
Liste der Anhänge anzeigen (Anzahl: 1)
hmm ok
fieldcount ok hmm nun bin ich beim fehler den ich auch nicht kenne |
Re: DBGrid -> CSV
Wenn du 5 Felder hast, dann liefert FieldCount 5 zurück
Wenn du aber mit for idx := 0 to FieldCount dann fragst du 0, 1, 2, 3, 4, 5 => 6 Felder ab! ergo: for idx := 0 to FieldCount -1 |
Re: DBGrid -> CSV
aber hab ich doch
da steht eine -1 und der fehler ist immer noch da ich glaub ich brauch ein größeres brett für meinen kopf |
Re: DBGrid -> CSV
Zitat:
Bretter gibt es bei Obi ;o) Grüße Klaus |
Re: DBGrid -> CSV
In deinem Screenshot sieht man nur etwas anderes ...
besser du zeigst uns den aktuellen Code, oder benutzt die Code-Beispiele, die wir dir gegeben haben. |
Re: DBGrid -> CSV
richtig
aber ich habe beides probiert mal eine andere frage wie bekomme ich die feldnamen eigentlich raus? |
Re: DBGrid -> CSV
Augen auf ... zu #11 gehen ... lesen
|
Re: DBGrid -> CSV
sorry
ich habs grad gesehen ich strukturier erstmal alles weil ich tapse hier nur in dunkeln aber es geht nun alles danke das ihr es ausgehalten habt |
Re: DBGrid -> CSV
war so gerade noch auszuhalten :mrgreen:
|
AW: DBGrid -> CSV
Hallo Sir Rufo,
habe Deinen Beitrag zum o.g. Problem gefunden und würde diese Routine gerne benutzen. Nun habe ich Probleme mit der Übergabe der Variablen für diese Procedure. Ich rufe die Prcedure aus: procedure TFrameArtikel.ButtonCsvExportClick(Sender: TObject); var FileName : string; begin FileName := 'C:\temp\Artikel.csv'; procedure DataSetExportToCSV( const DatamoduleArtikel.DataModule1.IBDataSetArtikel : TIBDataSet; const FileName : string; const Header : boolean = False; const Delim : string = ';'; const Quote : string = '"' ); end; procedure DataSetExportToCSV( const DataSet : TDataSet; const FileName : string; const Header : boolean = False; const Delim : string = ';'; const Quote : string = '"' ); begin (wie Dein Vorschlag) end; Jetzt kommt der Fehler beim Compilieren: Anweisung erwartet, aber Procedure gefunden. Könntest Du mir helfen? Habe sowieso Probleme mit den Procedure-Übergaben. Muß noch Menge Üben. Danke, Luckner |
AW: DBGrid -> CSV
Hallo,
bin zwar nicht Sir Rufo, aber das Benutzen der [delphi ][/delphi ]-Tags würde deinen Code schon übersichtlicher machen. Dann sieht man auch, das du in der Prozedur ButtonCsvExportClick die andere Prozedur nicht aufrufst, sondern stattdessen ihre definition dahin kopiert hast. Also:
Delphi-Quellcode:
procedure TFrameArtikel.ButtonCsvExportClick(Sender: TObject);
var FileName : string; begin FileName := 'C:\temp\Artikel.csv'; DataSetExportToCSV(DatamoduleArtikel.DataModule1.IBDataSetArtikel,FileName,False,';','"'); end; |
AW: DBGrid -> CSV
Hallo Jumpy,
danke für den Hinweis. Ich glaube, jetzt ist eine Pause fällig. Vor lauter Bäumen sehe ich den Wald nicht mehr. Ich hätte noch 2 Stunden darauf starren können und nichts gefunden. Danke! |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:16 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