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

RequestLive與查詢之關係

尚未結案
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#1 引用回覆 回覆 發表時間:2003-03-05 00:31:52 IP:61.59.xxx.xxx 未訂閱
當游標在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

發送簡訊給我
#2 引用回覆 回覆 發表時間:2003-03-05 01:28:06 IP:61.66.xxx.xxx 未訂閱
不知道你用的是那一種資料庫    我按你的方法做,  cacheupdate:=true; requestlive:= true;    沒有問題,     我猜想你用的是 db, 或 dbf 檔, 那    Data1Query.SQL.Add('Select * from Data1');    請改為 Data1Query.SQL.Add('Select * from "Data1.db"'); 試試看
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#3 引用回覆 回覆 發表時間:2003-03-05 02:11:13 IP:61.59.xxx.xxx 未訂閱
Data1是我在Access中的一個資料表,所以 Data1Query.SQL.Add('Select * from Data1');沒錯 唯查詢F1_1為true時會出現錯誤 我試著1.將Data1DataSource之RequestLive改為False則可以查詢,但則資料無法寫入,所以不行 2.將上述查詢中Data1Query.SQL.Add('Where F1_1 = True ') 取消,不過當然失去查詢之意義
hagar
版主


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

發送簡訊給我
#4 引用回覆 回覆 發表時間:2003-03-05 07:48:22 IP:202.39.xxx.xxx 未訂閱
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

發送簡訊給我
#5 引用回覆 回覆 發表時間:2003-03-05 08:26:02 IP:211.74.xxx.xxx 未訂閱
感謝各位的解答 不過有關少了'空格'部分純為筆誤 我真正的問題重點是 如我將Data1DataSource之RequestLive關閉(False)其查詢是可以的, 但如把RequestLive打開(True)則查詢條件中Data1Query.SQL.Add('Where F1_1 = True ')這一段必須取消,否則查詢時會出現錯誤
hagar
版主


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

發送簡訊給我
#6 引用回覆 回覆 發表時間:2003-03-05 09:12:35 IP:202.39.xxx.xxx 未訂閱
從網路上剪來這段:    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

發送簡訊給我
#7 引用回覆 回覆 發表時間:2003-03-05 09:42:41 IP:218.160.xxx.xxx 未訂閱
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

發送簡訊給我
#8 引用回覆 回覆 發表時間:2003-03-05 11:22:44 IP:61.59.xxx.xxx 未訂閱
Thank for Miles 您的指點深具意義,SQL與BDE的語法在何種情況有所衝突? 另我參考http://delphi.ktop.com.tw/topic.php?topic_id=26025 use "DbiQExecDirect" function in "BDE.pas" 不知hDBICur型態? 也找不到"BDE.pas" 可否再予指點 謝謝
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#9 引用回覆 回覆 發表時間:2003-03-05 12:30:33 IP:61.219.xxx.xxx 未訂閱
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

發送簡訊給我
#10 引用回覆 回覆 發表時間:2003-03-05 17:04:09 IP:218.160.xxx.xxx 未訂閱
Hi Paicaso 兄你好: 可以參考C:\Program Files\Common Files\Borland Shared\BDE\BDE32.HLP 裡面有詳盡的說明, SQL方面恕小弟才學書淺正如Mickey大大應該是BDE的SQL Parser不過的關係.< >< > 我不是高手, 高手是正在銀幕前微笑的人.
------


我不是高手, 高手是正在銀幕前微笑的人.
Paicaso
中階會員


發表:140
回覆:124
積分:52
註冊:2002-09-04

發送簡訊給我
#11 引用回覆 回覆 發表時間:2003-03-05 17:13:23 IP:61.59.xxx.xxx 未訂閱
Thanks for Mickey.. 我大概了解您的意思,但才疏學淺.可否舉個例. ex. P1.datatype:=ftboolean;.... P1要定義為何種型態 又既然SQL Parser 看不懂 'TRUE' 這個字,那為何只要將RequestLive改為False即可? 也感謝Miles..您的指點..
Mickey
版主


發表:77
回覆:1882
積分:1390
註冊:2002-12-11

發送簡訊給我
#12 引用回覆 回覆 發表時間:2003-03-06 09:16:59 IP:61.219.xxx.xxx 未訂閱
引言: 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

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-11-22 17:38:58 IP:210.243.xxx.xxx 未訂閱
引言: 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;
這樣就可以過了. 我不是高手, 高手是正在銀幕前微笑的人.
請教大哥: 我目前也是碰到這種問題,我是使用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. 我的硬碟,甚至安裝光碟中都找不到這兩個檔案 是不是可以請教已經試成功的大哥,你們怎麼做到的
系統時間:2024-06-16 19:40:17
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!