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

插入字段

答題得分者是:cashxin2002
deity
尊榮會員


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

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-11-28 17:02:54 IP:218.15.xxx.xxx 未訂閱
表A1 bianma mingchen Danwei 000111 AD 001012 BD 002116 CD 003002 DD 表B1 dm Danwei 000 个 001 只 002 台 003 条 判断出A1的前三位(000,001,002,003)与B1的dm是否相同。相同则根据B1,把B1的Danwei写入A1的Danwei 行径窄处,留一步与人行
cashxin2002
版主


發表:231
回覆:2555
積分:1937
註冊:2003-03-28

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-11-28 17:44:58 IP:63.84.xxx.xxx 未訂閱
您好﹗    Update A1, B1 Set A1.Danwei=B1.Danwei Where SubString(A1.bianma,1,3)=B2.Danwei //如果是使用Access資料庫形態﹐請將SubString字句改為Mid    參考看看﹗    ===================== 努力,相信會獲得美麗! 忻晟 發表人 - cashxin2002 於 2003/11/28 17:49:08
------
忻晟
huangeider
高階會員


發表:288
回覆:492
積分:231
註冊:2003-02-26

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-11-28 17:52:02 IP:218.172.xxx.xxx 未訂閱
如果是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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-11-28 23:56:30 IP:218.15.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-11-29 00:24:54 IP:63.84.xxx.xxx 未訂閱
您好!    首先, 在做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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-12-02 16:35:45 IP:218.15.xxx.xxx 未訂閱
已设置了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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-12-03 09:11:34 IP:63.84.xxx.xxx 未訂閱
您好﹗    第一個問題﹐其錯誤原因應是欄位名稱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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-12-05 20:14:09 IP:218.15.xxx.xxx 未訂閱
可以了,原来是在Update时赋值时写法搞错了,谢谢前辈多日的指点! 行径窄处,留一步与人行
系統時間:2024-06-26 14:20:55
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!