請教Accsee如何在Delphi用SQL語法複製一筆紀錄 |
尚未結案
|
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
likush
高階會員 發表:5 回覆:235 積分:103 註冊:2002-10-08 發送簡訊給我 |
|
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
marklue您好:
1、在DBGrid中输入记录时,可采用
参考:http://delphi.ktop.com.tw/topic.php?topic_id=40256
转贴cmj前辈所答,
1.定義 OldFds:variant; 2.在TForm Create事件中 OldFds := VarArrayCreate([0, DataSet.FieldCount-1], varVariant); 3.保存記錄值在DataSet之BeforePost事件中 for i:=0 to DataSet.FieldCount-1 do OldFds[i]:=DataSet.Fields[i].Value; 4.下一筆新增中在Dataset之OnNewRecord事件中 for i:=0 to DataSet.FieldCount-1 do DataSet.Fields[i].Value:=OldFds[i];2、如果想复制整个表,可采用: http://delphi.ktop.com.tw/topic.php?TOPIC_ID=74130 里有小弟之所答 ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ 發表人 - deity 於 2005/08/02 08:22:01 |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: likush 前輩您好: 請問我是同一個TABLE能這樣用否? 我的目的就像某些軟體有提供COPY功能一樣,方便建檔用。 謝謝您!您好﹗ 擷取同一個資料表中的資料做以复制﹐可用如下SQL敘述﹕ Insert Into 資料表名稱 Select * From 資料表名稱 Where ... ================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
deity 前輩您好:
謝謝您提供的方式,可是我傾向用SQL完成,因為在DELPHI完成會觸發很多事件,控制上很麻煩,而且會降低效率,所以暫時還是希望用SQL語法完成。 cashxin2002版主您好:
我試過您說的方式,但是就是不知道WHERE後面需要怎麼下,試過insert into Cus select * from Cus where no='新編號' 但是無效,還有,就是需要在另外ㄧ個QUERY下SQL語法還是目前的QUERY?,如果在另一個QUERY下那樣欄位的值可以帶到新紀錄否?如果在目前的QUERY做那樣是否會讓本來的工作中斷。
謝謝!
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
marklue您好:
begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('insert into Cus select * from Cus where no ="001"'); <--where里表示您所想要复制的记录no ADOQuery1.ExecSQL; ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('select * from table1'); ADOQuery2.Open; end;其中有同一个ADOQuery也行,分开也可以。小弟建议分开好点。 您所说的无效,不只是如何判别出来的,您可以直接打开表或用一个DBGrid显示出表记录是否已增加了一条。 ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ |
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
deity前輩 cashxin2002版主 您們好: 小弟在ACCESS用SQL模式這樣下'insert into Cus select * from Cus where no ="001",當001是新的編號時會出現新增0筆資料,當001已存在資料庫則出現新增一筆資料視窗,回答『是』之後,卻說索引重複,所以我在想這樣的語法是不是ACCESS不接受? 程式中我有用ExecSQL,可是查資料庫也沒多一筆!我對SQL不熟,如果從字面解釋上面的語法讓人感覺好像說『當no='001'時才複製』如果這樣解釋就符合他跳出來的提示視窗!但是卻無法達到我要做的動作!
謝謝!
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: 小弟在ACCESS用SQL模式這樣下'insert into Cus select * from Cus where no ="001",當001是新的編號時會出現新增0筆資料,當001已存在資料庫則出現新增一筆資料視窗,回答『是』之後,卻說索引重複,所以我在想這樣的語法是不是ACCESS不接受? 程式中我有用ExecSQL,可是查資料庫也沒多一筆!我對SQL不熟,如果從字面解釋上面的語法讓人感覺好像說『當no='001'時才複製』如果這樣解釋就符合他跳出來的提示視窗!但是卻無法達到我要做的動作! 謝謝!用where no ="001"指新增no=001的一笔记录,如果没有的话当然新增0笔了,都没有符合条件的记录,哪有可能还有新增出来。如果有符合的记录,如果表有索引的话当然也会提示出重复,但您不就是要这样的吗(新增一笔和某笔一模一样的记录么)?如果想避免这个提示框,您可以在下'insert into Cus select field1,field2,field3 from Cus where no ="001" //假如表的索引字段为no,而field1,field2,field3为非索引字段,而索引字段只好自己手写过了。 这些出现的问题都是正常的。而此类语法在ACCESS下也支持! 另:您所要的动作,具体是什么?不是新增一笔和某笔一模一样的记录么?给您都搞糊涂了 <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: deity 前輩您好: SORRY,表達不明確,我的目的是要把001(舊有的資料)copy成002(新產品資料),這樣有些相同的欄位就可以不用重KEY,只要修改相異處即可,不知道這樣deity前輩了解我的目的否? 謝謝!marklue 兄您好,您大我那么多,别叫前辈了< >小弟也是初学者< > 对于您的问题,上面的回答应该都可以解决了,假如您的表 Cus中no为索引字段,其余的为非索引字段 Cus no(索引字段) field2 field3 field4 则您可以 begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('insert into Cus select field2,field3,field4 from Cus where no ="001"'); <--因field2、field3、field3为非索引字段,所以它不会有提示重复索引。 ADOQuery1.ExecSQL; ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('select * from table1'); ADOQuery2.Open; end; 因为是索引字段的话,必须为不同的值,所以你也得重新KEY,所以新增的时候您只要将非索引的字段新增即可,索引字段不新增,手动KEY过!试试看,顺心~~ >> <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 如果'002'值是固定的﹐則可將程式碼改成如下﹕
begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Insert Into Select ''002'' as 欄位名稱1 '); ADOQuery1.SQL.Add('欄位名稱2, 欄位名稱3, 欄位名稱4 Where '); ADOQuery1.SQL.Add('欄位名稱1=''001'''); //用正确的欄位名稱來代替以上的欄位名稱﹐如用no來代替以上的欄位名稱1 ADOQuery1.ExecSQL; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================
------
忻晟 |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
引言: deity 兄您好: 請問如果已知要把no=001資料複製成no=002,在這SQL語法需要再補充什麼條件,也就是說no='002'要放在哪裡? 謝謝!marklue 您好: Cus no(索引字段) field2 field3 field4 001 李四 男 程序员 002 李四 男 程序员 <--您想新增这一笔 李四 男 程序员 <--SQL语句得出的结果 no需要自己输入进去 上面给的方法就是只增field2,field3,field4,而no是要您自己KEY进去的。no=002不用写到SQL语法上,SQL语法也不用补充什么的,您可以试试看。 或者不用insert用Append也可以,方法如下: begin ADOQuery2.Close; ADOQuery2.SQL.Clear; ADOQuery2.SQL.Add('select * from Cus where no="001"'); ADOQuery2.Open; ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('select * from Cus'); ADOQuery1.Open; ADOQuery1.Edit; ADOQuery1.Append; ADOQuery1.FieldByName('no').AsString:='002'; ADOQuery1.FieldByName('Field2').AsString:=ADOQuery2.FieldByName('Field2').AsString; ADOQuery1.FieldByName('Field3').AsString:=ADOQuery2.FieldByName('Field2').AsString; ADOQuery1.FieldByName('Field4').AsString:=ADOQuery2.FieldByName('Field4').AsString; ADOQuery1.Post; end; 或如版主所言: ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('insert into Cus select “002”as no,field2,field3,field4 from Cus where no ="001"'); <--因field2、field3、field3为非索引字段,所以它不会有提示重复索引。 ADOQuery1.ExecSQL;试试看,望您能早日解决问题~ <> ============================ 为什么经过多年以后,得失的过程如此冷漠 ============================ > 發表人 - |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
引言: cashxin2002版主 您好: 請問,沒有宣告TABLE電腦會寫到我要的TABEL否? 謝謝!您好﹗ Sorry, 筆誤了﹐修正為如下﹕ begin ADOQuery1.Close; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Add('Insert Into 資料表名稱 Select ''002'' as 欄位名稱1, '); ADOQuery1.SQL.Add('欄位名稱2, 欄位名稱3, 欄位名稱4 From 資料表名稱 '); ADOQuery1.SQL.Add('Where 欄位名稱1=''001'''); //用正确的欄位名稱來代替以上的欄位名稱﹐如用no來代替以上的欄位名稱1 ADOQuery1.ExecSQL; end;================================= 有空來瞅瞅我﹗因為我是您的朋友﹐有您真好﹗ ================================ 發表人 - cashxin2002 於 2005/08/02 17:42:41
------
忻晟 |
marklue
一般會員 發表:33 回覆:55 積分:17 註冊:2005-02-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |