Save疑問 |
答題得分者是:小傑克
|
lovemari
中階會員 發表:134 回覆:224 積分:76 註冊:2005-08-18 發送簡訊給我 |
小弟在一各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 發送簡訊給我 |
剛剛試著吧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 發送簡訊給我 |
|
小傑克
資深會員 發表:5 回覆:209 積分:357 註冊:2009-02-16 發送簡訊給我 |
分幾個方面回覆
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之後格式跑了呢
------
額有朝天骨,眼中有靈光 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |