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

想做一個資料a傳入到資料b裡??

尚未結案
paa
初階會員


發表:50
回覆:101
積分:30
註冊:2005-02-01

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-07-19 16:28:32 IP:210.70.xxx.xxx 未訂閱
希望用for回圈把資料表a裡的全部都複製到資料表b裡 var a1,a2,a3,s:string; my: array [0..2] of string; row,j,i:integer; begin row:=adoquery1.FieldCount; //欄位 j:=adoquery1.RecordCount; //筆數 ADOQuery1.First; for i:=0 to j-1 do begin a1:=adoquery1.FieldByName('department').AsString; a2:=adoquery1.FieldByName('code').AsString; a3:=adoquery1.FieldByName('name').AsString; adoquery1.Next; my[0]:=a1; my[1]:=a2; my[2]:=a3; for w:=0 to row-1 do begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('INSERT INTO test([department],[code],[name]) values'); adoquery1.ExecSQL; // edi[i][w].Text:=my[w]; end; end; end;
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-07-19 17:08:52 IP:218.15.xxx.xxx 未訂閱
paa您好: 把資料表a裡的全部都複製到資料表b裡? 不用for回圈都行,有更直接更快捷的方法,有For如您下面做法,有点画蛇添足! 因不知您的资料库类型是什么的? 如是Access,可参考:http://delphi.ktop.com.tw/topic.php?topic_id=74130  
 假如有个Table1.mdb里面有两个表结构相同的数据表Table1、Table2;其中Table1有资料,Table2为空,想将Table1的某个栏位复制至Table2相应的栏位中。是这个意思吗,没理解错的话请参考:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\table\table1.mdb;Persist Security Info=False';
  ADOQuery1.SQL.Add('insert into table2 select Field1 from table1 in "F:\table\table1.mdb"'); //其中Field1为复制的字段
  ADOQuery1.ExecSQL;
end;    如果是对应于两个不同的Access数据库db1.mdb,Table1.mdb,想将Table1.mdb中的Table1表的某个字段复制至db1.mdb中的Table1相应字段中,略微修改即可,如下:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOQuery1.ConnectionString:='Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:\table\db1.mdb;Persist Security Info=False';
  ADOQuery1.SQL.Add('insert into table1 select Field1 from table1 in "F:\table\table1.mdb"');//其中Field1为复制的字段
  ADOQuery1.ExecSQL;
end;
如是MS SQL的话,可参考: http://delphi.ktop.com.tw/topic.php?topic_id=72579 方法都好过您上面所PS的做法。 或直接写也行:
  ADOQuery1.Open;
  ADOQuery1.First;
  ADOQuery2.Close;
  adoquery2.SQL.Clear;
  adoquery2.SQL.Add('select * from b');
  adoquery2.open;
  while not ADOQuery1.Eof do
    Begin
      adoquery2.Edit;
      adoquery2.Append;
      adoquery2.FieldByName('department').AsString:=adoquery1.FieldByName('code').AsString;
      adoquery2.FieldByName('name').AsString:=adoquery1.FieldByName('department').AsString;
      adoquery2.FieldByName('code').AsString:=adoquery1.FieldByName('name').AsString; 
      adoquery2.Post;      
    end;
 
大概写了没试过,主要还是采用上面提供的方法为主,供您参考 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ 發表人 -
paa
初階會員


發表:50
回覆:101
積分:30
註冊:2005-02-01

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-07-19 17:32:21 IP:210.70.xxx.xxx 未訂閱
你好: 不好意思,我是用access的,因為我主要的目的是想要把資料表a裡的粢料全加密,傳到資料表b裡,所以才想說用for,不好意思,問題沒說清楚? var a1,a2,a3,s:string; tmp_buf1,tmp_buf2,tmp_buf3 : String; my: array [0..2] of string; row,j,i,w:integer; begin row:=adoquery1.FieldCount; //欄位 j:=adoquery1.RecordCount; //筆數 ADOQuery1.First; for i:=0 to j-1 do begin EnCryptStr(ADOQuery1['department'],tmp_buf1,'123'); EnCryptStr(ADOQuery1['code'],tmp_buf2,'123'); EnCryptStr(ADOQuery1['name'],tmp_buf3,'123'); a1:=tmp_buf1; a2:=tmp_buf2; a3:=tmp_buf3; //adoquery1.Next; //my[0]:=a1; //my[1]:=a2; // my[2]:=a3; // for w:=0 to row-1 do begin adoquery1.Close; adoquery1.SQL.Clear; adoquery1.SQL.Add('INSERT INTO test([department],[code],[name]) values (a1,a2,a3)'); adoquery1.ExecSQL; // edi[i][w].Text:=my[w]; // end; end; end;
deity
尊榮會員


發表:90
回覆:876
積分:678
註冊:2003-05-09

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-07-19 18:02:37 IP:218.15.xxx.xxx 未訂閱
那您有无试试我上在写的代码呢,略作应该就可以 
 
var
  tmp_buf1,tmp_buf2,tmp_buf3 : String;      ADOQuery1.Open;
  ADOQuery1.First;
  ADOQuery2.Close;
  adoquery2.SQL.Clear;
  adoquery2.SQL.Add('select * from b');
  adoquery2.open;
  while not ADOQuery1.Eof do  //和您这句for i:=0 to j-1 do begin作用一样
    Begin
      //其实不用得出其栏位,只要笔数即可
       EnCryptStr(adoquery1.FieldByName('code').AsString,tmp_buf1,'123');
       EnCryptStr(adoquery1.FieldByName('department').AsString,tmp_buf2,'123');
       EnCryptStr(adoquery1.FieldByName('name').AsString,tmp_buf3,'123');          adoquery2.Edit;
      adoquery2.Append;
      adoquery2.FieldByName('department').AsString:=tmp_buf1;
      adoquery2.FieldByName('name').AsString:=tmp_buf2;
      adoquery2.FieldByName('code').AsString:=tmp_buf3; 
      adoquery2.Post; 
 adoquery1.next;     
    end;
改为如上,应该没问题,您试试< >已下班,有问题的话,只好明天解决< > ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================
paa
初階會員


發表:50
回覆:101
積分:30
註冊:2005-02-01

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-07-20 10:30:22 IP:210.70.xxx.xxx 未訂閱
謝謝你,我成功了。
系統時間:2024-11-25 0:36:28
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!