REST-DataWare icon indicating copy to clipboard operation
REST-DataWare copied to clipboard

Erro na validação de campo blob null nos drivers em DBWare

Open mobius1qwe opened this issue 3 years ago • 0 comments

Descrição do bug Os drivers na hora de validar blob via DBWare, se o blob for null dá erro de Access Violation pois na linha do Params[i].SaveToStream do código abaixo tenta salvar sem verificar se ele existe.

              Else If vTempQuery.Params[A].DataType in [ftBytes, ftVarBytes, ftBlob,
                                                        ftGraphic, ftOraBlob, ftOraClob] Then
               Begin
                  If Not Assigned(vStringStream) Then
                   vStringStream  := TMemoryStream.Create;
                  Try
                   Params[I].SaveToStream(vStringStream);
                   vStringStream.Position := 0;
                   If vStringStream.Size > 0 Then
                    vTempQuery.Params[A].LoadFromStream(vStringStream, ftBlob);
                  Finally
                   If Assigned(vStringStream) Then
                    FreeAndNil(vStringStream);
                  End;
        End

Comportamento esperado Correção sugerida por Francisco pra fazer esse tratamento:

               Else If vTempQuery.Params[A].DataType in [ftBytes, ftVarBytes, ftBlob,
                                                        ftGraphic, ftOraBlob, ftOraClob] Then
               Begin
                If (Not (Params[I].IsNull)) Then
                Begin
                  If Not Assigned(vStringStream) Then
                   vStringStream  := TMemoryStream.Create;
                  Try
                   Params[I].SaveToStream(vStringStream);
                   vStringStream.Position := 0;
                   If vStringStream.Size > 0 Then
                    vTempQuery.Params[A].LoadFromStream(vStringStream, ftBlob);
                  Finally
                   If Assigned(vStringStream) Then
                    FreeAndNil(vStringStream);
                  End;
                End
                Else
                 vTempQuery.Params[A].Clear;
               End

Informações técnicas:

  • OS: Windows
  • Versão do RDW: 2.0.5
  • IDE: Delphi

mobius1qwe avatar Aug 29 '22 20:08 mobius1qwe