RequestLive與查詢之關係 |
尚未結案
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
當游標在DBGrid移動時,DBCheckBox所取出資料均正確,
並設定(RequestLive=True)以即時寫入資料庫 但欲加入一功能欲顯示資料表中Data1.F1_1為true的資料
//僅顯示有標註之產品
Data1Query.SQL.Clear;
Data1Query.SQL.Add('Select * from Data1');
Data1Query.SQL.Add('Where F1_1 = True '); //****
Data1Query.SQL.Add('Order by F1_3');
Data1Query.DisableControls;
try
Data1dQuery.Close;
Data1Query.Open;
Finally;
Data1Query.EnableControls;
End; //End Try
//全部顯示
END Else Begin
Data1Query.SQL.Clear;
Data1Query.SQL.Add('Select * from Data1');
Data1Query.SQL.Add('Order by F1_3');
Data1Query.DisableControls;
try
Data1Query.Close;
Data1Query.Open;
Finally;
Data1Query.EnableControls;
End; //End Try 則會出現以下錯誤:'Could not find object'
測試解決方式
1.將Data1DataSource之RequestLive=False,但則資料無法寫入,所以不行
2.將上述查詢中Data1Query.SQL.Add('Where F1_1 = True ') 取消,不過當然失去查詢之意義
請問該如何?
|
P.D.
版主 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
Data1Query.SQL.Clear;
Data1Query.SQL.Add('Select * from Data1');
下一行的 Where 跟前一行的 Data1 之間無空格
這 SQL 結果變成: Select * from Data1Where F1_1 = True Order by F1_3
也就是藍色的部份錯了
Data1Query.SQL.Add('Where F1_1 = True '); //****
Data1Query.SQL.Add('Order by F1_3');
Data1Query.DisableControls;
try
Data1dQuery.Close;
Data1Query.Open;
Finally;
Data1Query.EnableControls;
End; //End Try
//全部顯示
END Else Begin
Data1Query.SQL.Clear;
Data1Query.SQL.Add('Select * from Data1');
這兒的前後兩行也是
這 SQL 結果變成: Select * from Data1Order by F1_3
也就是藍色的部份錯了
Data1Query.SQL.Add('Order by F1_3');
Data1Query.DisableControls;
try
Data1Query.Close;
Data1Query.Open;
Finally;
Data1Query.EnableControls;
End; //End Try ---
Have you ever wondered what it would be like? 發表人 - hagar 於 2003/03/05 07:57:06
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
|
hagar
版主 發表:143 回覆:4056 積分:4445 註冊:2002-04-14 發送簡訊給我 |
從網路上剪來這段: Could not find object errors usually means either
the table or column name is mis-spelled or if you
are setting RequestLive to true it is in mixed case.
Setting RequestLive to true causes the BDE to send
the identifiers over quoted and most DB's set the
tables & columns to upper case. Try upper casing
all your SQL and see if that helps.
所以將您的 SQL 都有大寫字母試試.
再不然都改用 ADO 吧! ---
Have you ever wondered what it would be like?
|
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
Hello Paicaso你好:
剛剛測了一下真的會發生'Could not find object'的情形
小弟猜測是SQL語法逃不過BDE的偵測所致, 借用Mickey大大的一段程式 如何讓BDE不要檢查SQL的statement
http://delphi.ktop.com.tw/topic.php?topic_id=26025
procedure TForm1.Button1Click(Sender: TObject); var s: string; t: hDBICur; begin s := 'select * from T1 where b = True'; t := Query1.Handle; check(DbiQExecDirect(Database1.Handle, qrylangSQL, PChar(s), @t)); if integer(t)<>0 then Query1.Handle := t; end;這樣就可以過了. 我不是高手, 高手是正在銀幕前微笑的人.
------
我不是高手, 高手是正在銀幕前微笑的人. |
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
SQL Parser 看不懂 'TRUE' 這個字 !
改用 SQL Parameter
1.Select * from Data1 Where F1_1 = :P1 Order by F1_3 2.assign Parameter P1.datatype:=ftboolean; P1.ParamType:=ptInput; P1.Value:=true; 3.open query/* Free 和 Create 一樣重要 */ 發表人 - Mickey 於 2003/03/05 12:31:49 |
Miles
尊榮會員 發表:27 回覆:662 積分:622 註冊:2002-07-12 發送簡訊給我 |
|
Paicaso
中階會員 發表:140 回覆:124 積分:52 註冊:2002-09-04 發送簡訊給我 |
|
Mickey
版主 發表:77 回覆:1882 積分:1390 註冊:2002-12-11 發送簡訊給我 |
引言: Thanks for Mickey.. 我大概了解您的意思,但才疏學淺.可否舉個例. ex. P1.datatype:=ftboolean;.... P1要定義為何種型態parameter 還有許多應用, 可搜尋相關文章喔 ! Sample Code as following : procedure TForm1.Button1Click(Sender: TObject); begin with query1 do begin ParamByName('P1').DataType := ftBoolean; ParamByName('P1').ParamType := ptInput; ParamByName('P1').Value := true; RequestLive := True; Open; end; end; 引言: 又既然SQL Parser 看不懂 'TRUE' 這個字,那為何只要將RequestLive改為False即可?要 open 能夠回寫 Database 的 SQL, 有許多的限制, 如 不能用 function... 我猜想 BDE 解析 requestlive=true/false SQL 的機制應該不同. /* Free 和 Create 一樣重要 */ |
catvboy
一般會員 發表:3 回覆:9 積分:2 註冊:2005-04-12 發送簡訊給我 |
引言: Hello Paicaso你好: 剛剛測了一下真的會發生'Could not find object'的情形 小弟猜測是SQL語法逃不過BDE的偵測所致, 借用Mickey大大的一段程式 如何讓BDE不要檢查SQL的statement http://delphi.ktop.com.tw/topic.php?topic_id=26025請教大哥: 我目前也是碰到這種問題,我是使用BDE wwQuery的配合,下了sql語法為 select * from "mgr.dbo.TEST1",wwQuery的RequestLive為True DB SERVER為 SQL 6.5 一樣會出現'Could not find object'的錯誤 可是看完各位大哥的討論, 我試著將TForm1.Button1Click的程式try看看 可是程式一直卡在 t: hDBICur 我的delphi 3.0似乎沒有BDE的FUNCTION可以使用 該如何安裝啊? 看BDE的HELP檔有這段文字 Install the BDE32.TOK file to support syntax highlighting for BDE functions and types. Directions on how to do this are included in the file \BDE32\DOC\BDE32TOK.TXT. 我的硬碟,甚至安裝光碟中都找不到這兩個檔案 是不是可以請教已經試成功的大哥,你們怎麼做到的procedure TForm1.Button1Click(Sender: TObject); var s: string; t: hDBICur; begin s := 'select * from T1 where b = True'; t := Query1.Handle; check(DbiQExecDirect(Database1.Handle, qrylangSQL, PChar(s), @t)); if integer(t)<>0 then Query1.Handle := t; end;這樣就可以過了. 我不是高手, 高手是正在銀幕前微笑的人. |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |