插入字段 |
答題得分者是:cashxin2002
|
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
|
huangeider
高階會員 發表:288 回覆:492 積分:231 註冊:2003-02-26 發送簡訊給我 |
如果是paradox且用程式來判斷的話小弟作法如下:
var iint:integer; jstr,kstr:string; 表a1.first; for i:=1 to 表a1.recordcount do begin jstr:=trim(表a1.fieldbyname('bianma').asstring); kstr:=jstr[1] jstr[2] jstr[3]; if 表b1.locate('dm',kstr,[]) then begin 表a1.edit; 表a1.fieldbyname('danwei').asstring:= 表b1.fieldbyname ('danwei').asstring; 表a1.post; end; 表a1.next; end;「堅持」從洗馬桶做起 Aric |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
cashxin2002前辈,按你所说,是不是这样写,如果是这样的话,好像不能编译成功!
Query1.SQL.Text:='select * from "F:\dbtoexecl\Jbdjk.db" order by bianma';
Query1.Open;
Query2.SQL.Text:='select * from "F:\dbtoexecl\danwei.db" order by dm';
Query2.Open; Update Query1,Query2 set Query1.fieldbyname('Danwei').asstring=Query2.fieldbyname('Danwei').asstring where Substring(Query1.fieldbyname('bianma').asstring,1,3)=Query2.fieldbyname('Danwei').asstring;
huangeider前辈,之前我也是如你所说的方法去做,也出现同样的错误,不能修改只读的数据集,不知什么原因,我已将A1.RequesLive:=true; 也不行! 行径窄处,留一步与人行
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好! 首先, 在做Update的SQL時, 并不需要先把資料表Open.
所以, 以下這段可以刪除:
Query1.SQL.Text:='select * from "F:\dbtoexecl\Jbdjk.db" order by bianma';
Query1.Open;
Query2.SQL.Text:='select * from "F:\dbtoexecl\danwei.db" order by dm';
Query2.Open; Update的SQL語法, 小弟前篇回复時是以您的要求做目的來做的, 所以以下列出詳細寫法:
begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Update A1, B1 Set A1.Danwei=B1.Danwei Where SubString(A1.bianma,1,3)=B2.Danwei'); Query1.ExecSQL; end;//A1和A2分別是您所使用的兩個資料表名稱 P.S 這部分小弟已經測試無誤! 參考看看! ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
已设置了Query1 的DatabaseName为DD(或直接设表路径也不行),并在BDE Admin建了个DD。
begin
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('Update TAB103.db set danwei=danwei1.dw where copy(bianma ,1,3)=danwei1.dm');
Query1.ExecSQL;
end;
方法1:错误提示为:“找不到字段DanWei(表A1)”或其它的错误。 var i:integer;
jstr,kstr:string;
begin
Query1.SQL.Text:='select * from "d:\lijh\ljh\update\tab103.db" order by bianma';
Query1.Open;
Query2.SQL.Text:='select * from "d:\lijh\ljh\update\danwei1.db"order by dm';
Query2.Open;
Query1.CachedUpdates:=true;
query1.First;
for i:=1 to Query1.RecordCount do
begin
jstr:=trim(query1.fieldbyname('bianma').asstring);
kstr:=jstr[1] jstr[2] jstr[3];
if Query2.locate('dm',kstr,[]) then
begin
Query1.edit;
Query1.fieldbyname('danwei').asstring:=Query2.fieldbyname('dw').asstring;
query1.post;
end;
Query1.next;
end;
end;
方法2:错误提示为“不能修改只读数据集Query1”
最后的结果如下:
表A1
bianma mingchen Danwei
000111 AD 个
001012 BD 只
001023 PD 只
002116 CD 台
003002 DD 条
…………………………
………………………………
为什么那么简单的问题都搞不掂,苦,呜…… 行径窄处,留一步与人行 發表人 - deity 於 2003/12/02 16:54:02
|
cashxin2002
版主 發表:231 回覆:2555 積分:1937 註冊:2003-03-28 發送簡訊給我 |
您好﹗ 第一個問題﹐其錯誤原因應是欄位名稱DanWei有關﹐一般來講﹐使用Update的SQL語法時﹐當擷取的資料表超過一個時﹐正确的語法應為﹕
Update 資料表1, 資料表2 Set 資料表1.欄位1=*** Where 資料表1.鍵值欄位=資料表2.鍵值欄位
所以﹐如果TAB103和danwei皆是您所使用到的資料表﹐您的這段SQL應改為﹕
begin Query1.Close; Query1.SQL.Clear; Query1.SQL.Add('Update TAB103.db, danwei.db set TAB103.danwei=danwei1.dw where copy(TAB103.bianma ,1,3)=danwei1.dm'); Query1.ExecSQL; end;第二個問題﹐Query元件有一個RequstLive的屬性﹐其作用是是否允許使用者通過Query元件進行資料編輯及異動作業﹐您需要將此屬性值設為True 參考看看﹗ ===================== 努力,相信會獲得美麗! 忻晟
------
忻晟 |
deity
尊榮會員 發表:90 回覆:876 積分:678 註冊:2003-05-09 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |