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

直接查詢欄位的值,並將查詢到的值傳給別的欄位

尚未結案
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-06-22 20:09:15 IP:61.221.xxx.xxx 未訂閱
請問一下各位先進,下面的程式錯在那裡? 我要把使用者輸入在pm3d->A11這個欄位的值,用SQL語法查詢,並將pm5d->pnm5d1查詢到的值pm5d->pm5d2,傳給pm3d->A12     
 procedure TForm2.DBEdit8Change(Sender: TObject);
  begin
    Form1.ADOQuery2.Active := false;
    Form1.ADOQuery2.sql.Clear;
    Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE pm5d1 LIKE form1.adoQuery1.FieldByName('A11'));
    if(not Form1.ADOQuery2.Prepared) then
    begin
       Form1.ADOQuery2.Prepared;
    end;
    Form1.ADOQuery2.OPEN;
    Form1.ADOQuery2.close;
    Form1.ADOQuery2.Open;
    if not Form1.ADOQuery2.isEmpty then
      begin
      (form1.adoQuery1.FieldByName('A12').Value := form1.adoQuery2.FieldByName('PM5D2').Value);
      end;
    end
  end;
新手的問題,再次麻煩各位了,謝謝大家
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-06-22 20:21:41 IP:61.221.xxx.xxx 未訂閱
SQL ADD改成  
Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE form1.adoQuery2.FieldByName('PM5D1').Value LIKE form1.adoQuery1.FieldByName('A11')); 
還是無法Compiler...
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-06-22 22:39:53 IP:61.62.xxx.xxx 未訂閱
修改如紅色部分!!    
Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE PM5D1 LIKE ''%'+form1.adoQuery1.FieldByName('A11').AsString+'%'' '); 
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-06-23 08:03:18 IP:211.74.xxx.xxx 未訂閱
改為這樣試看看 . . Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE pm5d1 LIKE ' #39 '%' ' form1.adoQuery1.FieldByName('A11').Value '%' #39 ); . . if not Form1.ADOQuery2.isEmpty then begin if form1.adoQuery1.State=dsBrowse then form1.adoQuery1.Edit; form1.adoQuery1.FieldByName('A12').Value := form1.adoQuery2.FieldByName('PM5D2').Value; end; end TRY TRY SEE PS:網站資料已經下載完畢,可以刪除了 發表人 -
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-06-23 10:11:02 IP:61.221.xxx.xxx 未訂閱
引言: 修改如紅色部分!!
Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE PM5D1 LIKE ''%'+form1.adoQuery1.FieldByName('A11').AsString+'%'' '); 
如果使用這種方式,則出現錯誤訊息: Build [Hint] Unit2.pas(85): Variable 'Emp_No' is declared but never used in 'TForm2.SpeedButton8Click' [Warning] Unit2.pas(148): Unsafe type 'PChar' [Warning] Unit2.pas(151): Unsafe code 'GetMem' [Warning] Unit2.pas(151): Unsafe type 'PCha1: PAnsiChar' [Warning] Unit2.pas(153): Unsafe type 'PCha1: PAnsiChar' [Warning] Unit2.pas(154): Unsafe type 'PCha1: PAnsiChar' [Warning] Unit2.pas(155): Unsafe code 'FreeMem' [Warning] Unit2.pas(155): Unsafe type 'PCha1: PAnsiChar' [Error] Unit2.pas(179): Missing operator or semicolon [Error] Unit2.pas(182): Incompatible types: 'String' and 'procedure, untyped pointer or untyped parameter' [Error] Unit2.pas(192): ';' expected but 'END' found [Fatal Error] MDIAPP.dpr(11): Could not compile used unit 'Unit2.pas'
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-06-23 10:13:51 IP:61.221.xxx.xxx 未訂閱
引言: [blue]改為這樣試看看 . . Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE pm5d1 LIKE ' #39 '%' ' form1.adoQuery1.FieldByName('A11').Value '%' #39 ); . . if not Form1.ADOQuery2.isEmpty then begin if form1.adoQuery1.State=dsBrowse then form1.adoQuery1.Edit; form1.adoQuery1.FieldByName('A12').Value := form1.adoQuery2.FieldByName('PM5D2').Value; end; end
改成這樣,會出現錯誤訊息: Build [Hint] Unit2.pas(85): Variable 'Emp_No' is declared but never used in 'TForm2.SpeedButton8Click' [Warning] Unit2.pas(148): Unsafe type 'PChar' [Warning] Unit2.pas(151): Unsafe code 'GetMem' [Warning] Unit2.pas(151): Unsafe type 'PCha1: PAnsiChar' [Warning] Unit2.pas(153): Unsafe type 'PCha1: PAnsiChar' [Warning] Unit2.pas(154): Unsafe type 'PCha1: PAnsiChar' [Warning] Unit2.pas(155): Unsafe code 'FreeMem' [Warning] Unit2.pas(155): Unsafe type 'PCha1: PAnsiChar' [Error] Unit2.pas(178): ')' expected but identifier 'A11' found [Error] Unit2.pas(178): Illegal character in input file: '%' ($25) [Error] Unit2.pas(179): Missing operator or semicolon [Error] Unit2.pas(192): ';' expected but 'END' found [Fatal Error] MDIAPP.dpr(11): Could not compile used unit 'Unit2.pas'
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-06-23 10:15:54 IP:61.221.xxx.xxx 未訂閱
目前改成這樣: procedure TForm2.DBEdit8Change(Sender: TObject); begin Form1.ADOQuery2.Active := false; Form1.ADOQuery2.sql.Clear; // Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE PM5D1 LIKE ''%' form1.adoQuery1.FieldByName('A11').AsString '%'' ' Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE pm5d1 LIKE ' #39 '%' ' form1.adoQuery1.FieldByName('A11').Value '%' #39 ); if (not Form1.ADOQuery2.Prepared) then begin Form1.ADOQuery2.Prepared; end; Form1.ADOQuery2.OPEN; Form1.ADOQuery2.close; Form1.ADOQuery2.Open; if not Form1.ADOQuery2.isEmpty then begin if form1.adoQuery1.State=dsBrowse then form1.adoQuery1.Edit; form1.adoQuery1.FieldByName('A12').Value := form1.adoQuery2.FieldByName('PM5D2').Value; end; end end; 看樣子沒有想像中的容易
hagar
版主


