線上訂房服務-台灣趴趴狗聯合訂房中心
發文 回覆 瀏覽次數:1798
推到 Plurk!
推到 Facebook!

Save疑問

答題得分者是:小傑克
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#1 引用回覆 回覆 發表時間:2009-10-16 17:12:26 IP:122.116.xxx.xxx 訂閱
小弟在一各DBGrid上面放置許多Button功能
分別會撈出不同數量的欄位
但是在Save這邊由於小弟只知道寫死的方式如下面
只能針對一種Button去寫Save

想請教如何寫自動去抓DBGrid上 有多少欄位就自動抓到數量以及欄位名稱

PS.我本來有用貴站的很好用的 GridExport 但是轉出來我的序號裡面 0開頭的序號 都會被自動減去 造成資料不正確
才會改成這樣Save

以下是小弟寫死的SourceCode


[code delphi]
var
F: TextFile;
S: string;
begin
if not csTemp2.Active then
exit;
savedialog1.InitialDir := ('C:\');
savedialog1.filter := '*.csv';
savedialog1.DefaultExt := 'csv';
if savedialog1.Execute then
begin
AssignFile(F, savedialog1.FileName);
Rewrite(F);
s := csTemp2.Fieldbyname('工單號碼').DisplayLabel ','
csTemp2.Fieldbyname('序號').DisplayLabel ','
csTemp2.Fieldbyname('機種名稱').DisplayLabel ','
csTemp2.Fieldbyname('送修時間').DisplayLabel ','
csTemp2.Fieldbyname('不良代碼').DisplayLabel ','
csTemp2.Fieldbyname('不良狀況').DisplayLabel ','
csTemp2.Fieldbyname('維修時間').DisplayLabel ','
csTemp2.Fieldbyname('維修狀況代碼').DisplayLabel ','
csTemp2.Fieldbyname('維修狀況原因').DisplayLabel ','
csTemp2.Fieldbyname('維修天數(含假日)').DisplayLabel ','
csTemp2.Fieldbyname('實際天數').DisplayLabel ','
csTemp2.Fieldbyname('不良零件位置').DisplayLabel ','
csTemp2.Fieldbyname('不良主因').DisplayLabel ','
csTemp2.Fieldbyname('不良物料').DisplayLabel ','
csTemp2.Fieldbyname('不良零件名稱').DisplayLabel ','
csTemp2.Fieldbyname('維修內容').DisplayLabel ','
csTemp2.Fieldbyname('維修人員').DisplayLabel;
Writeln(F, S);
csTemp2.first;
while not csTemp2.Eof do
begin
s := csTemp2.Fieldbyname('工單號碼').AsString ','
csTemp2.Fieldbyname('序號').AsString ','
csTemp2.Fieldbyname('機種名稱').AsString ','
csTemp2.Fieldbyname('送修時間').AsString ','
csTemp2.Fieldbyname('不良代碼').AsString ','
csTemp2.Fieldbyname('不良狀況').AsString ','
csTemp2.Fieldbyname('維修時間').AsString ','
csTemp2.Fieldbyname('維修狀況代碼').AsString ','
csTemp2.Fieldbyname('維修狀況原因').AsString ','
csTemp2.Fieldbyname('維修天數(含假日)').AsString ','
csTemp2.Fieldbyname('實際天數').AsString ','
csTemp2.Fieldbyname('不良零件位置').AsString ','
csTemp2.Fieldbyname('不良主因').AsString ','
csTemp2.Fieldbyname('不良物料').AsString ','
csTemp2.Fieldbyname('不良零件名稱').AsString ','
csTemp2.Fieldbyname('維修內容').AsString ','
csTemp2.Fieldbyname('維修人員').AsString;
writeln(F, S);
csTemp2.next;
end;
MessageDlg('匯出報表成功!!', mtCustom, [mbOK], 0);
CloseFile(F);
end;
end;
[/code]

------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#2 引用回覆 回覆 發表時間:2009-10-16 17:35:06 IP:122.116.xxx.xxx 訂閱
剛剛試著吧csv部份改成xls之後
Save之後 數據就很正常了

只是它變的不會分欄位
全部都擠在第一行 然後每各數據中間加各逗號 (也就是我程式所寫的)
因為cvs是逗號分隔 那xls呢

請問各位大大我該怎麼改寫這各分行呢?

只差這步就成功了


[code delphi]
savedialog1.InitialDir := ('C:\');
savedialog1.filter := '*.xls';
savedialog1.DefaultExt := 'xls';

[/code]

------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
編輯記錄
lovemari 重新編輯於 2009-10-16 18:05:28, 註解 無‧
lovemari
中階會員


發表:134
回覆:224
積分:76
註冊:2005-08-18

發送簡訊給我
#3 引用回覆 回覆 發表時間:2009-10-16 18:10:00 IP:122.116.xxx.xxx 訂閱
還是不行

我剛查到 xls是用 #9 來做分隔
但是分隔之後
Save 下來 開頭是0的序號依然還是會被自動省略

好像是要把格式改成文字的類型
開頭是0的才不會自動被省略

我明明是寫 AsString Save 為什麼存成Excel之後格式跑了呢
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
編輯記錄
lovemari 重新編輯於 2009-10-16 18:11:27, 註解 無‧
小傑克
資深會員


發表:5
回覆:209
積分:357
註冊:2009-02-16

發送簡訊給我
#4 引用回覆 回覆 發表時間:2009-10-16 20:21:12 IP:59.112.xxx.xxx 訂閱
分幾個方面回覆
1. dbgrid 裡有 FieldCount 可以用 ,像底下這樣可以用

for i := 0 to DBGrid1.FieldCount-1 do
begin
DBGrid1.Fields[i].DisplayName
end;

value 做法類似

2. 轉成Excel檔 前輩有許多作法,可以在ktop 中搜尋相關做法,不是單純用字串去組, 至於 csv 在TStringList 裡有實做, 可以參考著用
如果自己用 xxx , xxx , xxx , xxx 這樣字串相加, 還要另外處理資料中有包含 "," 逗號及" 分號字元的資料...比較麻煩


3. FileSave 有很多方式可以做, 希望底下簡單的sample 能提供你一些發想
procedure TForm1.Button1Click(Sender: TObject);
var sl:TStringList;
begin
sl := TStringList.Create;
sl.Add('aaaa');
sl.Add('bb,bb');
sl.Add('cc"cc');
sl.Add('dd''dd');
ShowMessage( sl.CommaText); //CSV 格式, 細節可以去看CommaText 的 source
sl.SaveToFile('C:\a.txt');
sl.Free;
end;


===================引 用 lovemari 文 章===================

還是不行

我剛查到 xls是用 #9 來做分隔
但是分隔之後
Save 下來 開頭是0的序號依然還是會被自動省略

好像是要把格式改成文字的類型
開頭是0的才不會自動被省略

我明明是寫 AsString Save 為什麼存成Excel之後格式跑了呢
------
額有朝天骨,眼中有靈光
系統時間:2024-05-17 2:03:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!