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

请问如何在dbgrid中抄出多条记录另存?

答題得分者是:Fishman
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#1 引用回覆 回覆 發表時間:2004-02-20 10:39:53 IP:218.18.xxx.xxx 未訂閱
我用的数据库是sqlserver2000,我现在dbgrid中过滤出10条记录,我想把清空其中一栏(非主键栏),然后把这10条记录另存(原来的记录还在)可以吗?
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2004-02-20 11:42:04 IP:210.65.xxx.xxx 未訂閱
Hi:    有兩種方法 1.直接以 SQL Command 進行資料新增,語法如下
INSERT INTO TABLE
      (FIELD1,
       FIELD2,
       FIELD3,
       FIELD4,
       FIELD5,
       FIELD6,
       ...)
SELECT  FIELD1,
        FIELD2,
        FIELD3,
        FIELD4,
        FIELD5,
        FIELD6
        ...
FROM    TABLE2
WHERE   XXX
2.在 delphi 中,用迴圈控制對另一 TTable 或 TQuery 進行資料新增,以避免 DBGrid 迴圈控制出問題
procedure TForm1.Button4Click(Sender: TObject);
begin
    DBGrid1.DataSource.DataSet.First;
    WHILE DBGrid1.DataSource.DataSet.Eof DO
        BEGIN
            Table1.Append;
            Table1.FieldByName('Field1').Value := DBGrid1.DataSource.DataSet.FieldByName('Field1').Value;
            Table1.FieldByName('Field2').Value := DBGrid1.DataSource.DataSet.FieldByName('Field2').Value;
            Table1.FieldByName('Field3').Value := DBGrid1.DataSource.DataSet.FieldByName('Field3').Value;
            Table1.FieldByName('Field4').Value := DBGrid1.DataSource.DataSet.FieldByName('Field4').Value;
            Table1.FieldByName('Field5').Value := DBGrid1.DataSource.DataSet.FieldByName('Field5').Value;
            Table1.FieldByName('Field6').Value := DBGrid1.DataSource.DataSet.FieldByName('Field6').Value;
            ....                Table1.Post;
            DBGrid1.DataSource.DataSet.Next;
        END;
end;
---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#3 引用回覆 回覆 發表時間:2004-02-20 12:10:57 IP:61.141.xxx.xxx 未訂閱
引言: 我用的数据库是sqlserver2000,我现在dbgrid中过滤出10条记录,我想把清空其中一栏(非主键栏),然后把这10条记录另存(原来的记录还在)可以吗?
如果你的DBGIRD直接连接到ADODATASET这样的直接打开数据库的DATASET上,你在DBGRID里清空,会直接将修改保存回数据库,也就是说,原来的记录被改了。 如果你想不改变原来的记录,你可以考虑使用TClientDataSet,可以把一个CLIENTDATASET里的记录(DATA)拷贝出来给另一个CLIENTDATASET,然后在那个备份的CLIENTDATASET里修改记录。这样不会改变数据库里原来的记录
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#4 引用回覆 回覆 發表時間:2004-02-20 15:44:08 IP:218.18.xxx.xxx 未訂閱
fishman: 你好,我照你的第2种方法做了,如果我不用循环,可以增加一条记录,但如果我用循环,一条记录也增加不进去了,请问什么原因,我的程序如下" DBGrid1.DataSource.DataSet.First; WHILE DBGrid1.DataSource.DataSet.Eof DO BEGIN qry_purpo.Append; qry_purpo['clientfactory'] := DBGrid1.DataSource.DataSet.FieldByName('clientfactory').Value; qry_purpo.FieldByName('datetime').Value := DBGrid1.DataSource.DataSet.FieldByName('datetime').Value '1'; qry_purpo.Post; DBGrid1.DataSource.DataSet.Next; END;
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#5 引用回覆 回覆 發表時間:2004-02-20 16:07:24 IP:210.65.xxx.xxx 未訂閱
Hi:    請確認 DBGrid1.DataSource.DataSet 不是 qry_purpo,也就是說,必須用另一個 TQuery 或 TTable 來執行新增動作,而原先之 Dataset 必須用來做迴圈控制     ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#6 引用回覆 回覆 發表時間:2004-02-20 16:29:55 IP:218.18.xxx.xxx 未訂閱
fishman:你好,我是用的另外一个query控件做循环的,但只能增加一条记录,不知道怎么回事,还请指教
terrychen
尊榮會員


發表:90
回覆:794
積分:501
註冊:2003-05-01

發送簡訊給我
#7 引用回覆 回覆 發表時間:2004-02-20 16:39:46 IP:211.22.xxx.xxx 未訂閱
您好: 下段點去偵錯阿,檢查進入回圈後,DBGrid1.DataSource.DataSet.recordcount有幾筆,或是有無DBGrid1.DataSource.DataSet.next,看看到底是錯在哪裡? ~~應無所住而生其心~~
Fishman
尊榮會員


發表:120
回覆:1949
積分:2163
註冊:2006-10-28

發送簡訊給我
#8 引用回覆 回覆 發表時間:2004-02-20 16:50:33 IP:210.65.xxx.xxx 未訂閱
Hi:    Sorry,好像漏了一個 NOT
    DBGrid1.DataSource.DataSet.First;
    WHILE NOT DBGrid1.DataSource.DataSet.Eof DO
        BEGIN
            qry_purpo.Append;
            qry_purpo['clientfactory'] := DBGrid1.DataSource.DataSet.FieldByName('clientfactory').Value;
            qry_purpo.FieldByName('datetime').Value := DBGrid1.DataSource.DataSet.FieldByName('datetime').Value   '1';
            qry_purpo.Post;
            DBGrid1.DataSource.DataSet.Next;
        END;
terrychen,加油,繼『五星上將』後,即將成為『百戰天龍』,先恭喜你啦 ---------------------------------- 小弟才疏學淺,若有謬誤尚請不吝指教 ----------------------------------
------
Fishman
jtp
初階會員


發表:39
回覆:81
積分:29
註冊:2003-04-20

發送簡訊給我
#9 引用回覆 回覆 發表時間:2004-02-20 17:05:00 IP:218.18.xxx.xxx 未訂閱
我改成这样就行了,用后面fishman的也行,谢谢各位了 DBGrid1.DataSource.DataSet.first; for j:=0 to dbgrid1.DataSource.DataSet.RecordCount-1 do
系統時間:2024-06-29 16:50:10
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!