直接查詢欄位的值,並將查詢到的值傳給別的欄位 |
尚未結案
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
請問一下各位先進,下面的程式錯在那裡?
我要把使用者輸入在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 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
|
chih
版主 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
改為這樣試看看
.
.
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 發送簡訊給我 |
引言: 修改如紅色部分!!如果使用這種方式,則出現錯誤訊息: 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'Form1.ADOQuery2.SQL.Add('SELECT * FROM pm5d WHERE PM5D1 LIKE ''%'+form1.adoQuery1.FieldByName('A11').AsString+'%'' '); |
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
引言: [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 發送簡訊給我 |
目前改成這樣:
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 發送簡訊給我 |
|
timhuang
尊榮會員 發表:78 回覆:1815 積分:1608 註冊:2002-07-15 發送簡訊給我 |
請注意修改紅色部分, 應該是後面有一個 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; |
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
引言: 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 發送簡訊給我 |
好像快成功了,改成這樣後
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 發送簡訊給我 |
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 發送簡訊給我 |
|
jawtair
一般會員 發表:30 回覆:92 積分:24 註冊:2003-04-26 發送簡訊給我 |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |