網路城邦
上一篇 回創作列表 下一篇   字體:
昨晚睡覺時想的題目
2014/10/15 16:17:09瀏覽252|回應0|推薦7

這章之後,就要開始進行一個會計軟體管理系統的習作,眼看多年來的願望就在幾頁之後,心裡很是激動,相對的,對這一章的問題,也特別重視。

這章倒數第二題,老師教導的代碼如下:

 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 !!

( 知識學習科學百科 )
回應 推薦文章 列印 加入我的文摘
上一篇 回創作列表 下一篇

引用
引用網址:https://classic-blog.udn.com/article/trackback.jsp?uid=bonjour2007002&aid=18207478