ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

[ADO] Campo BLOB

 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
swbk
Novato
Novato


Registrado: Terça-Feira, 6 de Janeiro de 2015
Mensagens: 27

MensagemEnviada: Sex Jul 03, 2015 2:40 pm    Assunto: [ADO] Campo BLOB Responder com Citação

Olá pessoal.

Estou com a seguinte situação, tenho um ADOQuery e ClientDataSet linkados, tudo está certinho, o problema é que tem um campo blob e com o blobType igual a ftMemo.

Este blob está ligado a um DBMemo, o problema ocorre quando vou dar o post do dataset, número Hex inválido, a solução para isso fiz uma função que converte o texto string do memo e converte para hexadecimal, com isso o fluxo segue normalmente. Contudo fiz um teste onde após o post eu retorno para a tela do registro e como a função converteu o meu texto do memo para hexa o memo mostra o value convertido rs.

Analisei melhor e vi que tinha que fazer essa conversão antes do update final do registro, então no meu DataSetProvider eu utilizei o evento BeforeUpdateRecords, ai ficou "100%".

Com apenas um campo blob ficou show, o problema atual que peço a ajuda de vocês é o seguinte, quando a query possui mais de um blob(3 por exemplo) quando chega na atribuição do valor convertido, eu não sei como e nem porque, o valor do último campo blob some, fica nulo! Isso que nem chegou nesse campo ainda para converter.

Depurei todos passos do DBClient, DB, ADODB e nada.

Alguem já passou por isso ou sabe algo que possa iluminar??

Segue o código do evento, note que não é feito nada de mais que possa interferir no valor do campo até que chegue a vez dele de converter:

Código:

procedure TRDataSetProvider.CustomDataSetProviderBeforeUpdateRecord(
  Sender: TObject; SourceDS: TDataSet; DeltaDS: TCustomClientDataSet;
  UpdateKind: TUpdateKind; var Applied: Boolean);
var
   i : integer;

   function IsConnectedToOracle(Source: TRADOQuery): Boolean;
   begin
     Result := (Pos('ORACLE', UpperCase(Source.Connection.Provider))>0);
   end;

begin
  if (UpdateKind <> ukDelete) and IsConnectedToOracle(TRADOQuery(SourceDS)) then
  begin
     for i := 0 to DeltaDs.FieldCount - 1 do
     begin
        if (DeltaDs.Fields.Fields[i] is TBlobField) and
           (TBlobField(DeltaDs.Fields.Fields[i]).BlobType = ftMemo) then
        begin
           if DeltaDs.Fields.Fields[i].NewValue <> Unassigned then
           begin
              DeltaDS.Edit;
              DeltaDs.Fields.Fields[I].Value := StringToHexa(DeltaDS.Fields.Fields[I].Value);
              DeltaDS.Post;
           end;
        end;
     end;
  end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
swbk
Novato
Novato


Registrado: Terça-Feira, 6 de Janeiro de 2015
Mensagens: 27

MensagemEnviada: Sex Set 18, 2015 8:49 am    Assunto: Responder com Citação

Alguem ajuda?!?!?
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Delphi Todos os horários são GMT - 3 Horas
Página 1 de 1

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB