畢設真是大坑爹嗷嗷嗷嗷!!!我要被它弄瘋了!!!!

求問各位大神們,怎么把string格式變為date格式并且只用年月匹配就可以查詢了。
具體是這樣的:
我有一個視窗里面最后要顯示內容的控制元件是dw1,連接的是dw_cx_grid
dw_cx_grid 里面已經設定了一個cxny的引數了,operator是like,欄位是"收支記錄表"."發生時間"(在表格里面它就是date型別)
視窗頁面是這樣的:

查詢的年月都是ddlb控制元件,年是ddlb_1,月是ddlb_2
我在查詢的click事件里面是這樣寫的:
dw_1.reset( )
dw_1.settransobject(sqlca)
string nian,yue
date cxny
nian =string(ddlb_1.text)
yue = string(ddlb_2.text)
cxny =date( string(nian+"/"+yue+"/"+"%"))
dw_1.retrieve(cxny)
if dw_1.retrieve(cxny)=0 then messagebox('提示','沒有滿足條件的記錄!')
end if
別的好像沒有問題,就是cxny的獲取不可以匹配啊……因為我的表格里面時間是到了日期的,可是我現在只需要年月匹配就可以查出來結果不可以,怎么查都是沒有記錄,我試過如果直接寫cxny=date("2013/12/3")就可以查得出來。
嗷嗷嗷嗷!!!!請允許最后再咆哮一下……我討厭畢設!!!!!
uj5u.com熱心網友回復:
你那里是有問題的~最好不要直接對時間引數進行retrieve,而是將時間格式為字串~
傳入字符型別進行retrieve~
uj5u.com熱心網友回復:
語法轉行出錯,你用下邊的語法肯定轉換不成功到你想要的值。
cxny =date( string(nian+"/"+yue+"/"+"%"))
把DW的引數直接定義成string型別的,
用這個不用轉換成date型別的試試。
cxny = string(nian+"/"+yue+"/"+"%")
dw_1.retrieve(cxny)
uj5u.com熱心網友回復:
這么簡單的問題,多看下幫助檔案就OK了uj5u.com熱心網友回復:
如果表格里面是字符型的是可以的,可是我之前想讓用戶輸入時間的時候方便點,所以用了日期型,然后設定了editmask的日期型別,難道我又要改一次回去……好想哭……
uj5u.com熱心網友回復:
你那里是有問題的~
最好不要直接對時間引數進行retrieve,而是將時間格式為字串~
傳入字符型別進行retrieve~
因為我的表格里面是時間格式的,如果用字符型的沒辦法查到。。。
好憂傷~而且我發現了新的問題…………
我用專案查找的時候怎么把它所有的專案都變成下拉串列供客戶選擇然后再獲取出來retrieve結果顯示到DW1里……
之前我用的下拉控制元件是自己寫的,客戶要增加什么專案我不知道啊……
我的專案有一個資料視窗dw_xmlx
然后我新建了一個dw_2在視窗里,我發現我還是沒有辦法連接啊!淚哭
uj5u.com熱心網友回復:
這么簡單的問題,多看下幫助檔案就OK了
簡單嗎…………大神求抱大腿!
幫助檔案是英文的……我英文不好嗷嗷嗷。
uj5u.com熱心網友回復:
你可以這么做,比較原來資料視窗的sql為select a, b from table where a like :as_ddd;
你可以把sql改為以下代碼
//如果你用oracle資料庫
select a, b from table where to_char(a, 'YYYY/MM') like :as_ddd;
//如果你用sqlserver
select a, b from table where convert(char(8), a, 112) like :as_ddd;
記著,資料視窗的引數由date改為string
程式的代碼用以下的代碼
dw_1.reset( )
dw_1.settransobject(sqlca)
string nian,yue
string cxny
nian =string(ddlb_1.text)
yue = string(ddlb_2.text)
cxny =string(nian+"/"+yue+"%")
dw_1.retrieve(cxny)
if dw_1.retrieve(cxny)=0 then messagebox('提示','沒有滿足條件的記錄!')
end if
uj5u.com熱心網友回復:
你可以這么做,比較原來資料視窗的sql為
select a, b from table where a like :as_ddd;
你可以把sql改為以下代碼
//如果你用oracle資料庫
select a, b from table where to_char(a, 'YYYY/MM') like :as_ddd;
//如果你用sqlserver
select a, b from table where convert(char(8), a, 112) like :as_ddd;
記著,資料視窗的引數由date改為string
程式的代碼用以下的代碼
dw_1.reset( )
dw_1.settransobject(sqlca)
string nian,yue
string cxny
nian =string(ddlb_1.text)
yue = string(ddlb_2.text)
cxny =string(nian+"/"+yue+"%")
dw_1.retrieve(cxny)
if dw_1.retrieve(cxny)=0 then messagebox('提示','沒有滿足條件的記錄!')
end if
謝謝大神~~~話說加你Q都沒反應的
昨天去見導師,導師給了我一個辦法,就是在DW里面加一個CXNY1和cxny2,兩個之間用and,然后就可以用這個代碼查出來了哈哈哈哈哈~~~ string nian1,yue1
date cxny1,cxny2
nian1 =string(ddlb_1.text)
yue1 = string(ddlb_2.text)
cxny1 =date( string(nian1+"/"+yue1+"/"+"1"))
cxny2 =date( string(nian1+"/"+yue1+"/"+"31"))
dw_1.retrieve(cxny1,'','','',cxny2)
if dw_1.retrieve(cxny1,'','','',cxny2)=0 then
messagebox('提示','沒有滿足條件的記錄!')
end if
uj5u.com熱心網友回復:
你資料的欄位型別是 datetime? 我習慣用 string型別 dw.setfilter 做個模糊查找吧。。。再把格式轉換一下 string(today(),'yyyy-mm-dd hh:mm:ss'))
uj5u.com熱心網友回復:
資料庫欄位型別是datetime的時候如果datawindow引數是string型別那么datawindow的SQL陳述句的where條件就用:
where convert(varchar(6),[發生時間],112)=:param
查詢事件寫dw_1.retrieve(ddlb_1.text+ddlb_2.text)
如果datawindow引數是date型別那么datawindow的SQL陳述句的where條件就用:
where convert(varchar(6),[發生時間],112)=convert(varchar(6),:param,112)
查詢事件寫dw_1.retrieve(date(ddlb_1.text+'/'+ddlb_2.text+'/1')
由于你在cxny =date( string(nian+"/"+yue+"/"+"%"))這個陳述句中拼出來的日期是類似‘2013/12/%’不是一個合法的日期所以無法轉換
uj5u.com熱心網友回復:
- -,SQL convert ORC TOCHAR查詢條件 直接 VARCHAR ,
uj5u.com熱心網友回復:
where year(收支日期)=:year1 and month(收支日期)=:month1uj5u.com熱心網友回復:
string nian,yuedate cxny
cxny =date( string(nian+"/"+yue+"/"+"%"))
2014/04/% 是日期型?
uj5u.com熱心網友回復:
不要用直接轉引數的方法。直接使用Dw_1.modify()方法,修改資料視窗語法即可。
例:
string ls_sql
ls_sql='你的sql陳述句'
dw_1.modify('DataWindow.Table.Select="'+ls_sql+'"')
dw_1.setTransObject(sqlca)
dw_1.retrieve()
這樣就行了,不能使用的原因有可能是win7默認格式的問題。xp和win7以上版本的默認系統日期格式是不一樣 的。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/48232.html
標籤:腳本語言
下一篇:pb crc16問題
