“收取金額,退還金額信息查詢”窗體出現的一些問題
在做收取金額,退還金額信息查詢這兩個窗體時,出現了兩個大問題,一個是查找一個時間範圍內的所有列,一個是在導出excel表時提示“對象不支持該屬性或方法”,這兩個問題困擾了我很長時間。
首先,說一下第一個問題,在選擇時間控件時 ,我一開始是這樣選擇的
可是上麵的月份是英文的,很顯然不實用,也不對,後來又從網上查,說讓用Microsoft 日曆控件11.0,可是我的“工程”-“部件”中沒有,網上說在office中添加一下就可以,可是我還是沒找到,鬱悶至極,我問了同學,
選擇下麵的部件Monthview
在對一個時間段內的數據進行搜索並加載到MSHFlexGrid時,我不知道用什麼樣的sql語句去取一個範圍內的值,並且是將兩個combobox的值賦予數據庫進行查詢,還有一個關鍵的問題就是數據類型不一致,無法進行隱式轉換,重複提示“無法將varchar數據類型“2013/9/20”轉換為int類型”,在百度了好多次以後,終於算是找到方法了
Private Subcmdinquire_Click()
Dim mrc As ADODB.Recordset
Dim txtsql As String
Dim msgtext As String
txtsql ="select * from recharge_info where date between '" & Format(ComboStartDate.Text,"yyyy-mm-dd") &"' And '"& Format(ComboEndDate.Text, "yyyy-mm-dd") &"'"
Set mrc = executeSQL(txtsql, msgtext)
If mrc.EOF Then
MsgBox "沒有記錄", vbOKOnly +vbExclamation, "警告"
Exit Sub
Else
With myFlexGrid
.Rows = 1
.CellAlignment = 4
.TextMatrix(0, 0) = "卡號"
.TextMatrix(0, 1) ="充值金額"
.TextMatrix(0, 2) ="充值日期"
.TextMatrix(0, 3) ="充值時間"
.TextMatrix(0, 4) ="充值教師"
.TextMatrix(0, 5) ="結賬狀態"
Do While Not mrc.EOF
.Rows = .Rows + 1
.CellAlignment = 4
.TextMatrix(.Rows - 1, 0) =mrc.Fields("cardno")
.TextMatrix(.Rows - 1, 1) =mrc.Fields("addmoney")
.TextMatrix(.Rows - 1, 2) =mrc.Fields("date")
.TextMatrix(.Rows - 1, 3) =mrc.Fields("time")
.TextMatrix(.Rows - 1, 4) =mrc.Fields("userid")
.TextMatrix(.Rows - 1, 5) =mrc.Fields("status")
mrc.MoveNext
Loop
End With
End If
End Sub
這裏的format真的很重要,可以避免數據類型不匹配造成的困擾,尤其是時間的比較,還有就是注意單引號,雙引號的應用,以及sql語句查詢一定範圍內列的方法
第二個問題就是在導出數據時,因為之前以及有其他窗體導出excel成功了,在與依他窗體對比完代碼後,我發現代碼沒有出入,而且在模塊中編寫的導出Excel的函數也是正確的,於是查了又查,點了又點,將窗體上的控件刪了重新加,才發現,原來是MSHFlexGrid與monthview的位置前後的問題,如果將monthview控件放在MSHFlexGrid的時候,就是彈出“對象不支持該屬性或方法
”的錯誤提示,可是怎麼樣才能使窗體運行時既不會讓MSHFlexGrid擋住,又能將monthview正常顯示呢?做法如下:
然後再編寫一段代碼:
其中標注部分表示MSHFlexGrid控件位置總是滯後,這樣就可以正常導出excel了
在發現問題和解決問題的過程中,其實最重要的是用好網絡,多嚐試,不管對錯,都要試一試,還有就是斷點調試真的很好用,當需要多次調用一個功能時,可以想辦法將其寫成函數、過程,利用call將其調用出來就ok了,隻要耐下心來去想,去查,都能做出來的。
最後更新:2017-04-03 15:21:51