zhangxh422
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:3 回覆:8 積分:2 註冊:2006-08-29
發送簡訊給我
|
請各位高手幫我看看這究竟是怎麼回事,我一直沒有找到問題在哪里,我用的是Access數据库,工具是 delphi 6,問題如下,
我的代碼如下:
with qry do begin close; sql.clear; sql.add('select * from sn_infor '); sql.add(' where ( mid(end_sn,7,5) >= mid(:END_SN,7,5) ' ' and mid(start_sn,7,5) <= mid(:END_SN,7,5) ) ' ); sql.add(' or ( mid(end_sn,7,5) >= mid(:START_SN,7,5) ' ); sql.add(' and mid(start_sn,7,5) <= mid(:START_SN,7,5)) ) ' ); sql.add(' and mid(start_sn,1,6 ) = mid(:START_SN,1,6 )'); sql.add(' and len(start_sn) = len(:START_SN)'); sql.add(' and mo_number <> ''' field4 ''' '); {sql.add('and rownum=1 ');} prepared; Parameters.ParamByName('START_SN').Value:=edit1.Text; Parameters.ParamByName('END_SN').Value:=edit2.Text; open;
我在查詢中只有' where ( mid(end_sn,7,5) >= mid(:END_SN,7,5) ' 這一句時,一切是正常的,而當條件增加到兩條以上時,程序就會報錯,報錯信息是:' 提供不一致或不完全的資訊導致參數物件不適當的被拒 ' ,我不明白這是怎麼回事,是不是Access有另外的要求呢?
|
pedro
尊榮會員
![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif) ![](./myimg/board/mystar.gif)
![](images/icon_photo_none.gif) 發表:152 回覆:1187 積分:892 註冊:2002-06-12
發送簡訊給我
|
因為組Sql語法裡有多個:START_SN參數,當ParamByName('START_SN').Value並沒有實際帶到那麼多,
所以用Sql.Add('select .....where fieldname between' QuotedStr(Start_Sn) ' and ' QuotedStr(End_Sn) '.....'
試著用Delphi變數去組語法
|
zhangxh422
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:3 回覆:8 積分:2 註冊:2006-08-29
發送簡訊給我
|
你好,pedro756901
你可能誤解我代碼的意思了,代碼中' start_sn' 與' end_sn' 是指我設計的表格中的欄位名,而' :start_sn',' end_sn'才是變量參數,我的意思是要查找輸入的參數中的一個子串是否在資料庫中的' start_sn' 與' end_sn' 之間.
===================引 用 文 章===================
因為組Sql語法裡有多個:START_SN參數,當ParamByName('START_SN').Value並沒有實際帶到那麼多,
所以用Sql.Add('select .....where fieldname between' QuotedStr(Start_Sn) ' and ' QuotedStr(End_Sn) '.....'
試著用Delphi變數去組語法
|
menfox
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:1 回覆:10 積分:2 註冊:2006-08-14
發送簡訊給我
|
1.你的 SQL 中實際上共有 '六個' 參數須傳入, 所以你必須用 六條
Parameters.ParamByName('START_SN').Value:=edit1.Text; Parameters.ParamByName('END_SN').Value:=edit2.Text; ....
2.不要用相同的 Parameters name (即 sql.add(' where ( mid(end_sn,7,5) >= mid(:END_SN,7,5) ) , 即使你要傳進去的條件值是相同的!
with qry do begin close; sql.clear; sql.add('select * from sn_infor '); sql.add(' where ( mid(end_sn,7,5) >= mid(:END_SN1,7,5) ' ' and mid(start_sn,7,5) <= mid(:END_SN2,7,5) ) ' ); sql.add(' or ( mid(end_sn,7,5) >= mid(:START_SN1,7,5) ' ); sql.add(' and mid(start_sn,7,5) <= mid(:START_SN2,7,5)) ) ' ); sql.add(' and mid(start_sn,1,6 ) = mid(:START_SN3,1,6 )'); sql.add(' and len(start_sn) = len(:START_SN4)'); sql.add(' and mo_number <> ''' field4 ''' '); {sql.add('and rownum=1 ');} prepared; Parameters.ParamByName('END_SN1').Value:=edit2.Text; Parameters.ParamByName('END_SN2').Value:=edit2.Text; Parameters.ParamByName('START_SN1').Value:=edit1.Text; Parameters.ParamByName('START_SN2').Value:=edit1.Text; Parameters.ParamByName('START_SN3').Value:=edit1.Text; Parameters.ParamByName('START_SN4').Value:=edit1.Text; open;
|
------ Hi! It's Menfox!
|
zhangxh422
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:3 回覆:8 積分:2 註冊:2006-08-29
發送簡訊給我
|
你好,menfox:
按你的方法做是可以,我已經解決了,但這樣唯一的缺陷就是當同一個參數引用多次時就會要用多條語句,在這種情況下不太適用,上面的那樣我在oracle中已經實現了,在用Access時就出現這樣的問題,不知你有沒有好的方法呢?
謝謝你哦!^_^
|
menfox
一般會員
![](./myimg/board/mystar_empty.gif)
![](images/icon_photo_none.gif) 發表:1 回覆:10 積分:2 註冊:2006-08-14
發送簡訊給我
|
好像沒有更好的方法了!![](/images/msn/007.gif)
------ Hi! It's Menfox!
|