PROBLEMAS COM O SHOW CREATE TABLE
Galera bom dia, tenho um módulo de backup porém esta dando um erro ao pegar a estrutura de uma tabela com vários campos, porém qdo coloco isso direto no banco MYSQL ele traz a estrutura certinha
NO VB a resposta fica assim
CREATE TABLE 'empresas' (
'EMPRESA' double default NULL,
'CGC' varchar(14) default NULL,
'NOME' varchar(48) default NULL,
'ENDERECO' varchar(30) default NULL,
'NUMERO' varchar(5) default NULL,
'COMPLEM' varchar(16) default NULL,
'CEP' varchar(8) default NULL,
'BAIRRO' varchar(16) default NULL,
'CIDADE' varchar(28) default N
E no MYSQL
CREATE TABLE 'empresas' (
'EMPRESA' double default NULL,
'CGC' varchar(14) default NULL,
'NOME' varchar(48) default NULL,
'ENDERECO' varchar(30) default NULL,
'NUMERO' varchar(5) default NULL,
'COMPLEM' varchar(16) default NULL,
'CEP' varchar(8) default NULL,
'BAIRRO' varchar(16) default NULL,
'CIDADE' varchar(28) default NULL,
'ESTADO' varchar(2) default NULL,
'SETOR' varchar(1) default NULL,
'STATUS' varchar(1) default NULL,
'CONTABIL' double default NULL,
'NRFUNC' double default NULL,
'DTCADASTRO' varchar(40) default NULL,
'FONE' varchar(15) default NULL,
'FAX' varchar(15) default NULL,
'TELEX' varchar(15) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
O que devo fazer no VB para corrigir esse problema
a estrutura esta assim
DIM RS as ADODB
Set RS = New ADODB.Recordset
set RS.OPEN [Ô]SHOW CREATE TABLE EMPRESAS[Ô],minhaconexao,3,3
Isso acontece apenas com tabelas com vários campos, caso tenha pouco campo o resultado é correto
Agradeço a todos desde já
NO VB a resposta fica assim
CREATE TABLE 'empresas' (
'EMPRESA' double default NULL,
'CGC' varchar(14) default NULL,
'NOME' varchar(48) default NULL,
'ENDERECO' varchar(30) default NULL,
'NUMERO' varchar(5) default NULL,
'COMPLEM' varchar(16) default NULL,
'CEP' varchar(8) default NULL,
'BAIRRO' varchar(16) default NULL,
'CIDADE' varchar(28) default N
E no MYSQL
CREATE TABLE 'empresas' (
'EMPRESA' double default NULL,
'CGC' varchar(14) default NULL,
'NOME' varchar(48) default NULL,
'ENDERECO' varchar(30) default NULL,
'NUMERO' varchar(5) default NULL,
'COMPLEM' varchar(16) default NULL,
'CEP' varchar(8) default NULL,
'BAIRRO' varchar(16) default NULL,
'CIDADE' varchar(28) default NULL,
'ESTADO' varchar(2) default NULL,
'SETOR' varchar(1) default NULL,
'STATUS' varchar(1) default NULL,
'CONTABIL' double default NULL,
'NRFUNC' double default NULL,
'DTCADASTRO' varchar(40) default NULL,
'FONE' varchar(15) default NULL,
'FAX' varchar(15) default NULL,
'TELEX' varchar(15) default NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1
O que devo fazer no VB para corrigir esse problema
a estrutura esta assim
DIM RS as ADODB
Set RS = New ADODB.Recordset
set RS.OPEN [Ô]SHOW CREATE TABLE EMPRESAS[Ô],minhaconexao,3,3
Isso acontece apenas com tabelas com vários campos, caso tenha pouco campo o resultado é correto
Agradeço a todos desde já
Eu acho que de alguma maneira a string está cortando. Veja em que parte do seu código você pega o retorno do MySQL e veja se o campo não está pequeno demais ou se a variável em que você grava esse valor não está sendo cortada de alguma maneira...
Kerplank obrigado pelo retorno
Eu tomei esse cuidado antes, más isso é o retono puro do código, eu não estou jogando em uma string, estou jogando esse retorno direto no arquivo txt
Print #x, rs(1) & [Ô];[Ô]
Por isso q fiquei perdido e sem saber o que fazer, pois isso esta vindo direto, achei estranho isso e não sei como resolver
Eu tomei esse cuidado antes, más isso é o retono puro do código, eu não estou jogando em uma string, estou jogando esse retorno direto no arquivo txt
Print #x, rs(1) & [Ô];[Ô]
Por isso q fiquei perdido e sem saber o que fazer, pois isso esta vindo direto, achei estranho isso e não sei como resolver
Pode mostrar o código todo que faz isso?
sem problema
Dim rssAux As ADODB.Recordset
Set rssAux = New ADODB.Recordset
with lst
.
.
.
.
With rssAux
If UCase(strNomeTabela) = [Ô]EMPRESAS[Ô] Then
MsgBox [Ô]OK[Ô]
End If
.Open [Ô]SHOW CREATE TABLE [Ô] & strNomeTabela, cnn [ô]atualizo o recordset com a estrutura da tabela
Print #x, [Ô][Ô]
Print #x, [Ô]#[Ô]
Print #x, [Ô]# [Ô] & MSG_06 & strNomeTabela & [Ô][Ô]
smsg = [Ô]# [Ô] & MSG_06 & strNomeTabela & [Ô][Ô]
Set nodeX2 = lst.ListItems.Add(, , smsg)
nodeX2.EnsureVisible: DoEvents
frmBackup.Label1 = Left(frmBackup.Label1 & [Ô] [Ô] & Mid(.Fields.Item(1).Value, 1, InStr(.Fields.Item(1).Value, [Ô]([Ô]) - 1), 255): DoEvents
Print #x, [Ô]#[Ô]
Print #x, .Fields.Item(1).Value & [Ô];[Ô] [ô]Aqui jogo para o arquivo
.Close
End With
end with
Dim rssAux As ADODB.Recordset
Set rssAux = New ADODB.Recordset
with lst
.
.
.
.
With rssAux
If UCase(strNomeTabela) = [Ô]EMPRESAS[Ô] Then
MsgBox [Ô]OK[Ô]
End If
.Open [Ô]SHOW CREATE TABLE [Ô] & strNomeTabela, cnn [ô]atualizo o recordset com a estrutura da tabela
Print #x, [Ô][Ô]
Print #x, [Ô]#[Ô]
Print #x, [Ô]# [Ô] & MSG_06 & strNomeTabela & [Ô][Ô]
smsg = [Ô]# [Ô] & MSG_06 & strNomeTabela & [Ô][Ô]
Set nodeX2 = lst.ListItems.Add(, , smsg)
nodeX2.EnsureVisible: DoEvents
frmBackup.Label1 = Left(frmBackup.Label1 & [Ô] [Ô] & Mid(.Fields.Item(1).Value, 1, InStr(.Fields.Item(1).Value, [Ô]([Ô]) - 1), 255): DoEvents
Print #x, [Ô]#[Ô]
Print #x, .Fields.Item(1).Value & [Ô];[Ô] [ô]Aqui jogo para o arquivo
.Close
End With
end with
Alguém ...
Só pra tirar uma suspeita, comenta a linha:
frmBackup.Label1 = Left(frmBackup.Label1 & [Ô] [Ô] & Mid(.Fields.Item(1).Value, 1, InStr(.Fields.Item(1).Value, [Ô]([Ô]) - 1), 255): DoEvents
e rode de novo...
frmBackup.Label1 = Left(frmBackup.Label1 & [Ô] [Ô] & Mid(.Fields.Item(1).Value, 1, InStr(.Fields.Item(1).Value, [Ô]([Ô]) - 1), 255): DoEvents
e rode de novo...
Essa linha ela apenas pela mostra qual é o comando que esta sendo montado, más eu fiz isso e continuou dando a mesma coisa.
Eu fiz um teste, abrindo o banco e sem deixar entrar na rotina e na janela do Immediate do debug
?.Fields.Item(1).Value
Me trouxe o resultado incompleto
Kerplank eu peguei o projeto aki no vbmania
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=7887
Acho que assim daria para vc ver melhor, o projeto foi postado pelo Foxman, acabei de deixar uma mensagem lá para ele, quem sabe o pai da criança não consegue ajudar a gente rsrs
Eu fiz um teste, abrindo o banco e sem deixar entrar na rotina e na janela do Immediate do debug
?.Fields.Item(1).Value
Me trouxe o resultado incompleto
Kerplank eu peguei o projeto aki no vbmania
http://www.vbmania.com.br/pages/index.php?varModulo=Detalhe&varID=7887
Acho que assim daria para vc ver melhor, o projeto foi postado pelo Foxman, acabei de deixar uma mensagem lá para ele, quem sabe o pai da criança não consegue ajudar a gente rsrs
Alguém ...
O que estou vendo é que o campo onde aparece o script, está apenas com 255 caracteres. Nunca vi isso acontecer...
Kerplunk obrigado pelo retorno
Concordo com vc no caso do script estar limitado, más não aos 255 caracteres, pois se fizer um len(.Fields.Item(1).Value ) ele vai dar como 704, isso no meu caso
E o que mais me intriga é o seguinte, no caso da exibição do campo
CREATE TABLE 'empresas' (
'EMPRESA' double default NULL,
'CGC' varchar(14) default NULL,
'NOME' varchar(48) default NULL,
'ENDERECO' varchar(30) default NULL,
'NUMERO' varchar(5) default NULL,
'COMPLEM' varchar(16) default NULL,
'CEP' varchar(8) default NULL,
'BAIRRO' varchar(16) default NULL,
'CIDADE' varchar(28) default N
Após esse N aparece um espaço enorme em branco uma vÃrgula e mais um espaço enorme em branco e como que ele ja deu um espaço nesse default para o N, sinceramente eu estou perdido nisso. Estou arrumando uma solução prévia para não ficar parado com isso, estou tirando essa parte que ele pega a criação das tabelas e ficarei apenas com a criação dos dados. Caso eu precise voltar alguma coisa, eu coloco o banco vazio e volto os dados, essa solução que achei.
Deixarei esse tópico aberto pois pretendo arrumar isso e espero que o pai da criança possa ajudar, porque no vb.net ele falou que esta corrigido.
Kerplunk ou mais alguém tiver mais alguma idéia posta ai, assim que eu arrumar uma solução definitiva eu postarei
Concordo com vc no caso do script estar limitado, más não aos 255 caracteres, pois se fizer um len(.Fields.Item(1).Value ) ele vai dar como 704, isso no meu caso
E o que mais me intriga é o seguinte, no caso da exibição do campo
CREATE TABLE 'empresas' (
'EMPRESA' double default NULL,
'CGC' varchar(14) default NULL,
'NOME' varchar(48) default NULL,
'ENDERECO' varchar(30) default NULL,
'NUMERO' varchar(5) default NULL,
'COMPLEM' varchar(16) default NULL,
'CEP' varchar(8) default NULL,
'BAIRRO' varchar(16) default NULL,
'CIDADE' varchar(28) default N
Após esse N aparece um espaço enorme em branco uma vÃrgula e mais um espaço enorme em branco e como que ele ja deu um espaço nesse default para o N, sinceramente eu estou perdido nisso. Estou arrumando uma solução prévia para não ficar parado com isso, estou tirando essa parte que ele pega a criação das tabelas e ficarei apenas com a criação dos dados. Caso eu precise voltar alguma coisa, eu coloco o banco vazio e volto os dados, essa solução que achei.
Deixarei esse tópico aberto pois pretendo arrumar isso e espero que o pai da criança possa ajudar, porque no vb.net ele falou que esta corrigido.
Kerplunk ou mais alguém tiver mais alguma idéia posta ai, assim que eu arrumar uma solução definitiva eu postarei
Tópico encerrado , respostas não são mais permitidas