這章之後,就要開始進行一個會計軟體管理系統的習作,眼看多年來的願望就在幾頁之後,心裡很是激動,相對的,對這一章的問題,也特別重視。
這章倒數第二題,老師教導的代碼如下:
Dim myconnect As ADODB.Connection
Dim myres As ADODB.Recordset
Public Function 查询(sql As String)
Set myres = New ADODB.Recordset
myres.Open sql, myconnect
查询 = myres!aa
myres.Close
End Function
Private Sub UserForm_Initialize()
Dim mydata As String, i As Integer, mySQL As String
mydata = "C:\Documents and Settings\maymay\My Documents\第四章数据库.accdb"
Set myconnect = New ADODB.Connection
With myconnect
.Provider = "microsoft.ACE.oledb.12.0"
.Open mydata
End With
Set myres = New ADODB.Recordset
mySQL = "select * from 职工 order by 职工.姓名 ASC"
myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
With ListBox1
myres.MoveFirst
For i = 1 To myres.RecordCount
.AddItem myres.Fields(1)
myres.MoveNext
Next i
End With
ListBox1.MultiSelect = fmMultiSelectSingle
ListBox1.ListStyle = fmListStyleOption
End Sub
Private Sub ListBox1_Change()
Dim mySQL As String
'查询职工所属部门
mySQL = "select 部门.部门名称 as aa from 部门,职工 where 职工.姓名 ='" & ListBox1.Value & "'" _
& " and 职工.部门编号 = 部门.部门编号"
TextBox1.Value = 查询(mySQL)
'职工姓名显示
TextBox2.Value = ListBox1.Value
'职工性别显示
mySQL = "select 职工.性别 as aa from 职工 where 职工.姓名 = '" & ListBox1.Value & "'"
TextBox3.Value = 查询(mySQL)
'职工年龄显示
mySQL = "select 职工.年龄 as aa from 职工 where 职工.姓名 = '" & ListBox1.Value & "'"
TextBox4.Value = 查询(mySQL)
'职工工资月份显示
mySQL = "select 工资.月份 as aa from 工资 where 工资.姓名 = '" & ListBox1.Value & "'"
TextBox5.Value = 查询(mySQL)
'职工工资显示
mySQL = "select 工资.工资 as aa from 工资 where 工资.姓名 = '" & ListBox1.Value & "'"
TextBox6.Value = 查询(mySQL)
End Sub
Private Sub CommandButton1_Click()
End
End Sub
我對自定義函數不是很懂,所以在上面程式出錯的時候,我想,可能是函數寫錯,而對函數認識不深的我對函數有種莫名的畏怯感,正好可以趁這個機會下載一些關於函數的教程,協助自己對函數能有更深層的認識。
下載了一個三角型求面積的函數教程,非常簡單明了:
Function 三角形面積( di, gao)
三角形面積 = di * gao /2
End Function
實驗方式: 在EXCEL 的 工作表 上:
在A1填入數值(假設是三角形的底),在B1填入數值(假設是三角形的高), 然後在公式欄填上:
= 三角形面積(A1,B1)
如此我就看懂老師寫的程式中 MySQL 和 sql 兩者的關係:
1. 確定印刷廠沒有印錯,之外,
2. 也懂得以前讀過的形式參數與實參的意思。
但是,還是一直無法得到應用的效果。晚上睡覺我就想,除了用自定義函數之外,有沒有其他辦法?想了一個晚上,一早起來就迫不及待的上機實驗:
Dim mySQL As String
'查询职工所属部门
Set myres = New ADODB.Recordset
mySQL = "select 部门.部门名称 as aa from 部门,职工 where 职工.姓名 ='" & ListBox1.Value & " '" _
& " and 职工.部门编号=部门.部门编号"
myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
TextBox1.Value = myres!aa
'职工姓名显示
TextBox2.Value = ListBox1.Value
'职工性别显示
Set myres = New ADODB.Recordset
mySQL = "select 职工.性别 as aa from 职工 where 职工.姓名 = '" & ListBox1.Value & "'"
myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
TextBox3.Value = myres!aa
'职工年龄显示
Set myres = New ADODB.Recordset
mySQL = "select 职工.年龄 as aa from 职工 where 职工.姓名 = '" & ListBox1.Value & "'"
myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
TextBox4.Value = myres!aa
'职工工资月份显示
Set myres = New ADODB.Recordset
mySQL = "select 工资.月份 as aa from 工资 where 工资.姓名 = '" & ListBox1.Value & "'"
myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
TextBox5.Value = myres!aa
'职工工资显示
Set myres = New ADODB.Recordset
mySQL = "select 工资.工资 as aa from 工资 where 工资.姓名 = '" & ListBox1.Value & "'"
myres.Open mySQL, myconnect, adOpenKeyset, adLockOptimistic
TextBox6.Value = myres!aa
End Sub
以上是我自己寫的程式,效果跟老師教的一樣。當然,也不是一次就成功,我就一段一段試,出錯的情況如下:
1. 我把表名寫錯。(這種錯,真該打屁股。
)
2. 程式當中,沒有注意到分行之後要為關鍵字的前面留一個空格,如此才能讀出正確的英文程式語法。這個地方,印刷廠經常出錯。
3. 沒有留意到在語法中套用文本框變量值時,在单引号之后必须另外加上英文雙引號與&搭配,不是只有单引号就可以。
通過上面的修正,我得到應用的結果,此外,也比較懂得系統報錯時的報錯語句,以及我應該檢查的地方。由於我寫錯很多地方,所以不管是mySQL 還是sql都走不通,卡在一團迷霧當中, 外子看我兩眼發直的坐在沙發上想事情,就知道我在想辦法抓蟲。雖然我用來抓蟲的步驟看起來很笨拙,但,這是最科學的方法:
1. 檢查錯字,語法錯誤,或者表名,數據庫名,路徑名出錯;
2. 檢查印刷廠可能的出錯;
3. 用 On Error Resume Next語句逐行或逐段檢查;
4.上網查相關的知識點。
SO, I GOT IT !!
限會員,要發表迴響,請先登入












