Fórum Problema com campo blob no DBExpress 4 #370770

26/05/2009

0

Olá, acontece o seguinte. Estou tentando inserir o conteúdo de um memo para dentro de um campo blob e no .ApplyUpdates(0); do ClienteDataSet me retorna a seguinte mensagem de exceção: ´Incorrect values within SQLDA structure´.
O campo está definido da seguinte forma: ´BLOB SUB_TYPE 0 SEGMENT SIZE 80 CHARACTER SET WIN1252´. ( Firebird 2.0/ DBExpress 4 / Delphi 2009 ) Sempre funcionou antes do DBExpress 4. Tentei trocar também a dll, tanto do firebird/interbase quanto a dll do proprio dbexpress. Mas persiste o erro.
Se alguém tiver mais alguma sugestão que possa dar uma iluminada no assunto, será bem-vinda.Já tentei usar uma SQLQuery para fazer um UpDate direto. O erro persiste. Obrigado pela atenção e aguardo alguma ajuda.


Lcfinformatica

Lcfinformatica

Responder

Posts

27/05/2009

Discorpio

Bom dia Lcfinformatica.

Os campos Blob sub_type 0 é campo binário para armazenamento do tipo de imagens, para campos Memo, o tipo correto é Blob sub_type 1 ou Blob sub_type text e o segment size pode continuar sendo 80


Responder

Gostei + 0

27/05/2009

Lcfinformatica

Obrigado pela ajuda. Realmente é verdade o que disse. Mas aqui, mesmo mudando de zero para 1, o erro persiste. Vou continuar tentando alternativas e esperando dicas.


Responder

Gostei + 0

28/05/2009

Discorpio

Bom dia Lcfinformatica.

Retire o texto [color=blue:06eb2fa233]´CHARACTER SET WIN1252´[/color:06eb2fa233] na declaração do campo e veja o que acontece


Responder

Gostei + 0

28/05/2009

Lcfinformatica

Caro Discorpio, obrigado novamente pela ajuda. Mas acontece o seguinte, até a versão 7 do Delphi eu consigo trabalhar com o campo blob desta forma ou das formas que voce sugeriu. Mas nesta versão da IDE, 2009, o dbexpress não está salvando o campo. Ele consegue ler o campo do banco e mostrar na tela. Mas no momento em que se altera e salva, acontece o erro. Acredito eu que esse problema começou com o Delphi 2007, mas não cheguei a usá-la muito. Ainda tentando uma correção. Abri um ticket em outro site também e consultei um representante da CodeGear e ainda espero resposta. Se voce lembrar de mais alguma coisa que possa ajudar, estarei acompanhando.


Responder

Gostei + 0

28/05/2009

Discorpio

Boa noite Lcinformatica.

Bom, se o mesmo está lendo e não está salvando, então dê dois clicks no ClientDataSet e selecione o campo Blob, vá no Object Inspector e verifique se a propriedade ReadOnly está setada para True, se estiver, configure-a para false.

Outra coisa que voce deve observar é que o ApplyUpdates(0) por si só não salva o registro no banco físico, apenas atualiza o DataSet local no Client, e prepara os dados para DataSetProvider empacotá-los, porém os dados só são confirmados no banco físico após o método Commit do SQLConnection ser acionado.

Para salvar com o Commit é assim:

  Evento OnClick De Um Botão Qualquer(Sender : Tobject); 
  Var Transacao : TTransactionDesc; 
  Begin 
      Transacao.TransactionID := 1; 
      Transacao.IsolationLevel := xilREPEATABLEREAD; 
      SqlConnection.StartTransaction(Transacao); 
      Try 
         Tabela.Post; 
         SqlConnection.Commit(Transacao); 
      Except 
         SqlConnection.Rollback(Transacao); 
      End; 
  End; 



Responder

Gostei + 0

29/05/2009

Lcfinformatica

Para esta situação não estou usando transação e, desculpe informar , está salvando todos os outros campo só com o ApplyUpdates(0), menos o blob. O campo não está ReadOnly, pois se estivesse não poderia alimentá-lo. Mas fui conferir mesmo assim. Obrigado mais uma vez pela ajuda Discorpio . :)


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar