Talk About Network

Google


Register and Login
Nick
Password
Register create new account Sign up is FREE and you can post replies, new topics, bookmark posts and more!
Recover lost password


Software > ADO Data > ADOX in vb6 and...
Latest [ Topics | Posts ] Archive Post A New Topic Post a Reply
<< Topic < Post Post 1 of 7 Topic 4225 of 4320
Post > Topic >>

ADOX in vb6 and access97

by =?Utf-8?B?UmljYXJkbyBGdXJ0YWRv?= <RicardoFurtado@[EMAIL PROTECTED] May 7, 2008 at 01:37 AM

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 é su****tado **** 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
 




 7 Posts in Topic:
ADOX in vb6 and access97
=?Utf-8?B?UmljYXJkbyBGdXJ  2008-05-07 01:37:02 
Re: ADOX in vb6 and access97
"Bob Barrows [MVP]&q  2008-05-07 07:11:08 
Re: ADOX in vb6 and access97
=?Utf-8?B?UmljYXJkbyBGdXJ  2008-05-07 05:16:01 
Re: ADOX in vb6 and access97
"Ralph" <nt_  2008-05-07 08:26:40 
Re: ADOX in vb6 and access97
=?Utf-8?B?UmljYXJkbyBGdXJ  2008-05-07 06:47:02 
Re: ADOX in vb6 and access97
"Ralph" <nt_  2008-05-07 11:08:32 
Re: ADOX in vb6 and access97
"Ralph" <nt_  2008-05-07 11:54:51 

Post A Reply:
  Go here to Signup

AddThis Feed Button


About - Advertising - Contact - Frequently Asked Questions - Privacy Policy - Terms of Use - Signup

Contact
tan12V112 Sat Nov 22 15:09:14 CST 2008.