1. 程式人生 > >vb 如何在對Access建立新欄位(列)的過程中自動新增該列的預設值

vb 如何在對Access建立新欄位(列)的過程中自動新增該列的預設值

搞了一下午,終於解決了,希望能幫助到他人。

'通用-宣告
Dim conn As New ADODB.Connection
Dim rs As New ADODB.Recordset
Dim sql$
'連線Data.mdb資料庫
Public Sub openConn()
   conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & App.Path & "\Data.mdb;Uid=;Pwd=123;"
End Sub
'關閉Data.mdb資料庫
Public Sub closeConn()
   conn.Close
End Sub
'查詢Data.mdb資料庫是否存在某列欄位,若不存在則新增
Sub AddColIfNotExists(tblName As String, colName As String, colType As String, DefaultValue As String)
    Dim cn As New ADODB.Connection
    Dim rs As New ADODB.Recordset
    Dim cnStr As String, sqlStr As String
    Dim i As Integer, addCol As Boolean
    '此示例ACCESS資料庫放在本VB程式同一目錄下
    cnStr = "driver={Microsoft Access Driver (*.mdb)};dbq="
    cnStr = cnStr & App.Path & "\Data.mdb;Uid=;Pwd=123;"
    cn.Open cnStr
    rs.CursorLocation = adUseClient
    sqlStr = "select * from " & tblName & " where false;"
    rs.Open sqlStr, cn, adOpenStatic, adLockReadOnly
    addCol = True
    For i = 0 To (rs.Fields.Count - 1)
        If rs(i).Name = colName Then
            addCol = False
            Exit For
        End If
    Next i
    rs.Close
    Set rs = Nothing
    If addCol = True Then  '欄位不存在才新增
        sqlStr = "alter table " & tblName
        sqlStr = sqlStr & " add column " & colName
        sqlStr = sqlStr & " " & colType & ";"
        cn.Execute sqlStr
        '設定預設值
        Call AddDefaultValue(tblName, colName, DefaultValue)
    End If
    cn.Close
    Set cn = Nothing
End Sub
'查詢Data.mdb資料庫是否存在某列欄位,若不存在則新增
Sub AddDefaultValue(tblName As String, colName As String, DefaultExt As String)
   '開啟資料庫
   Call openConn
   Dim AddValue As String
   AddValue = "select * from " & tblName
   rs.Open AddValue, conn, adOpenKeyset, adLockOptimistic
   Set rs = Nothing
   sql = "update " & tblName & " set " & colName & " = " & "'" & DefaultExt & "'"
   rs.Open sql, conn
   '關閉資料庫
   Call closeConn
End Sub
'新增新列並設定該列預設值
Private Sub Command1_Click()
  '(表名,新增欄位,型別,預設值)
  Call AddColIfNotExists("學生資訊表", "新增的新欄位", "varchar(50)", "abc")
End Sub