Jump to content

dev botao

erro ao gravar xml no firebird 3.0 campo blob


thiago a amaral
  • Este tópico foi criado há 491 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.

Recommended Posts

boa noite

estou usando um campo chamado XML (blob sub_type 1 segment size 80) onde salvo o conteudo do xml dentro do banco de dados

[FireDAC][Phys][FB]Dynamic SQL Error
SQL error code = -104
String literal with 82343 bytes exceeds the maximum length of 65535 bytes

quando o xml e grande da erro, alguem ja pegou algum caso parecido?

Link to comment
Share on other sites

46 minutos atrás, thiago a amaral disse:

boa noite

estou usando um campo chamado XML (blob sub_type 1 segment size 80) onde salvo o conteudo do xml dentro do banco de dados

[FireDAC][Phys][FB]Dynamic SQL Error
SQL error code = -104
String literal with 82343 bytes exceeds the maximum length of 65535 bytes

quando o xml e grande da erro, alguem ja pegou algum caso parecido?

Boa noite, a mensagem parece clara, tamanho maximo de "65535 bytes", em algum lugar esta definido esse limite no teu banco ou nessa coluna.

Att

Ricardo

  • Like 1
Link to comment
Share on other sites

Estou com o mesmo problema, e não sei se conhecem campo Blob más não tem em lugar nenhum pelo menos no IBExpert onde podemos informar o tamanho máximo de caracteres, tem apenas o Sub_type 0 ou 1 e o Segment Size que o padrão é 80, más que acredito seja apenas pra alocação de blocos porque mesmo 80 esta permitindo gravar até 65535 bytes;

A única diferença para o Thiago é que estou usando o sub_type 0, porque estudando achei essa diferença:

O SUB_TYPE 0 é usado para armazenar dados binários maiores que 64 KB

O SUB_TYPE 1 é usado para armazenar dados binários menores que 64 KB.

Link to comment
Share on other sites

  • Consultores

Boa tarde,

Provavelmente o problema é que o XML é uma linha única e, pelo que vi, o tamanho máximo de uma string no FB é 64k.

Ele deve estar interpretando o valor recebido como uma string única.

Para validar isso, abra o XML com um editor de texto e coloque uma quebra de linha no meio.

Veja se assim não ocorre mais o problema e se for isso, pesquise a respeito se existe alguma solução para esta situação.

  • Like 1
Link to comment
Share on other sites

Se fizer uma quebra de linha em qq ponto o XML se torna inválido... 

ai se perde totalmente o sentido de guardar o XML em banco,  pra se ter um  backup, não só do arquivo fisíco e ainda poder compartilhar em diversas  máquinas da rede...

A questão não é guardar o XML por guardar, ele tem que se manter integro e valido.

A questão é o campo Blob do Firebird 3.0... ele tem ou não a opção de ter um arquivo com mais de 64Kb ...??? o manual diz que se for sub_Type 0 seria sim... más mesmo criando com sub_type 0 não  grava se tiver mais de 64Kb.

Link to comment
Share on other sites

  • Consultores

Sugiro você procurar um fórum de FB onde encontrará especialistas, pois aqui a comunidade ajuda como pode nos limites de seus conhecimentos.

A sugestão foi para você saber o que procurar, pois aparentemente o problema não é quanto o campo suporta, mas sim a forma que está sendo armazenada e aparentemente nem essa informação você havia obtido até o momento.

Fazendo o teste, saberia que deveria parar de procurar o tamanho máximo que o campo suporta e passar a procurar o que realmente irá resolver seu problema.

Link to comment
Share on other sites

Tambem estou procurando resposta no grupo especifico de FB, más como o assunto tbm é especifico pra armazenamento de XML de NFe gerado pelo ACBr, acreditei que alguem já tivesse passado por esse problema aki nesse forum, e se não passou, com certeza pela limitação do campo ou tipo de configuração, vai passar... 

Ou seja acreditei que  seria util tbm no Forum do ACBr...

Descupem se não consegui me fazer entender... Talvem se tivesse colocado no titulo apenas "Erro ao armazenar XML Grandes de NFe gerada pelo ACBr em banco de dados", seria melhor entendido...

Más já estou fazendo testes com outros bancos, MySQL e Postgree, caso nesses bancos não aconteça o erro, volto a postar pra que se no futuro alguem que já armazena em seu banco de dados o XML de NFe gerado pelo ACBr com mais de 64Kb tenha o mesmo problema, consiga uma luz...

Link to comment
Share on other sites

Boa noite, só pra dar o retorno... caso mais alguem passe pelo mesmo problema.

Primeiro  preciso dizer que ele só ocorreu pelo padrão que adoto de programação, onde não uso Querys para Inserir, Alterar ou Excluir, executo comandos direto no componente de conexão.

Então o problema era ao executar um 'INSERT INTO TAB_XML ... ' e passando direto o .XML do componente do ACBr; por algum motivo que ainda não sei empacou nos 64Kb;

A Solução veio quando testei uma dica passada pelo Thiago Amaral que fez através do padrão Query e ParamByName('XML').AsWideString; Acredito que o .AsWideString seja a chave, só sei que funcionou.

Depois do teste bem sucedido, criei uma classe e incorporei ao sistema, e tudo funcionando de primeira; Vou anexar os comandos caso se interessem; E obrigado a todos que participaram desse tópco;

 image.jpeg.a768ef9ab40148db4d4df5ac49aeb080.jpeg

Usando a classe TBlob.

image.jpeg.c55c5d34d8266bb2f25eb24e20753389.jpeg

Código da Classe.

  • Like 1
Link to comment
Share on other sites

  • Consultores

Obrigado por reportar.

Fechando. Para novas dúvidas, criar um novo tópico.

Consultor SAC ACBr

Alexandre de Paula
Ajude o Projeto ACBr crescer - Assine o SAC                    

Projeto ACBr     Telefone:(15) 2105-0750 WhatsApp(15)99790-2976.  ícone Discórdia Discord   

Projeto ACBr - A maior comunidade Open Source de Automação Comercial do Brasil

 

 

Link to comment
Share on other sites

  • Este tópico foi criado há 491 dias atrás.
  • Talvez seja melhor você criar um NOVO TÓPICO do que postar uma resposta aqui.
Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.

The popup will be closed in 10 seconds...