ADOX in vb6 and access97
- From: Ricardo Furtado <RicardoFurtado@xxxxxxxxxxxxxxxxxxxxxxxxx>
- Date: Wed, 7 May 2008 01:37:02 -0700
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
.
- Follow-Ups:
- Re: ADOX in vb6 and access97
- From: Bob Barrows [MVP]
- Re: ADOX in vb6 and access97
- Prev by Date: PROPVARIANT tags in data row of recordset XML
- Next by Date: Re: ADOX in vb6 and access97
- Previous by thread: PROPVARIANT tags in data row of recordset XML
- Next by thread: Re: ADOX in vb6 and access97
- Index(es):
Relevant Pages
|
|