ADOX in vb6 and access97



I'm trying to update a database structure from another (updated) database.
When i'm creating the missing fields i can't determine the field properties.
I can find what is the name of the missing field, i can determine its type,
but for instance if the field is a 'Yes/No' field i'm not able to determine
if in the field properties the value 'necessary' is true or false, or if it's
index or not, and if it is, what type of index its using. Is there any way to
do this (find and set the field properties)?
The code i'm using is this:

Private Sub iniciaTabela(ByVal strNomeTabela As String, ByRef myTable As
ADOX.Table, _
ByVal tabelaDestino As ADOX.Table)
Dim intContador As Integer
Dim intIndex As Integer
Dim intInnerIndex As Integer
Dim intIndexColumn As Integer
Dim intInnerIndexColumn As Integer
Dim col As ADOX.Column
Dim bolFound As Boolean
Dim bolIndexFound As Boolean
Dim strErrInfo As String
Dim ADOXindex As New ADOX.Index
Dim intProperties As Integer


On Error GoTo ErrHandler

For Each tabelaDestino In Cat2.Tables
If myTable.Name = tabelaDestino.Name Then

For intContador = 0 To myTable.Columns.Count - 1
bolFound = False
For Each col In tabelaDestino.Columns
If col.Name = myTable.Columns.Item(intContador).Name Then
If col.Type <> myTable.Columns.Item(intContador).Type Then
strErrInfo = "Erro ao tentar actualizar o TIPO de
campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name
col.Type = myTable.Columns.Item(intContador).Type
End If
If col.Attributes <>
myTable.Columns.Item(intContador).Attributes Then
strErrInfo = "Erro ao tentar actualizar os atributos
de campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name
col.Attributes =
myTable.Columns.Item(intContador).Attributes
End If
If col.DefinedSize <>
myTable.Columns.Item(intContador).DefinedSize Then
strErrInfo = "Erro ao tentar actualizar o 'defined
size' de campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name
col.DefinedSize =
myTable.Columns.Item(intContador).DefinedSize
End If
If col.NumericScale <>
myTable.Columns.Item(intContador).NumericScale Then
strErrInfo = "Erro ao tentar actualizar o 'numeric
scale' de campo na base dados " & m_bdDestino & " através da base de dados "
& m_bdOrigem & " na tabela " & col.Name
col.NumericScale =
myTable.Columns.Item(intContador).NumericScale
End If
If col.Precision <>
myTable.Columns.Item(intContador).Precision Then
strErrInfo = "Erro ao tentar actualizar a PRECISÃO
de campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name
col.Precision =
myTable.Columns.Item(intContador).Precision
End If
If col.RelatedColumn <>
myTable.Columns.Item(intContador).RelatedColumn Then
col.RelatedColumn =
myTable.Columns.Item(intContador).RelatedColumn
End If
If col.SortOrder <>
myTable.Columns.Item(intContador).SortOrder Then
col.SortOrder =
myTable.Columns.Item(intContador).SortOrder
End If

bolFound = True
Exit For
End If
Next

If Not bolFound Then
tabelaDestino.Columns.Append
myTable.Columns.Item(intContador).Name,
myTable.Columns.Item(intContador).Type,
myTable.Columns.Item(intContador).DefinedSize


If
tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).Type <>
myTable.Columns.Item(intContador).Type Then
strErrInfo = "Erro ao tentar actualizar o TIPO de campo
na base dados " & m_bdDestino & " através da base de dados " & m_bdOrigem & "
na tabela " & col.Name

tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).Type =
myTable.Columns.Item(intContador).Type
End If
If
tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).Attributes
<> myTable.Columns.Item(intContador).Attributes Then
strErrInfo = "Erro ao tentar actualizar os ATRIBUTOS de
campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name

tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).Attributes
= myTable.Columns.Item(intContador).Attributes
End If
If
tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).DefinedSize <> myTable.Columns.Item(intContador).DefinedSize Then
strErrInfo = "Erro ao tentar actualizar o 'DEFINED SIZE'
de campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name

tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).DefinedSize = myTable.Columns.Item(intContador).DefinedSize
End If
If
tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).NumericScale <> myTable.Columns.Item(intContador).NumericScale Then
strErrInfo = "Erro ao tentar actualizar o 'NUMERIC
SCALE' de campo na base dados " & m_bdDestino & " através da base de dados "
& m_bdOrigem & " na tabela " & col.Name

tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).NumericScale = myTable.Columns.Item(intContador).NumericScale
End If
If
tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).Precision
<> myTable.Columns.Item(intContador).Precision Then
strErrInfo = "Erro ao tentar actualizar a PRECISÃO de
campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name

tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).Precision
= myTable.Columns.Item(intContador).Precision
End If

