程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Access數據庫 >> 關於Access數據庫 >> 如何在已有數據的情況下更改某列的數據類型為自動編號遞增

如何在已有數據的情況下更改某列的數據類型為自動編號遞增

編輯:關於Access數據庫

問題:
 如何在某字段已有數據的情況下更改該列的數據類型為“自動編號 遞增”

回答:
 Access JET DB MDB 數據庫中不允許將一個已經有值的字段的數據類型更改為“自動編號”類型,而且一個表只允許有一個自動編號字段。但是可以利用 JET DB MDB 數據庫的一個特點,就是添加( INSERT INTO )記錄時允許指定自動編號字段的值。具體內容請參考
    如何更改數據類型為“自動編號”“同步復制ID”的值?《查詢》

 操作如下:
首先,必須確認該字段中每一條記錄都已經賦值,而且不允許有重復,如果有重復,那麼取一個不重復的值來代替。如果有空值,那麼必須找一個新的不重復的值來更新該“空”。其次,必須將該字段的數據類型轉換為“數字-長整”,如果無法轉換,那麼一條一條去處理!
最後,新建立一個表(比如命名為:TEMP),其結構與需要更改字段類型的表(比如:tblName)的結構完全一致,當然,其中某個字段(比如:ID)已經是自動編號了。這時 TEMP 表沒有任何記錄,編程用 ADO 的 RECORDSET 循環整個 tblName 表,將所有數據一條一條 INSERT INTO 到 TEMP 表,然後刪除 tblName 表,重命名 temp 為 tblName 即可

本文示例代碼如下:

'按鍵盤 ALT + F11 轉到  VBA 編輯器界面,菜單 插入 模塊,然後將一下代碼 COPY 進去
'點擊鼠標左鍵,將光標停留在各個函數的名稱上按 F5 可以執行該函數
'===========================================================
' 過程及函數名:  CreateTempDate
' 版本號      :  1.0
' 說明        :  本函數作用:建立本文章需要的測試環境(表)
' 引用        :  --
' 輸入參數    :  --
' 輸出值      :  --
' 返回值      :  --
' 調用演示    :  --
' 最後修改日期:  2006-9-14 16:32:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E11DCE8F3
' 作者        :  cg1
' 網站        :  http://access911.net
' 電子郵件    :  [email protected]
'===========================================================

Function CreateTempDate()
'本函數作用:建立本文章需要的測試環境(表)

    Dim strSQL(6) As String
    Dim i As Long
    strSQL(0) = "drop table tblName"
    strSQL(1) = "drop table temp"
    strSQL(2) = "create table tblName (ID LONG,Name text(50),Address text(50))"
    strSQL(3) = "insert into tblName(ID,NAME,ADDRESS) VALUES(1,'王午','上海')"
    strSQL(4) = "insert into tblName(ID,NAME,ADDRESS) VALUES(3,'立嗣','上海')"
    strSQL(5) = "insert into tblName(ID,NAME,ADDRESS) VALUES(45,'蘇俄','上海')"
    strSQL(6) = "create table temp (ID AUTOINCREMENT(2,4),Name text(50),Address text(50),Primary KEY ([ID]))"
   
    On Error Resume Next
    For i = 0 To UBound(strSQL)
        CurrentProject.Connection.Execute strSQL(i)
        If Err <> 0 Then
            Debug.Print "語句 strSQL(" & CStr(i) & ") 運行出錯:" & Err.Description
            Err.Clear
        End If
    Next
   
End Function
'===========================================================
' 過程及函數名:  DoAlterTable
' 版本號      :  1.0
' 說明        :  本函數作用:利用 JET DB 的特性更改已有數據字段的數據類型為“自動編號”“遞增”
' 引用        :  --
' 輸入參數    :  --
' 輸出值      :  --
' 返回值      :  --
' 調用演示    :  --
' 最後修改日期:  2006-9-14 16:32:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E11DCE8F3
' 作者        :  cg1
' 網站        :  http://access911.net
' 電子郵件    :  [email protected]
'===========================================================

Function DoAlterTable()
'本函數作用:利用 JET DB 的特性更改已有數據字段的數據類型為“自動編號”“遞增”
    Dim strSQL As String
    strSQL = "insert into temp (ID,NAME,ADDRESS) SELECT id,name,address from tblName"
    CurrentProject.Connection.Execute strSQL
    '如果是純 Access 環境可以使用
    'DoCmd.Rename "新表名", acTable, "原表名"
    '來更改表名
    renameTableName "tblName", "tblName-" & Format(Now, "yyyymmddhhnnss")
    renameTableName "temp", "tblName"
End Function
'===========================================================
' 過程及函數名:  renameTableName
' 版本號      :  1.0
' 說明        :  本函數作用,更改某個用戶表的名稱
' 引用        :  ADOX
' 輸入參數    :  strOldName 文本,修改前的名稱
'                 strNewName 文本,修改後的表名稱
' 輸出值      :  --
' 返回值      :  Boolean 確定是否成功更名
' 調用演示    :  renameTableName "tblName", "tblName-" & Format(Now, "yyyymmddhhnnss")
' 最後修改日期:  2006-9-14 16:32:00
' 示例地址    :  http://access911.net/?kbid;72FABE1E11DCE8F3
' 作者        :  cg1
' 網站        :  http://access911.net
' 電子郵件    :  [email protected]
'===========================================================

Function renameTableName(strOldName As String, strNewName As String) As Boolean
'本函數作用,更改某個用戶表的名稱

    On Error Resume Next
    'Dim tbl As ADOX.Table              '在 Access 環境中可以這樣聲明
    'Dim cat As New ADOX.Catalog        '在 Access 環境中可以這樣聲明
    Dim tbl
    Dim cat
   
    Set tbl = CreateObject("adox.table")
    Set cat = CreateObject("adox.catalog")
    Set cat.ActiveConnection = CurrentProject.Connection
   
    '上面這句中 CurrentProject.Connection 在VB中要更改為已經open的connection對象
    For Each tbl In cat.Tables
        If tbl.Name = strOldName Then tbl.Name = strNewName
    Next
    If Err.Number <> 0 Then
        renameTableName = False
    Else
        renameTableName = True
    End If
End Function

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved