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.
alguém 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:
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;
Pergunta
Samuel Sewaybricker
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.
alguém 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:
Link para o comentário
Compartilhar em outros sites
1 resposta a esta questão
Posts Recomendados
Participe da discussão
Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.