第七章公用副程式
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 回目錄
第七章公用副程式
本章列示一些 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
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
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
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
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
Return ""
End Try End Function
↑H
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
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
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
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
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
End If End If
tblReader.Close() Return key1
Catch ex As Exception MsgBox(ex.Message) Return ""
End Try End Function
↑H
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Catch ex As Exception MsgBox(ex.Message)
End Try End Sub
↑H
課後習題
1. 公用副程式之主要用途為何?
2. 如何搜尋指定鍵值之紀錄?詳述程式設計要領。
3. 詳述系統內變數傳遞的方法。
4. 何謂傳值法?何謂傳參考法?有何異同處?
5. 如何宣告一個結構體變數?
↑H 回目錄