全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:2401
推到 Plurk!
推到 Facebook!

有關於SaveDialog存檔的兩各問題

答題得分者是:eaglewolf
lovemari
中階會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2007-10-29 13:54:11 IP:60.248.xxx.xxx 訂閱
有關於SaveDialog存檔的兩各問題
==== 問題一 =====
我寫一份報表中..在一各DbGrid上作了三各按鈕
兩各搜尋一各存檔
那其中兩各搜尋的時候
其中一各搜尋會把DbGrid的欄位都填滿
但是另一各搜尋後會有些欄位是null值
導致存檔的時候...有null值savedialog會出現問題
但是又不想做兩顆SaveDoalog按鈕
可以加入條件有null值自動幫我填入欄位嗎?

===== 問題二 =====
再儲存的時候..因為我是.csv存檔
有些欄位如果資料過大...開啟的時候...
資料會被分成兩半...後段跑去後面
導致欄位跟資料不合...有無方法可以修正呢或者
調整最大欄位內的字元組呢
(用MS Office or OpenOffice開都一樣)
====== 程式碼 ====
procedure TForm1.Button20Click(Sender: TObject);
var
F : TextFile;
S : String;
iROW , iCO1 : Integer;
begin
IF not csTemp6.Active Then
exit;
savedialog1.InitialDir := ('C:\');
savedialog1.filter := '*.csv';
savedialog1.DefaultExt := 'csv';
IF savedialog1.Execute then
begin
AssignFile(F,savedialog1.FileName);
Rewrite(F);
s := csTemp6.Fieldbyname ('工單').DisplayLabel ','
csTemp6.Fieldbyname ('產品序號').DisplayLabel ','
csTemp6.Fieldbyname ('產品名稱').DisplayLabel ','
csTemp6.Fieldbyname ('送修日期').DisplayLabel ','
csTemp6.Fieldbyname ('維修時間').DisplayLabel ','
csTemp6.Fieldbyname ('維修天數').DisplayLabel ','
csTemp6.Fieldbyname ('維修人員').DisplayLabel;
Writeln(F, S);
csTemp6.first;
while not csTemp6.Eof do
begin
s := csTemp6.Fieldbyname ('工單').AsString ','
csTemp6.Fieldbyname ('產品序號').AsString ','
csTemp6.Fieldbyname ('產品名稱').AsString ','
csTemp6.Fieldbyname ('送修日期').AsString ','
csTemp6.Fieldbyname ('維修時間').AsString ','
csTemp6.Fieldbyname ('維修天數').AsString ','
csTemp6.Fieldbyname ('維修人員').AsString;
writeln(F, S);
csTemp6.next;
end;
MessageDlg('Report OK!!',mtCustom, [mbOK],0);
CloseFile(F);
end;
end;

====== END ======
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
JustinShen
中階會員


發表:22
回覆:104
積分:80
註冊:2003-09-20

發送簡訊給我
#2 引用回覆 回覆 發表時間:2007-11-03 17:01:24 IP:222.188.xxx.xxx 訂閱
输出文档格式化有问题,你为什么不用xml格式呢?或者直接用excel文档也可以。
------
====================
我为一切作努力!
Justin Shen

lovemari
中階會員


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

發送簡訊給我
#3 引用回覆 回覆 發表時間:2007-11-05 08:35:12 IP:60.248.xxx.xxx 訂閱
該怎麼說呢....

公司已經停止購買MS的OFFICE

本來我有寫直接轉出EXECL

可是現在沒又 MS的OFFICE

轉不出去

只能靠存檔之後...再用OPEN OFFICE 來打開了
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
eaglewolf
資深會員


發表:4
回覆:268
積分:429
註冊:2006-07-06

發送簡訊給我
#4 引用回覆 回覆 發表時間:2007-11-05 09:21:10 IP:211.75.xxx.xxx 訂閱
問題一
先用IsNull判斷吧
s:='';
if Not ISNull(csTemp6.FieldByName('工單')) then
s := s csTemp6.Fieldbyname ('工單').DisplayLabel ',' ;
if Not ISNull(csTemp6.FieldByName('產品序號')) then
s:= s csTemp6.Fieldbyname ('產品序號').DisplayLabel ',' ;
if Not ISNull(csTemp6.FieldByName('產品名稱')) then
s:= s csTemp6.Fieldbyname ('產品名稱').DisplayLabel ',' ;
if Not ISNull(csTemp6.FieldByName('送修日期')) then
s:= s csTemp6.Fieldbyname ('送修日期').DisplayLabel ',' ;
if Not ISNull(csTemp6.FieldByName('維修時間')) then
s:= s csTemp6.Fieldbyname ('維修時間').DisplayLabel ',' ;
if Not ISNull(csTemp6.FieldByName('維修天數')) then
s:= s csTemp6.Fieldbyname ('維修天數').DisplayLabel ',' ;
if Not ISNull(csTemp6.FieldByName('維修人員')) then
s:= s csTemp6.Fieldbyname ('維修人員').DisplayLabel ',' ;
if RightStr(s,1) = ',' then
s:= LeftStr(s,Length(s-1));

問題二
我覺得應該是資料本身含有','
------
先查HELP
再查GOOGLE
最後才發問

沒人有義務替你解答問題
在標題或文章中標明很急
並不會增加網友回答速度

Developing Tool:
1.Delphi 6
2.Visual Studio 2005
3.Visual Studio 2008
DBMS:
MS-SQL
lovemari
中階會員


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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2007-11-05 14:03:58 IP:60.248.xxx.xxx 訂閱
痾 .... 那各欄位...有些資料過長是兩各欄位串接在一起的

工程師額外寫一各程式...讓我去撈的時候..會自己連結起來

所以是這各問題囉!!

然後轉成CSV...他就按照他原本的...欄位兩格 就兩格 ...


囧...我知道了
------
Program : Delphi 7
DataBase : Oracle 9i
Client : ClientDataSet
系統時間:2024-05-17 9:49:45
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!