發表:143
回覆:4056
積分:4445
註冊:2002-04-14

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-06-23 10:23:12 IP:202.39.xxx.xxx 未訂閱
if (not Form1.ADOQuery2.Prepared) then     begin        Form1.ADOQuery2.Prepared;     end; Form1.ADOQuery2.OPEN; Form1.ADOQuery2.close; Form1.ADOQuery2.Open; 問一下, 您為什麼要連續地做兩次 Open TADOQuery 的動作? --- 每個人都是一本書
timhuang
尊榮會員


發表:78
回覆:1815
積分:1608
註冊:2002-07-15

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-06-23 11:04:45 IP:203.95.xxx.xxx 未訂閱
請注意修改紅色部分, 應該是後面有一個 end 是多的. 這種小錯誤是不應該發生的哦~~     
 procedure TForm2.DBEdit8Change(Sender: TObject);
  begin
    Form1.ADOQuery2.Active := false;
    Form1.ADOQuery2.sql.Clear;
    Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE PM5D1 LIKE ''%'+form1.adoQuery1.FieldByName('A11').AsString+'%'' ');
    if(not Form1.ADOQuery2.Prepared) then
    begin
       Form1.ADOQuery2.Prepared;
    end;
    Form1.ADOQuery2.OPEN;
    Form1.ADOQuery2.close;
    Form1.ADOQuery2.Open;
    if not Form1.ADOQuery2.isEmpty then
      begin
      (form1.adoQuery1.FieldByName('A12').Value := form1.adoQuery2.FieldByName('PM5D2').Value);
      end;
    end
  end;
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-06-23 11:10:17 IP:61.221.xxx.xxx 未訂閱
引言: if (not Form1.ADOQuery2.Prepared) then begin Form1.ADOQuery2.Prepared; end; Form1.ADOQuery2.OPEN; Form1.ADOQuery2.close; Form1.ADOQuery2.Open; 問一下, 您為什麼要連續地做兩次 Open TADOQuery 的動作?
感謝您的指導,我是看書學的,書本說如果要抓最新的查詢,就要先Close,不過我剛剛試了一下,改成一個Open查詢也可以運作
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-06-23 11:21:46 IP:61.221.xxx.xxx 未訂閱
好像快成功了,改成這樣後  
 procedure TForm2.DBEdit8Change(Sender: TObject);
  begin
    Form1.ADOQuery2.Active := false;
    Form1.ADOQuery2.sql.Clear;
    Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE PM5D1 LIKE ''%' form1.adoQuery1.FieldByName('A11').AsString '%'' ');
    if(not Form1.ADOQuery2.Prepared) then
    begin
       Form1.ADOQuery2.Prepared;
    end;
    Form1.ADOQuery2.Open;
    if not Form1.ADOQuery2.isEmpty then
      begin
      form1.adoQuery1.FieldByName('A12').Value := form1.adoQuery2.FieldByName('PM5D2').Value;
      end;
  end;
Compiler出現錯誤訊息 Project MDIAPP.exe raised exception class EDatabaseError with message 'ADOQUERY: Dataset not in edit or insert mode'.
chih
版主


發表:48
回覆:1186
積分:639
註冊:2002-04-02

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-06-23 11:29:49 IP:211.74.xxx.xxx 未訂閱
 procedure TForm2.DBEdit8Change(Sender: TObject);
  begin
    Form1.ADOQuery2.Active := false;
    Form1.ADOQuery2.sql.Clear;
    Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE PM5D1 LIKE ''%' form1.adoQuery1.FieldByName('A11').AsString '%'' ');
    if(not Form1.ADOQuery2.Prepared) then
    begin
       Form1.ADOQuery2.Prepared;
    end;
    Form1.ADOQuery2.Open;
    if not Form1.ADOQuery2.isEmpty then
      begin
       if form1.adoQuery1.State=dsBrowse then form1.adoQuery1.Edit;         
      form1.adoQuery1.FieldByName('A12').Value := form1.adoQuery2.FieldByName('PM5D2').Value;
      end;
  end;
ha0009
版主


發表:16
回覆:507
積分:639
註冊:2002-03-16

發送簡訊給我
#13 引用回覆 回覆 發表時間:2003-06-23 11:30:08 IP:61.30.xxx.xxx 未訂閱
你好: 這個錯誤已經很明顯了吧 你的 > >
jawtair
一般會員


發表:30
回覆:92
積分:24
註冊:2003-04-26

發送簡訊給我
#14 引用回覆 回覆 發表時間:2003-06-23 11:39:37 IP:61.221.xxx.xxx 未訂閱
引言: 你好: 這個錯誤已經很明顯了吧 你的 > >< face="Verdana, Arial, Helvetica"> 我加了一行 form1.adoQuery1.edit; 就Compiler可以過了,感謝感謝,受教了
系統時間:2024-11-23 5:12:08
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!