幽靈的 locate |
答題得分者是:T.J.B
|
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
我之前所寫的程式中,有用到locate來找資料是否重復 if DM_MT.Table_MT_dba.locate('dba_id',Edit_MT_DBAid.text,[])then
begin
showmessage('管理員代碼 '+Edit_MT_DBAid.text+' 重覆!!請重新輸入!');
edit_mt_dbaid.SetFocus;
end 但是今天又測試了一下,發現他並不會去執行這一行指令了
因為之前連線的主機當掉,我改連localhost的資料庫
突然就不行了,
請問,這和mysql的版本或是什麼有關係呢…
|
P.D.
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:603 回覆:4038 積分:3874 註冊:2006-10-31 發送簡訊給我 |
引言: 我之前所寫的程式中,有用到locate來找資料是否重復 if DM_MT.Table_MT_dba.locate('dba_id',Edit_MT_DBAid.text,[])then begin showmessage('管理員代碼 ' Edit_MT_DBAid.text ' 重覆!!請重新輸入!'); edit_mt_dbaid.SetFocus; end 但是今天又測試了一下,發現他並不會去執行這一行指令了 因為之前連線的主機當掉,我改連localhost的資料庫 突然就不行了, 請問,這和mysql的版本或是什麼有關係呢… |
T.J.B
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
T.J.B
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言:引言: [quote] 建議你用sql 不要用 locate的function 天行健 君子當自強不息~~@.@我現在已經不用locate而改設一個query來存我每個用到的sql語法 但是…我現在又有問題了 我的dbgrid的游標要怎麼讓他移到我所找到的資料上呢… 因為之前用locate可以找到資料並移到該資料上, 現在不用locate,不曉得要怎麼讓游標移動了
------
天行健 君子當自強不息~~@.@ |
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
T.J.B
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
|
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
引言: 你可以把locate 前後的程式碼post上來看看 天行健 君子當自強不息~~@.@以下是我的程式碼… if (Edit_MT_dbaQuery.text='') then messagedlg('查詢值不可為空! ',mterror,[mbok],0) else with DM_MT do begin IF Table_MT_DBA.Locate('DBA_ID',Edit_MT_dbaQuery.text,[]) THEN begin Close; showmessage('已查到管理者代碼為 ' edit_mt_dbaquery.Text ' 的記錄'); end else begin showmessage('查無此筆 ' Edit_MT_dbaQuery.text ' 管理員記錄'); Edit_MT_dbaQuery.SetFocus; end; bitbtn2Click(nil);//關閉form end; 就這樣…麻煩您幫我看一下囉…謝謝 |
領航天使
站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言:站長的經驗是Delphi的Locate指令, 有時會有查不到的情況發生, 而且也是像您一樣本來可以後來又不行, 所以, 建議最好不要用Locate的指令! ~~~Delphi K.Top討論區站長~~~引言: 你可以把locate 前後的程式碼post上來看看 天行健 君子當自強不息~~@.@以下是我的程式碼… if (Edit_MT_dbaQuery.text='') then messagedlg('查詢值不可為空! ',mterror,[mbok],0) else with DM_MT do begin IF Table_MT_DBA.Locate('DBA_ID',Edit_MT_dbaQuery.text,[]) THEN begin Close; showmessage('已查到管理者代碼為 ' edit_mt_dbaquery.Text ' 的記錄'); end else begin showmessage('查無此筆 ' Edit_MT_dbaQuery.text ' 管理員記錄'); Edit_MT_dbaQuery.SetFocus; end; bitbtn2Click(nil);//關閉form end; 就這樣…麻煩您幫我看一下囉…謝謝
------
~~~Delphi K.Top討論區站長~~~ |
danny
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 站長的經驗是Delphi的Locate指令, 有時會有查不到的情況發生, 而且也是像您一樣本來可以後來又不行, 所以, 建議最好不要用Locate的指令! ~~~Delphi K.Top討論區站長~~~我贊成 站長的看法; 我試過同樣的程式在 InterBase 可以, 但 FireBird 就會發生 Locate 找不到資料的情形, 不然您改用其他版本看看, 也許不同 OS (Windows, Linux)也有影響. 不過最好還是用 query 查詢比較好 ...
------
將問題盡快結案也是一種禮貌! |
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
站長的經驗是Delphi的Locate指令,
有時會有查不到的情況發生,
而且也是像您一樣本來可以後來又不行,
所以,
建議最好不要用Locate的指令! ~~~Delphi K.Top討論區站長~~~
[/quote]
謝謝…
我已經一個一個將有使用到locate的地方改成query的語法了…
但是…像我在查詢某個資料時,
要怎麼讓dbgrid裡的游標移到我所找到的那筆資料呢? 因為之前用locate就可以…
現在…唉…/_\
已經近乎完工的程式,又得再改了…
不過還好及時發現的早…><
|
領航天使
站長 ![]() ![]() ![]() ![]() ![]() ![]() 發表:12216 回覆:4186 積分:4084 註冊:2001-07-25 發送簡訊給我 |
引言: 我已經一個一個將有使用到locate的地方改成query的語法了… 但是…像我在查詢某個資料時, 要怎麼讓dbgrid裡的游標移到我所找到的那筆資料呢? 因為之前用locate就可以… 現在…唉…/_\ 已經近乎完工的程式,又得再改了… 不過還好及時發現的早…><
------
~~~Delphi K.Top討論區站長~~~ |
T.J.B
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言:1:看紅色部分 你在這邊因為把query給關掉了 所以會導致如果你一開始就找不到 程式會正常 但是 如果一但有找到資料後 再找下一筆往後的locate就會因為query被close而找不到了 所以你必須把close拿掉 應該就正常了 2:看藍色部分 如不把close拿掉 那就要加 open 的程式碼 ps:所以不是locate的問題 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2002/12/23 17:15:57 發表人 - T.J.B 於 2002/12/23 17:19:06引言: 你可以把locate 前後的程式碼post上來看看 天行健 君子當自強不息~~@.@以下是我的程式碼… if (Edit_MT_dbaQuery.text='') then messagedlg('查詢值不可為空! ',mterror,[mbok],0) else with DM_MT do begin open; IF Table_MT_DBA.Locate('DBA_ID',Edit_MT_dbaQuery.text,[]) THEN begin Close; showmessage('已查到管理者代碼為 ' edit_mt_dbaquery.Text ' 的記錄'); end else begin showmessage('查無此筆 ' Edit_MT_dbaQuery.text ' 管理員記錄'); Edit_MT_dbaQuery.SetFocus; end; bitbtn2Click(nil);//關閉form end; 就這樣…麻煩您幫我看一下囉…謝謝
------
天行健 君子當自強不息~~@.@ |
chih
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:48 回覆:1186 積分:639 註冊:2002-04-02 發送簡訊給我 |
|
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
miga
初階會員 ![]() ![]() 發表:61 回覆:92 積分:30 註冊:2002-08-27 發送簡訊給我 |
|
danny
版主 ![]() ![]() ![]() ![]() ![]() ![]() 發表:100 回覆:522 積分:595 註冊:2002-03-11 發送簡訊給我 |
引言: 嗯…我那個close是關掉我的form, 因為這個程式是另一個form在做查詢的, 當我查完時會關閉form, 不過我看了一下我的程式,好像是多此一舉, 故我也有聽T.J.B大哥的話,把他註解掉, 但是,LOCATE還是沒辦法偵測到我的資料…>< 我今天拿了我的程式給同學測,發覺在同學的電腦上, 用LOCATE跑起來是沒問題的… 怎麼辦呢…/_\ 問題到底出在那??請問您有檢查您和您同學 MySQL、OS、Delphi 的版本是相同的嗎 ? 或是改用 Table_MT_DBA.Locate('DBA_ID',Edit_MT_dbaQuery.text,[loCaseInsensitive]) 或 Table_MT_DBA.Locate('DBA_ID',Edit_MT_dbaQuery.text,[loPartialKey]) 看看 ... 記得要 uses DB 發表人 - danny 於 2002/12/24 10:51:02
------
將問題盡快結案也是一種禮貌! |
ooctiger
一般會員 ![]() ![]() 發表:25 回覆:46 積分:14 註冊:2002-07-08 發送簡訊給我 |
|
T.J.B
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 請各位幫幫忙 請問一下 Locate改寫成SQL方式要如何修改? 可否show出更改前,後的程式碼做參考 另外如果我在TQuery下一SQL要查詢符合條件 的資料筆數,在 edit1.text show出資料筆數, 要如何做.問題一 舉例 如下 用LOCATE (修改前) if DM_MT.Table_MT_dba.locate('dba_id',Edit_MT_DBAid.text,[])then begin showmessage('管理員代碼 ' Edit_MT_DBAid.text ' 重覆!!請重新輸入!'); edit_mt_dbaid.SetFocus; end用SQL (修改後) With DM_MT.Table_MT_dba do begin close; sql.clear; sql.add('select count(*) value from xxx where dba_id = ''' Edit_MT_DBAid.text ''' '); prepare; open; if not (isempty) then begin showmessage('管理員代碼 ' Edit_MT_DBAid.text ' 重覆!!請重新輸入!'); edit_mt_dbaid.SetFocus; end end;問題二 接上題的SQL語法 EDIT1.TEXT:= DM_MT.Table_MT_dba.FIELDBYNAME('value').asstring;ps:DM_MT.Table_MT_dba 這裡的DM_MT應該是放Table_MT_dba 的地方 如果Table_MT_dba 是放在該form就不用加DM_MT的程式碼 天行健 君子當自強不息~~@.@ 發表人 - T.J.B 於 2002/12/24 16:02:37 發表人 - T.J.B 於 2002/12/24 16:07:56
------
天行健 君子當自強不息~~@.@ |
Wesly
中階會員 ![]() ![]() ![]() 發表:14 回覆:103 積分:53 註冊:2002-05-31 發送簡訊給我 |
請妳檢查妳的硬碟容量是否足夠及是否運作正常(根據經驗最好在400MB以上), 或是妳的DataSet是否以經完全由後端下載至前端?
在我個人認為Delphi在執行Locate或Lookup都是在前端作業, 是故與前端暫存區資料完整性有關, 應該與後端什麼資料庫無關, 當 DBGrid 開啟時並沒有將資料全部下載完畢, 當啟動Locat機制時, 會由後端下載至前端, 可由SQL Monitor去監控, 是否在下載時存至前端時發生了什麼問題, 是必須去探討的.
提供個人經驗供參考.
|
davidwu1217
一般會員 ![]() ![]() 發表:0 回覆:2 積分:0 註冊:2002-12-26 發送簡訊給我 |
|
T.J.B
版主 ![]() ![]() ![]() ![]() ![]() 發表:29 回覆:532 積分:497 註冊:2002-08-14 發送簡訊給我 |
引言: 看了各位大大的留言....發現跟小弟所用的方式有點出入耶^^" 在此提供小弟locate的用法... if DM.AA48.Locate('AA48_C',VarArrayOf([AA48.Text]), [loPartialKey]) then 不同之處在於-->VarArrayOf([AA48.Text]) 不知是小弟愚知還是....@@ 小弟都是這樣用滴^^ 希望對大家有幫助...VarArrayOf 是用在多個欄位查詢用 當然用在一個欄位查詢亦可 天行健 君子當自強不息~~@.@
------
天行健 君子當自強不息~~@.@ |
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |