• 沒有找到結果。

第七章公用副程式

N/A
N/A
Protected

Academic year: 2021

Share "第七章公用副程式"

Copied!
29
0
0

加載中.... (立即查看全文)

全文

(1)

第七章公用副程式

7.1 TableStruct(資料表結構體變數) 2

7.2 OpenCon(連線程序) 3

7.3 SetMysqlCharSet(設定中文介面) 4

7.4 UseWDB(切換資料庫) 5

7.5 GetDBlist(列舉資料庫明細) 6

7.6 MakeTableList(列舉資料表明細) 8

7.7 GetKeyValue(取得不重覆鍵值紀錄) 9

7.8 FindKeyValue(尋找鍵值紀錄) 11

7.9 FindPrimaryKey(尋找主鍵) 12

7.10 LockTable(資料表上鎖) 14

7.11 UnlockTable(資料表解鎖) 15

7.12 InsertNewRecord(新增紀錄) 16

7.13 UpdateNewRecord(更新紀錄) 19

7.14 DeleteKeyValue(刪除紀錄) 22

7.15 GetTableStructure(取得資料表結構) 23 回目錄

(2)

第七章公用副程式

本章列示一些 EasydoMySQL 使用到的公用副程式,讀者可將相關副程式加 到你自己的應用系統之模組程序內,這些副程式可供表單程序叫用。

7.1 TableStruct(

資料表結構體變數

用途:資料表結構體變數可用來儲存開啟的資料表或以 SQL 指令開啟的紀錄集 相關屬性,在新增、修改及刪除等資料處理工作,此結構變數將用於表單 與公用程序之資料傳遞工作。

Public Structure TableStruct

Dim fldName As String, 說明:欄名

Dim fldTitle As String, 說明:欄位抬頭(中文欄名)

Dim fldType As String, 說明:資料型泰 Dim fldLength As Integer, 說明:欄寬 Dim fldNull As Boolean, 說明:允許空值 Dim fldPrimary As Boolean, 說明:主鍵 Dim fldDefault As String, 說明:預設值 Dim fldEnum As String, 說明:列舉值 Dim fldEncrypt As Boolean, 說明:需要加密 Dim tblSource As String, 說明:參考資料表 Dim fldSource As String, 說明:參考欄 Dim fldLocation As Point, 說明:控制項位置 Dim fldSize As Size, 說明:控制項尺寸 Dim fldValue, 說明:介面存取資料 Dim fldExpress As String, 說明:運算式 Dim fldImeMode As String, 說明:輸入法 End Structure

↑H

(3)

7.2 OpenCon(

連線程序

用途:應用系統與 MySQL 連線。用戶登入 EasyDoMySQL 應用系統時,立即以 此程序與 MySQL 資料庫連線,在執行各項表單作業時,若系統偵測到斷 線狀況時,也可以叫用此程序來重新連線。

Public Sub openCon(ByVal dbStr As String) Dim str As String

Try

Dim opValue As Long

opValue = 1 + 2 + 8 + 32 + 16384 ' Normal Use

str = "DRIVER={MySQL ODBC " & DRV & " Driver};SERVER=" & HST & ";

DATABASE=" & dbStr & ";UID=" & USR & ";PASSWORD=" & PSW &

";Option= " & opValue

說明:DRV、HST、USR、PSW為系統變數,由登錄表單設定 myCon = New OdbcConnection(str)

If Not myCon.State = ConnectionState.Open Then myCon.Open() If myCon.State = ConnectionState.Open Then

Call SetMysqlCharSet(SysChar, myCon) 說明:設定中文介面

End If

Catch ex As Exception

MsgBox("無法連線..." & vbCrLf & ex.Message) End Try

End Sub

↑H

(4)

7.3 SetMysqlCharSet(

設定中文介面

用途:設定中文介面,包含主控端處理資料、伺服端回傳結果,以及連線狀態之 介面資訊。

Public Sub SetMysqlCharSet(ByVal charSET As String, ByVal strCon As OdbcConnection)

Try

Dim str As String

str = "Set character_set_client = " & charSET & ";"

說明:charSET為系統變數,由登錄表單設定 myCmd = New OdbcCommand(str, strCon) myCmd.ExecuteNonQuery()

str = "Set character_set_results= " & charSET & ";"

myCmd = New OdbcCommand(str, strCon) myCmd.ExecuteNonQuery()

str = "Set character_set_connection = " & charSET & ";"

myCmd = New OdbcCommand(str, strCon) myCmd.ExecuteNonQuery()

Catch ex As Exception MsgBox(ex.Message) End Try

End Sub

↑H

(5)

7.4 UseWDB(

切換資料庫

用途:切換資料庫。當用戶需要處理不同的資料庫時,就須以此程序來切換資料 庫。

Public Sub UseWDB(ByVal db As String) If db = "" Then Exit Sub

Try

Dim cmd As String cmd = "Use " & db

myCmd = New OdbcCommand(cmd, myCon) myCmd.ExecuteNonQuery()

Catch ex As Exception MsgBox(ex.Message) End Try

End Sub

↑H

(6)

7.5 GetDBlist(

列舉資料庫明細

用途:取得資料庫明細,回傳結果將作為有資料庫下拉方塊控制項之選項清單。

回傳結果:字串,資料庫名稱間必須以逗號間隔。

Public Function getDBlist() As String Try

Dim str As String

Dim daReader As OdbcDataReader

If USR <> "root" And USR <> "Admin" Then Return WDB

說明:USR及WDB為系統變數,由登錄表單設定 Exit Function

End If

str = "Use mysql"

myCmd = New OdbcCommand(str, myCon) myCmd.ExecuteNonQuery()

str = "Show Databases"

myCmd = New OdbcCommand(str, myCon) daReader = myCmd.ExecuteReader() str = ""

說明:逐筆取出資料庫名稱 Do While daReader.Read()

If daReader.Item(0).ToString <> "information_schema" Then If str = "" Then

str = daReader.Item(0).ToString Else

str = str & "," & daReader.Item(0).ToString End If

End If Loop

daReader.Close() Call UseWDB(WDB) Return str

Catch ex As Exception

MsgBox(ex.Message) ↑H

(7)

Return ""

End Try End Function

↑H

(8)

7.6 MakeTableList(

列舉資料表明細

用途:取得資料表明細,回傳結果將作為有資料表下拉方塊控制項之選項清單。

回傳結果:字串,資料表名稱間必須以逗號間隔。

Public Function makeTableList(ByVal db As String) As String Dim str As String

Try

str = "Use " & db

myCmd = New OdbcCommand(str, myCon) myCmd.ExecuteNonQuery()

Dim tblReader As OdbcDataReader If USR = "root" Or USR = "Admin" Then str = "Show Tables From " & db & ";"

說明:系統管理者可顯示所有資料表 Else

str = "Select WorkNo From UserRight Where Project='Table' And User='"

str = str & USR & "' And Enable=True"

說明:一般用戶只能顯示有被授權的資料表 End If

myCmd = New OdbcCommand(str, myCon) tblReader = myCmd.ExecuteReader

str = ""

說明:逐筆取出資料表名稱 While tblReader.Read

str = str & tblReader.Item(0).ToString & ","

End While

tblReader.Close()

If str <> "" Then str = Mid(str, 1, Len(str) - 1) Return str

Catch ex As Exception MsgBox(ex.Message) Return ""

End Try End Function

↑H

(9)

7.7 GetKeyValue(

取得不重覆鍵值紀錄

用途:取得指定欄位資料不重覆紀錄,回傳結果將作為有鍵值下拉方塊控制項之 選項清單。

回傳結果:字串,鍵值資料間以逗號間隔。

Public Function getKeyValue(ByVal sTbl As String, ByVal sKey As String) As String

回傳結果:布林值 If sKey Is Nothing Then Return ""

Exit Function End If

Dim tp As Integer

If sTbl = "" Or sKey = "" Then Return ""

Exit Function End If

Try

Dim str As String

Dim tblReader As OdbcDataReader If InStr(sTbl, "Select ") = 0 Then

str = "Select Distinct " & sKey & " From " & sTbl & " Order By " & sKey tp = 1,說明:表傳入資料表

Else

str = sTbl

tp = 2,說明:表傳入SQL指令 End If

myCmd = New OdbcCommand(str, myCon) tblReader = myCmd.ExecuteReader

str = ""

If tp = 1 Then

While tblReader.Read

str = str & tblReader.Item(0).ToString & ","

說明:將讀取資料串入回傳資料串

End While ↑H

(10)

If str <> "" Then str = Mid(str, 1, Len(str) - 1) Else

Dim vl

tblReader.Read()

vl = tblReader.Item(sKey) str = vl

While tblReader.Read

If tblReader.Item(sKey) <> vl Then

str = str & "," & tblReader.Item(0).ToString 說明:將讀取資料串入回傳資料串 vl = tblReader.Item(sKey)

End If End While

End If

tblReader.Close() keyValue = str Return str

Catch ex As Exception Return ""

End Try End Function

↑H

(11)

7.8 FindKeyValue(

尋找鍵值紀錄

用途:尋找鍵值是否存在。在新增、修改或刪除紀錄時,可用來檢查鍵值是否存 在。

回傳結果:布林值

Public Function FindKeyValue(ByVal sTbl As String, ByVal srtKey As String) As Boolean

If srtKey Is Nothing Then Return False

Exit Function End If

Try

Dim str As String

Dim tblReader As OdbcDataReader

str = "Select * From " & sTbl & " Where " & srtKey myCmd = New OdbcCommand(str, myCon)

tblReader = myCmd.ExecuteReader FindKeyValue = tblReader.Read() tblReader.Close()

Return FindKeyValue Catch ex As Exception MsgBox(ex.Message) Return False

End Try End Function

↑H

(12)

7.9 FindPrimaryKey(

尋找主鍵

用途:尋找資料表主鍵。開啟資料表後,可用此程序來設定資料表之主鍵。

回傳結果:字串,若為雙主鍵,則以逗號間隔兩個鍵值欄。

Public Function FindPrimaryKey(ByVal strTbl As String) As String Try

Dim strSQL As String, str As String

Dim key1 As String, key2 As String, fna As String Dim tblReader As OdbcDataReader

If strTbl = "" Then Return ""

Exit Function End If

strSQL = "Describe " & strTbl & ";"

說明:MySQL指令,可用來查閱資料表結構。

myCmd = New OdbcCommand(strSQL, myCon) tblReader = myCmd.ExecuteReader

key1 = ""

key2 = ""

While tblReader.Read

fna = tblReader.Item(0).ToString str = tblReader.Item(3).ToString

If InStr(str, "PRI") > 0 Then,說明:PRI代表鍵值欄。

If key1 = "" Then key1 = fna Else

If key2 = "" Then key2 = fna Exit While End If End If End If End While

If key1 <> "" Then If key2 <> "" Then

key1 = key1 & "," & key2 ↑H

(13)

End If End If

tblReader.Close() Return key1

Catch ex As Exception MsgBox(ex.Message) Return ""

End Try End Function

↑H

(14)

7.10 LockTable(資料表上鎖)

用途:資料表上鎖,當需要異動紀錄時,資料表需要上鎖。

說明:傳入資料表和鎖表方式兩個引數。

回傳結果:布林值

Public Function LockTable(ByVal stbl As String, ByVal stp As String) As Boolean Try

Dim cmd As String

If stp = "" Or stp = "Write" Then

cmd = "LOCK TABLE " & stbl & " Write;"

Else

cmd = "LOCK TABLE " & stbl & " Read;"

End If

myCmd = New OdbcCommand(cmd, myCon) myCmd.ExecuteNonQuery()

Return True

Catch ex As Exception Return False

End Try End Function

↑H

(15)

7.11 UnlockTable(

資料表解鎖

用途:資料表解鎖,異動紀錄後,必須將資料表解鎖。

Public Sub UnlockTable() Try

Dim cmd As String

cmd = "Unlock TABLES;"

myCmd = New OdbcCommand(cmd, myCon) myCmd.ExecuteNonQuery()

Catch ex As Exception End Try

End Sub

↑H

(16)

7.12 InsertNewRecord(新增紀錄)

用途:新增紀錄。

說明:新增紀錄表單輸入之資料可先存放在公用資料表結構體變數 tblStruct /tblStruct2 內,然後叫用此函數將資料存入資料庫。引數 id 值 1 表主資 料表(使用公用變數 wkTBL),值 2 表子表(使用公用變數 wkTBL2)。

引數 kv1 表第一過濾條件,kv2 表第二過濾條件。

回傳結果:布林值

Public Function InsertNewRecord(ByVal id As Integer, ByVal kv1 As String, ByVal kv2 As String) As Boolean

Try

Dim str As String, fn As Integer, i As Integer, ftp As String = ""

Dim vl

If id = 1 Then

fn = UBound(tblStruct)

str = "Insert Into " & wkTBL & " (",說明:設定Insert Into指令 For i = 0 To fn,說明:此迴圈用於組合欄名

ftp = tblStruct(i).fldType

If tblStruct(i).fldEncrypt = False Then

If ftp <> "Stamp" And ftp <> "BLOB" And ftp <> "Binary" Then str = str & tblStruct(i).fldName & ","

End If Else

str = str & tblStruct(i).fldName & ","

End If Next

If Mid(str, Len(str), 1) = "," Then str = (Mid(str, 1, Len(str) - 1)) str = str & ") Values ("

For i = 0 To fn

說明:此迴圈用於取出欄值,並依型態別來組合成SQL指令 ftp = tblStruct(i).fldType

If tblStruct(i).fldEncrypt = False Then

If ftp <> "Stamp" And ftp <> "Binary" And ftp <> "BLOB" Then str = str & tblStruct(i).fldValue & ","

End If

Else ↑H

(17)

If tblEncKey1 <> "" Then vl = tblStruct(i).fldValue

vl = SysEncrypt & "(" & vl & ",'" & tblEncKey1 & "')"

str = str & vl & ","

Else

str = str & tblStruct(i).fldValue & ","

End If End If Next

If Mid(str, Len(str), 1) = "," Then str = (Mid(str, 1, Len(str) - 1)) str = str & ")"

Else

說明:以下為子表程序 fn = UBound(tblStruct2)

str = "Insert Into " & wkTBL2 & " ("

For i = 0 To fn

ftp = tblStruct2(i).fldType

If tblStruct2(i).fldEncrypt = False Then

If ftp <> "Stamp" And ftp <> "Binary" And ftp <> "BLOB" Then str = str & tblStruct2(i).fldName & ","

End If Else

str = str & tblStruct2(i).fldName & ","

End If Next

If Mid(str, Len(str), 1) = "," Then str = (Mid(str, 1, Len(str) - 1)) str = str & ") Values ("

For i = 0 To fn

ftp = tblStruct2(i).fldType

If tblStruct2(i).fldEncrypt = False Then

If ftp <> "Stamp" And ftp <> "Binary" And ftp <> "BLOB" Then str = str & tblStruct2(i).fldValue & ","

End If Else

If tblEncKey2 <> "" Then vl = tblStruct2(i).fldValue

vl = SysEncrypt & "(" & vl & ",'" & tblEncKey2 & "')" ↑H

(18)

str = str & vl & ","

Else

str = str & tblStruct2(i).fldValue & ","

End If End If Next

If Mid(str, Len(str), 1) = "," Then str = (Mid(str, 1, Len(str) - 1)) str = str & ")"

End If

If id = 1 Then

If LockTable(wkTBL, "Write") = False Then Return False

Exit Function End If

Else

If LockTable(wkTBL2, "Write") = False Then Return False

Exit Function End If

End If

myCmd = New OdbcCommand(str, myCon) myCmd.ExecuteNonQuery()

Call UnlockTable() Return True

Catch ex As Exception MsgBox(ex.Message) Return False

End Try End Function

↑H

(19)

7.13 UpdateNewRecord(更新紀錄)

用途:更新紀錄

說明:更新紀錄表單修改之資料可先存放在公用資料表結構體變數 tblStruct /tblStruct2 內,然後叫用此函數將資料存入資料庫。引數 id 值 1 表主資 料表(使用公用變數 wkTBL),值 2 表子表(使用公用變數 wkTBL2)。

引數 kv1 表第一過濾條件,kv2 表第二過濾條件。

回傳結果:布林值

Public Function UpdateNewRecord(ByVal id As Integer, ByVal kv1 As String, ByVal kv2 As String) As Boolean

Try

Dim str As String, fn As Integer, i As Integer, ftp As String = ""

Dim vl If id = 1 Then

fn = UBound(tblStruct)

str = "Update " & wkTBL & " Set "

說明:設定 Update 指令 For i = 0 To fn

說明:此迴圈用於取出欄值,並依型態別來組合成SQL指令 ftp = tblStruct(i).fldType

vl = tblStruct(i).fldValue

If tblStruct(i).fldEncrypt = False Then

If ftp <> "Stamp" And ftp <> "BLOB" And ftp <> "Binary" Then str = str & tblStruct(i).fldName & "=" & vl & ","

End If Else

If tblEncKey1 <> "" Then

vl = SysEncrypt & "(" & vl & ",'" & tblEncKey1 & "')"

str = str & tblStruct(i).fldName & "=" & vl & ","

Else

str = str & tblStruct(i).fldName & "=" & vl & ","

End If End If Next

If Mid(str, Len(str), 1) = "," Then str = (Mid(str, 1, Len(str) - 1))

If keyField1 <> "" Then ↑H

(20)

str = str & " Where " & kv1

If keyField2 <> "" Then str = str & " And " & kv2

說明:keyField1和keyField2為公用變數,表主資料表之鍵值欄 End If

Else

說明:以下為子表程序 fn = UBound(tblStruct2)

str = "Update " & wkTBL2 & " Set "

For i = 0 To fn

ftp = tblStruct2(i).fldType vl = tblStruct2(i).fldValue

If tblStruct2(i).fldEncrypt = False Then

If ftp <> "Stamp" And ftp <> "BLOB" And ftp <> "Binary" Then str = str & tblStruct2(i).fldName & "=" & vl & ","

End If Else

If tblEncKey2 <> "" Then

vl = SysEncrypt & "(" & vl & ",'" & tblEncKey2 & "')"

str = str & tblStruct2(i).fldName & "=" & vl & ","

Else

str = str & tblStruct2(i).fldNam & "=" & vl & ","

End If End If Next

If Mid(str, Len(str), 1) = "," Then str = (Mid(str, 1, Len(str) - 1)) If ckeyField1 <> "" Then

str = str & " Where " & kv1

If ckeyField2 <> "" Then str = str & " And " & kv2

說明:ckeyField1和ckeyField2為公用變數,表子資料表之鍵值欄 End If

End If

If id = 1 Then

If LockTable(wkTBL, "Write") = False Then Return False

Exit Function End If

Else ↑H

(21)

If LockTable(wkTBL2, "Write") = False Then 說明:上鎖失敗則直接返回

Return False Exit Function End If

End If

說明:執行新增或更新SQL指令

myCmd = New OdbcCommand(str, myCon) myCmd.ExecuteNonQuery()

說明:資料表解鎖 Call UnlockTable() Return True

Catch ex As Exception MsgBox(ex.Message) Return False

End Try End Function

↑H

(22)

7.14 DeleteKeyValue(刪除紀錄)

用途:依指定鍵值刪除紀錄。

說明:傳入資料表和過濾條件兩個引數。

回傳結果:布林值

Public Function DeleteKeyValue(ByVal sTbl As String, ByVal srtKey As String) As Boolean

If srtKey Is Nothing Then Return False

Exit Function End If

Try

If LockTable(sTbl, "Write") = False Then 說明:上鎖失敗則直接返回

Return False Exit Function End If

Dim str As String

str = "Delete From " & sTbl & " Where " & srtKey 說明:設定 Delete SQL指令

myCmd = New OdbcCommand(str, myCon) myCmd.ExecuteNonQuery()

說明:資料表解鎖 Call UnlockTable() Return True

Catch ex As Exception MsgBox(ex.Message) Return False

End Try End Function

↑H

(23)

7.15 GetTableStructure(取得資料表結構)

用途:設定資料表結構體變數內容。

Public Sub getTableStructure(ByVal strTBL As String, ByVal id As Integer) Try

'*** id=0 不設Primary Field, 1 : 主鍵, 2 : 子鍵

Dim strSQL As String, str As String, fl As Integer, sl As Integer, ml As Integer, ei As Integer

Dim i As Integer = 0, fln As Integer Dim key1 As String, key2 As String Dim tblSTR() As TableStruct Dim tblReader As OdbcDataReader Dim enVL()

Dim ln As Integer

If strTBL = "" Then Exit Sub

strSQL = "Describe " & strTBL & ";"

myCmd = New OdbcCommand(strSQL, myCon) tblReader = myCmd.ExecuteReader

說明:重設變數值 key1 = ""

key2 = ""

If id = 1 Then keyField1 = ""

keyField2 = ""

tblEncKey1 = ""

wkTBL = strTBL Else

If id = 2 Then ckeyField1 = ""

ckeyField2 = ""

tblEncKey2 = ""

wkTBL2 = strTBL End If

End If

說明:逐筆讀取介面設定值並轉入結構體變數

While tblReader.Read ↑H

(24)

ReDim Preserve tblSTR(i)

tblSTR(i).fldName = tblReader.Item(0).ToString tblSTR(i).fldTitle = tblSTR(i).fldName

tblSTR(i).fldLength = 10 tblSTR(i).fldNull = True tblSTR(i).fldPrimary = False tblSTR(i).fldDefault = ""

tblSTR(i).fldEnum = ""

str = LCase(tblReader.Item(1).ToString) ln = 0

說明:以下程式依欄位型態來設值

If InStr(str, "int") > 0 Then tblSTR(i).fldType = "Numeric"

If InStr(str, "decimal") > 0 Then tblSTR(i).fldType = "Numeric"

ln = 2 End If

If InStr(str, "float") > 0 Then tblSTR(i).fldType = "Numeric"

ln = 2 End If

If InStr(str, "double") > 0 Then tblSTR(i).fldType = "Numeric"

ln = 2 End If

If InStr(str, "real") > 0 Then tblSTR(i).fldType = "Numeric"

ln = 2 End If

If InStr(str, "tinyint(1)") > 0 Then tblSTR(i).fldType = "Boolean"

If InStr(str, "char") > 0 Or InStr(str, "var") > 0 Then If InStr(str, "varbinary") > 0 Then

tblSTR(i).fldType = "Binary"

Else

tblSTR(i).fldType = "String"

End If

fl = 0 ↑H

(25)

sl = 0

If InStr(str, "(") > 0 Then fl = InStr(str, "(") sl = InStr(str, ")")

tblSTR(i).fldLength = Val(Mid(str, fl + 1, (sl - fl - 1))) + ln End If

End If

If InStr(str, "enum") > 0 Then tblSTR(i).fldType = "Enum"

tblSTR(i).fldLength = 10 fl = InStr(str, "(")

sl = InStr(str, ")")

tblSTR(i).fldEnum = Mid(str, fl + 1, sl - fl - 1) enVL = Split(tblSTR(i).fldEnum, ",")

ml = 0

For ei = 0 To UBound(enVL)

If LenUstr(enVL(ei)) > ml Then ml = LenUstr(enVL(ei)) Next

tblSTR(i).fldLength = ml End If

If InStr(str, "date") > 0 Then tblSTR(i).fldType = "Date"

If InStr(str, "timestamp") > 0 Then tblSTR(i).fldType = "Stamp"

tblSTR(i).fldLength = 24 End If

If InStr(str, "text") > 0 Then tblSTR(i).fldType = "Text"

If InStr(str, "blob") > 0 Then tblSTR(i).fldType = "Blob"

str = tblReader.Item(2).ToString If str = "No" Then

tblSTR(i).fldNull = False End If

str = tblReader.Item(3).ToString 說明:檢查是否為主鍵欄 If InStr(str, "PRI") > 0 Then tblSTR(i).fldPrimary = True

If key1 = "" Then ↑H

(26)

key1 = tblSTR(i).fldName Else

If key2 = "" Then

key2 = tblSTR(i).fldName End If

End If End If

If tblSTR(i).fldType = "Stamp" Or tblSTR(i).fldType = "Date" Then tblSTR(i).fldDefault = ""

Else

tblSTR(i).fldDefault = tblReader.Item(4).ToString End If

If id = 1 Then

ReDim Preserve tblStruct(i) tblStruct(i) = tblSTR(i) Else

ReDim Preserve tblStruct2(i) tblStruct2(i) = tblSTR(i) End If

i = i + 1 End While

tblReader.Close() fln = i - 1

If id = 1 Then keyField1 = key1 keyField2 = key2 Else

If id = 2 Then

ckeyField1 = key1 ckeyField2 = key2 End If

End If

If isMyTable(WDB, "TableDef") = True Then

Call getTableDef(strTBL),說明:取得中文介面屬性 If Not tblDEF Is Nothing Then

EncTBL1 = False

If id = 1 Then ↑H

(27)

For i = 0 To UBound(tblStruct) For id = 0 To UBound(tblDEF)

If tblDEF(id).fldName = tblStruct(i).fldName Then If tblDEF(id).fldTitle <> "" Then tblStruct(i).fldTitle =

tblDEF(id).fldTitle,說明:欄位抬頭

If tblDEF(id).fldDefault <> "" Then tblStruct(i).fldDefault = tblDEF(id).fldDefault,說明:介面預設值

tblStruct(i).fldImeMode =tblDEF(id).fldImeMode,說明:輸入法 If tblDEF(id).fldEncrypt = True Then EncTBL1 = True

說明:檢查是否需要加密

tblStruct(i).tblSource = tblDEF(id).tblSource,說明:參考資料表 tblStruct(i).fldSource = tblDEF(id).fldSource,說明:參考欄位 Exit For

End If Next Next Else

說明:以下程序用於設定子表介面屬性 EncTBL2 = False

For i = 0 To UBound(tblStruct2) For id = 0 To UBound(tblDEF)

If tblDEF(id).fldName = tblStruct2(i).fldName Then If tblDEF(id).fldTitle <> "" Then tblStruct2(i).fldTitle =

tblDEF(id).fldTitle

If tblDEF(id).fldDefault <> "" Then tblStruct2(i).fldDefault = tblDEF(id).fldDefault

tblStruct2(i).fldImeMode = tblDEF(id).fldImeMode If tblDEF(id).fldEncrypt = True Then EncTBL2 = True tblStruct2(i).tblSource = tblDEF(id).tblSource

tblStruct2(i).fldSource = tblDEF(id).fldSource Exit For

End If Next Next End If End If

End If ↑H

(28)

Catch ex As Exception MsgBox(ex.Message)

End Try End Sub

↑H

(29)

課後習題

1. 公用副程式之主要用途為何?

2. 如何搜尋指定鍵值之紀錄?詳述程式設計要領。

3. 詳述系統內變數傳遞的方法。

4. 何謂傳值法?何謂傳參考法?有何異同處?

5. 如何宣告一個結構體變數?

↑H 回目錄

參考文獻

相關文件

第五章 多項式.

第六章

我們已經學過了一元一次方程式與二元一次方程式,在本章中,我們將學習一元二次

利用和角公式證明 sin2α=2sinαcosα

[r]

的機率分配 常態分配 標準常態 分配..

在現行的 99

[r]