Я пытаюсь выяснить, возможно ли редактировать длину текстового поля в каждой таблице в базе данных.По сути, номера счетов в настоящее время представляют собой текстовое поле длиной 7. Нам нужно их сократить до 9. Я знаю, что могу просмотреть каждую таблицу, где находится ACCT_NUM, и изменить ее (их около 100), но я пытаюсьнапишите некоторый код для его обработки, просматривая все таблицы.До сих пор я дошел до этого:
Dim cn As ADODB.Connection
Dim rs As ADODB.Recordset
Set cn = CurrentProject.Connection
Set rs = cn.OpenSchema(adSchemaColumns, Array(Empty, Empty, "ACCOUNT"))
While Not rs.EOF
If rs![Column_Name] = "ACCT_NUM" Then
If rs![CHARACTER_MAXIMUM_LENGTH] = 7 Then
'the following line generates the this error: Current Recordset does not support updating. This may be alimitation of the provider, or of the selected locktype.
rs![CHARACTER_MAXIMUM_LENGTH] = 9
End If
rs.Update
End If
rs.MoveNext
Wend
Я знаю, что при редактировании записей с использованием DAO я использовал бы что-то вроде "recordset.Edit", но, похоже, ADO-эквивалент не существует..
Кто-нибудь знает, как я могу это сделать?Я не женат на идее использования ADO, поэтому, если есть какой-то другой способ сделать это, я с радостью перекодирую!
РЕДАКТИРОВАТЬ
С @HansUpПомогите, вот решение.Я уберу это немного, но вот, пожалуйста:
Public Sub sp_change()
Dim db As DAO.Database
Dim tbl As DAO.TableDef
Dim fld As DAO.Field
Dim s As String, buf As String
Dim i As Integer
Set db = CurrentDb()
i = 0
For Each tbl In db.TableDefs
If ((tbl.Attributes And dbSystemObject) = 0) And ((tbl.Attributes And dbAttachedODBC) = 0) And ((tbl.Attributes And dbAttachedTable) = 0) And ((tbl.Attributes And dbAttachExclusive) = 0) Then
Debug.Print "Processing table: " & tbl.Name
For Each fld In tbl.Fields
If fld.Name = "ACCT_NUM" And fld.Size = 7 Then
CurrentProject.Connection.Execute "ALTER TABLE " & tbl.Name & " ALTER COLUMN ACCT_NUM TEXT(9);"
i = i + 1
Exit For
End If
Next
End If
Next
Debug.Print "Edited " & i & " instances."
End Sub