|
|
|||||||||
|
|||||||||
| |||||||||
|
|
|
| |||||||||
![]() |
|
|
«
Previous Thread
|
Next Thread
»
|
Thread Tools | Search this Thread | Rate Thread | Display Modes |
|
#1
|
|||
|
|||
|
Adox in vb6
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 |
|
#2
|
|||
|
|||
|
readonly
Ok, so i found bugs in the code
i just can't do something like col.Type = myTable.Columns.Item(intContador).Type because col.Type is readonly but if i can't do this, how can i change this property? |
|
#3
|
||||
|
||||
|
Honestly, I haven't use ADO extension. I've heard it's quite useful but I never use it. The ADO is sufficient in my projects and I always create a reusable module that will do all stuff.
Try Googling it, it will return some hits or MSDN. |
|
#4
|
|||
|
|||
|
Please use forum CODE tags around posted code. Refer to these forums FAQ
__________________
====== Doug G ====== "Hide, hide witch! The good folk come to burn thee. Their keen enjoyment hid behind their gothic mask of duty." -Mark Clifton |
![]() |
| Viewing: Dev Shed Forums > Programming Languages - More > Visual Basic Programming > Adox in vb6 |
| Thread Tools | Search this Thread |
| Display Modes | Rate This Thread |
|
|
|
|
|