Re: [firebase-br] OFF: Migração de Banco

Eduardo Jedliczka (TeamFB) jedyfb em gmail.com
Qua Jul 5 12:40:45 -03 2006


Humm... entendi o seu problema...

Você tem Campos MEMOs no ACCESS... E está usando INSERTS e UPDATES para 
gravá-los no FB...

Não entendo muito de VB, mas não há como utilizar um recordset para ler o 
memo e gravar num blob (sem ser via SQL) ???

É que há algumas funções específicas de manipulação de blob no FireBird que 
não podem ser utilizadas via SQL.

======================
Eduardo Jedliczka
Membro do TeamFB - FireBase
Apucarana - PR
======================

----- Original Message ----- 
From: "Paulo Henrique Mendes Martin" <paulo.mendes87 em gmail.com>
To: "Carlos H. Cantu" <listas em warmboot.com.br>; "FireBase" 
<lista em firebase.com.br>
Sent: Wednesday, July 05, 2006 8:44 AM
Subject: Re: [firebase-br] OFF: Migração de Banco


Obrigado por terem me ajudado. Eduardo quanto ao Script de Migração eu já
fiz tanto que não sei se vem ao caso colocá-lo aqui, mas eu vou colocar


Public Access As DAO.Database
Public WS As DAO.Workspace
Public AccessRS As DAO.Recordset


Public Cn As New ADODB.Connection
Public Rs As New ADODB.Recordset
Public Reg As Integer
Public P As Integer

Public Sub Abre_Bco_Access() 'aqui abrimos o banco de dados do Access

Set WS = DBEngine.Workspaces(0)
Set Access = WS.OpenDatabase("D:\Projetos\Database
Firebird\CADSOCIO\CADSOCIO.mdb", False, False)
Exit Sub

End Sub
Public Sub Abre_Bco_Firebird() ' Abrindo agora o banco de dados do Firebird

Cn.ConnectionString = "DRIVER=Firebird/InterBase(r)
driver;UID=SYSDBA;PWD=masterkey;DBNAME=D:\Projetos\Database
Firebird\CADSOCIO\CADSOCIO.FDB"
Cn.Open

End Sub

Public Sub Adiciona_Firebird()

Dim SqlA As String
Dim SqlF As String
Dim cont As Integer

SqlA = "SELECT * FROM sócios" 'Aqui é o SQL da tabela do Access
Set AccessRS = Access.OpenRecordset(SqlA) ' Setamos o recorset para a tabela
do access com a devida consulta

AccessRS.MoveFirst 'movendo para o primeiro registro antes de começar o Loop

f = Array("REGSOC", "NOMSOC", "CODCAT", "CODSIT", "DTLIM", "DTNASC", "SEXO",
"CODCIV", "DTADM", "DTDEM", "TIPO", "RUA", "NUM", "COMPL", "BAIRRO", "CID",
"EST", "CEP", "FONE", "FONE2", "FONE3", "EXAME", "OBSERVACOES",
"TRANSFERENCIA", "CONTROVIA", "PROVISORIO", "ICARD", "CARNE", "VOTO",
"CONVITE", "CONVITE2", "CX", "CX2", "CT", "email", "PROMO", "CPF", "E",
"RG", "ESCOLARIDADE")

Do Until AccessRS.EOF
    x = Array(AccessRS("REGSOC"), AccessRS("NOMSOC"), AccessRS("CODCAT"),
AccessRS("CODSIT"), AccessRS("DTLIM"), AccessRS("DTNASC"), AccessRS("SEXO"),
AccessRS("CODCIV"), AccessRS("DTADM"), AccessRS("DTDEM"), AccessRS("TIPO"),
AccessRS("RUA"), AccessRS("NUM"), AccessRS("COMPL"), AccessRS("BAIRRO"),
AccessRS("CID"), AccessRS("EST"), AccessRS("CEP"), AccessRS("FONE"),
AccessRS("FONE2"), AccessRS("FONE3"), AccessRS("EXAME"),
AccessRS("OBSERVAÇÕES"), AccessRS("TRANSFERÊNCIA"), AccessRS("CONTROVIA"),
AccessRS("PROVISORIO"), AccessRS("ICARD"), AccessRS("CARNÊ"),
AccessRS("VOTO"), AccessRS("CONVITE"), AccessRS("CONVITE2"), AccessRS("CX"),
AccessRS("CX2"), AccessRS("CT"), AccessRS("email"), AccessRS("PROMO"),
AccessRS("CPF"), AccessRS("E"), AccessRS("RG"), AccessRS("ESCOLARIDADE"))
    For cont = 0 To 0
        Cn.BeginTrans
        SqlF = "Insert Into SOCIOS (" & f(cont) & ") values" & "('" &
x(cont) & "')" & ""
        Cn.Execute (SqlF)
        For cont2 = 1 To 38
            If IsNull(x(cont2)) = True Then
                GoTo proximo
            End If
           ' If cont2 = 25 Then x(cont2) = 0
             If cont2 = 4 Or cont2 = 5 Or cont2 = 8 Or cont2 = 9 Or cont2 =
21 Or cont2 = 37 Then
                If IsNull(x(cont2)) = True Or x(cont2) = "" Then
                    GoTo proximo
                Else
                    x(cont2) = Left(x(cont2), 2) & "." & Mid(x(cont2), 4, 2)
& "." & Right(x(cont2), 4)
                End If
                SqlF = "Update SOCIOS Set socios." & f(cont2) & "=" & "(' "
& x(cont2) & "')" & ""
            Else
                SqlF = "Update SOCIOS Set socios." & f(cont2) & "=" & "('" &
x(cont2) & "')" & ""
            End If
            Cn.Execute (SqlF)
proximo:
        Next
    Cn.CommitTrans
    Next
    Me.pb_main.Value = P + 1
    Reg = Reg + 1
    Me.Label1.Caption = Reg
    AccessRS.MoveNext
Loop
Cn.Close 'Fechando o Banco de Dados do Firebird


End Sub
Private Sub Command1_Click()


P = 1
Reg = 1

Call Abre_Bco_Access
Call Abre_Bco_Firebird
Call Adiciona_Firebird

MsgBox ("Banco Exportado Com sucesso"), vbInformation, "AVISO"


End Sub
-----------------------


Certo, mas como falei quando ele chegava no campo tipo Blob ele dava uma
mensagem de erro (erro do Firebird) dizendo que o tipo String colocado na
variável do vetor X era incompatível com o campo Blob para o qual eu ia
migrar.

Agradeço ao Cantu pois eu consegui migrar PARTE dos dados com aquele
software mas as tabelas que tem campos MEMO no access dão uma mensagem de
erro assim quando vou abrir no Firebird (utilizo o IBExpert para fazer tal
acesso)

   can't format message 13:198 - message file c:\HK-Software\firebird.msg
not found.
   Atithimetic exception, numeric overflow, or string truncation.
   Cannot transliterate character detween character sets

Gostaria de saber se alguém por favor poderia dizer, será problema com o
banco de dados em Access... Diga-se de passagem que estou trabalhando nesta
empresa a pouco tempo e não fui eu que montei a estrutura desse banco, que
na minha opinião está bem mal projetado (digo o banco em si).

Mais alguma informação é só pedirem... eu ainda sou Newbie em Firebird,
estou aprendendo com o tempo e com os erros e acertos.
______________________________________________
FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
Para editar sua configuração na lista, use o endereço 
http://mail.firebase.com.br/mailman/listinfo/lista_firebase.com.br
Para consultar mensagens antigas: http://firebase.com.br/pesquisa 





Mais detalhes sobre a lista de discussão lista