If
tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).RelatedColumn <> myTable.Columns.Item(intContador).RelatedColumn Then
strErrInfo = "Erro ao tentar actualizar a 'RELATED
COLUMN' de campo na base dados " & m_bdDestino & " através da base de dados "
& m_bdOrigem & " na tabela " & col.Name

tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).RelatedColumn = myTable.Columns.Item(intContador).RelatedColumn
End If
If
tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).SortOrder
<> myTable.Columns.Item(intContador).SortOrder Then
strErrInfo = "Erro ao tentar actualizar a 'SORTED ORDER'
de campo na base dados " & m_bdDestino & " através da base de dados " &
m_bdOrigem & " na tabela " & col.Name

tabelaDestino.Columns.Item(myTable.Columns.Item(intContador).Name).SortOrder
= myTable.Columns.Item(intContador).SortOrder
End If
End If


DoEvents
Next intContador

For intIndex = 0 To tabelaDestino.Indexes.Count - 1
If intIndex > tabelaDestino.Indexes.Count - 1 Then Exit For
tabelaDestino.Indexes.Delete intIndex
DoEvents

Next intIndex

For intIndex = 0 To myTable.Indexes.Count - 1
'Set idx = tabelaDestino.Indexes
td.CreateIndex(txtIndexName.Text)
Set ADOXindex = New ADOX.Index
strErrInfo = "Indice: " & myTable.Indexes(intIndex).Name
ADOXindex.Name = myTable.Indexes(intIndex).Name 'name of index


For intInnerIndex = 0 To myTable.Indexes(intIndex).Columns.Count
- 1
strErrInfo = "Indice: " & myTable.Indexes(intIndex).Name &
", Coluna: " & myTable.Indexes(intIndex).Columns(intInnerIndex).Name
ADOXindex.Columns.Append
myTable.Indexes(intIndex).Columns(intInnerIndex).Name ',
myTable.Indexes(intIndex).Columns(intInnerIndex).Type,
myTable.Indexes(intIndex).Columns(intInnerIndex).DefinedSize
'tabelaDestino.Indexes(intIndex).Columns.Append
myTable.Indexes(intIndex).Columns(intInnerIndex).Name ',
myTable.Indexes(intIndex).Columns(intInnerIndex).Type,
myTable.Indexes(intIndex).Columns(intInnerIndex).DefinedSize
Next intInnerIndex
tabelaDestino.Indexes.Append ADOXindex
DoEvents
Next intIndex

Exit For
End If
Next

Exit Sub
ErrHandler:
If (Err.Description <> "O índice já existe.") And
(InStr(Err.Description, "Não tem a autorização necessária para utilizar o
objecto") = 0) And _
(InStr(Err.Description, "durante a sua abertura; mas a tabela não
pode ser bloqueada enquanto estiver em utilização. Aguarde um momento e
tente de novo.") = 0) And _
(Err.Description <> "A operação não é permitida neste contexto.") And _
(InStr(Err.Description, "Object variable or With block variable not
set") = 0) And _
(InStr(Err.Description, "O método não é suportado por este
fornecedor") = 0) And _
(InStr(Err.Description, "argumentos são de tipo incorrecto, estão
fora do intervalo aceitável ou estão em conflito uns com os outros") = 0) And
_
(InStr(Err.Description, "A operação de múltiplos passos OLE DB gerou
erros. Verifique cada valor de estado OLE DB, se disponível") = 0) Then
intRegisto = intRegisto + 1
m_Lvw.ListItems.Add intRegisto, "A" & CStr(intRegisto), "BD:" &
m_bdDestino & " " & strErrInfo & " (" & Err.Number & ") " &
Err.Description
End If

Resume Next
End Sub

.



Relevant Pages

  • Module Using MS Access Project
    ... I have the following in a module (only showing part of it) that I'm trying ... Dim rs As Recordset ... Dim strFind As String ... I get the erro on the last line. ...
    (microsoft.public.sqlserver.msde)
  • Re: TextWidth() Alternative?
    ... Dim intLines As Integer ... Dim sExcess As String: sExcess = sLines ... Dim sDescription As String: sDescription = sExcess ... If (intIndex < 2) Then Exit Do ...
    (microsoft.public.vb.general.discussion)
  • Re: Problem mit OpenConnection (Access 97)/ SQL-Server
    ... > Hallo Klaus-Dieter, ... >> Public Function ExecSP ... >> Dim ODBCWS As Workspace, ... > Dim intIndex As Integer ...
    (microsoft.public.de.access.clientserver)
  • Re: Execute Method for Find Object
    ... Dim strSearch As String, strTerm As String ... Dim intIndex As Integer, intCounter As Integer, intLast As Integer ...
    (microsoft.public.word.vba.beginners)
  • Re: Execute Method for Find Object
    ... During each iteration of the While loop, if .Execute returns ... Dim strSearch As String, strTerm As String ... Dim intIndex As Integer, intCounter As Integer, intLast As Integer ...
    (microsoft.public.word.vba.beginners)