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

如何加excel資料copy到dbgrid

答題得分者是:hagar
fivker
一般會員


發表:24
回覆:38
積分:12
註冊:2006-12-05

發送簡訊給我
#1 引用回覆 回覆 發表時間:2006-12-05 18:07:29 IP:211.21.xxx.xxx 訂閱
請問版上各位大大,如何將Excel的資料利用複製的功能,直接貼到DBgrid??
版本:DELPHI 5
資料庫:INFORMIX 9
THANKS <(_ _)>。
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
fivker
一般會員


發表:24
回覆:38
積分:12
註冊:2006-12-05

發送簡訊給我
#3 引用回覆 回覆 發表時間:2006-12-12 14:51:57 IP:211.21.xxx.xxx 訂閱

===================引 用 文 章===================
參考:
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=39658
http://delphi.ktop.com.tw/board.php?cid=31&fid=79&tid=39642
=================================================
感謝樓上hagar大大的資料,目前遇到一個問題。
範例中的TString有使用到 Delimiter 這個功能,
但是因為我使用的是Delphi 5似乎並沒有這個功能,
請問是否有其他方式可以解決TAB字元。THANKS
===========原始程式片段 作者:hagar =================
//執行貼上

procedure TForm1.PasteClipboardToDBGrid;

var

sl1, sl2: TStringList;

i, j,iCol: integer;

begin

if Clipboard.HasFormat(CF_Text) then begin

sl1 := TStringList.Create;

sl2 := TStringList.Create;

try

sl1.Text := Clipboard.AsText;

for i := 0 to sl1.Count -1 do begin

AT2.Append;

sl2.Clear;

sl2.Delimiter := #9;

sl2.DelimitedText := sl1.Strings[i];

iCol := 0;

for j := 0 to sl2.Count -1 do begin

AT2.Fields[icol].Text:= sl2.Strings[j];

Inc(iCol);

end;

AT2.Post;

end;

finally

sl2.Free;

sl1.Free;

end;

end;

AQ2.SQL.Clear;

AQ2.SQL.Add('select * from DataStock2');

AQ2.Close;

AQ2.open;

end;




hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#4 引用回覆 回覆 發表時間:2006-12-12 15:13:16 IP:59.124.xxx.xxx 未訂閱
Delphi5 的 TStrings 有 CommaText 屬性可以用
如果各欄位值沒有逗號的話
不然, 就自己寫 code 分解字串(可以利用 Pos/Copy/Delete 等字串 function)
fivker
一般會員


發表:24
回覆:38
積分:12
註冊:2006-12-05

發送簡訊給我
#5 引用回覆 回覆 發表時間:2006-12-18 17:06:36 IP:202.3.xxx.xxx 訂閱
感謝hagar大大的指導。我利用了pos跟copy的功能來取代Delimiter 的功能。
(delphi新手,有的地方改的不好,應該有更好的寫法,因為我貼超過1000筆的資料就會跑的有點久了 XD)
程式如下:
procedure TForm1.PasteClipboardToDBGrid;
var
sl1, sl2: TStringList;
i, j,iCol,x: integer;
ss1:string;
m, iPos: integer;
sTmp: string;
begin
if Clipboard.HasFormat(CF_Text) then
begin
sl1 := TStringList.Create;
sl2 := TStringList.Create;
AT2.Active:=TRUE;
try
sl1.Text := Clipboard.AsText;
for i := 0 to sl1.Count -1 do
begin
iCol := 0;
AQ2.Close;
AT2.Append;
sl2.Clear;
sl2.text:= sl1.Strings[i];
//計算tab個數,#9表示tab鍵
sTmp := sl2.Text;
iPos := Pos(#9,sTmp);
m := 0;
while iPos <> 0 do
begin
Inc(m);
Delete(sTmp, iPos, Length(#9));
iPos := Pos(#9, sTmp);
end;
for j:=0 to m do
begin
X:=pos(#9,sl2.text);
if X<>0 then
begin
ss1 := Copy(sl2.text, 1, x-1);
sl2.text := COPY(sl2.text,x 1,LENGTH(sl2.text)-x);
end
else
ss1 := sl2.text;
If (Pos(#9,ss1)<0) then
begin
break;
end
else
begin
AT2.Fields[icol].Text:= ss1;
Inc(iCol);
end;
end;
end;
AT2.Post;
finally
sl2.Free;
sl1.Free;
end;
end;
AQ2.SQL.Clear;
AQ2.SQL.Add('select * from DataStock2');
AQ2.Close;
AQ2.open;
end;
另外,不曉得有沒有人跟我一樣,使用DELPHI 5,開啟hagar大哥的程式時,
有些表單的CAPTION 會變成怪怪的字。使得程式無法使用。
EX:BUTTON1.CAPTION 變成 #1928520 之類的。
需要先開啟 .DFM檔,將其中的字碼改回成中文,就可以使用了。
(試了好久才找出不能開啟的原因 ^^|||||)
fivker
一般會員


發表:24
回覆:38
積分:12
註冊:2006-12-05

發送簡訊給我
#6 引用回覆 回覆 發表時間:2006-12-18 17:33:05 IP:211.21.xxx.xxx 訂閱
不好意思,想請教另一個問題。
因為利用 TStringList 承接資料,會讓原本是數字的資料,亦會被當成文字insert到資料庫中。
請問是否有方法,可以令copy的資料型態,insert到資料庫時,仍維持原本的資料型態。
(EX:文字->文字,數字->數字)
thanks~~

hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#7 引用回覆 回覆 發表時間:2006-12-19 08:29:38 IP:59.124.xxx.xxx 未訂閱
1.那個不是我的程式, 是 shelin 的 :)
2.那個程式是用 Delphi 7 寫的吧, 所以 Caption 的部份會用 unicode 型態, 所以會看到 #12570 之類的字樣
3.把字串 insert 到數字型態的欄位不是一樣會是數字型態, 如果字串的內容都是可以轉成數字型態的話
fivker
一般會員


發表:24
回覆:38
積分:12
註冊:2006-12-05

發送簡訊給我
#8 引用回覆 回覆 發表時間:2007-03-13 17:14:26 IP:202.3.xxx.xxx 訂閱

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

1.那個不是我的程式, 是 shelin 的 :)
2.那個程式是用 Delphi 7 寫的吧, 所以 Caption 的部份會用 unicode 型態, 所以會看到 #12570 之類的字樣
3.把字串 insert 到數字型態的欄位不是一樣會是數字型態, 如果字串的內容都是可以轉成數字型態的話




先向shelin大說聲抱歉,真是不好意思。一時不察。

我之後測試幾次,但是嘗試寫入數字欄位還是會出錯。所以後來改用別的方法。: )

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