Problemas ao tentar passar um parametro tipo Blob para uma Stored procedure
05/03/2016
0
Ambiente: SO - Windows 8.1
Versão Delphi - Embarcadero XE
Banco - FireBird 2.0
Estou tentando passar os parâmetros para uma Stored Procedure que tem os seguintes Parametros
Codigo - Inteiro
Foto - Blob
Segue a baixo a descrição dos campos
DM_FOTOS.SPIBTab_GravaFoto = É uma Stored Procedure que grava o registro na tabela onde o campo Fotografia é do tipo Blob,
DM_Fotos.IBTab_GravaFoto = É uma tabela que contém os valores que eu quero passar para o parâmetro da Stored Procedure.
Obs. Isto funcionava a muito tempo no delphi 7.
Abaixo estou passando a linha onde eu passo um campo para o parâmetro. (Onde está meu problema)
DM_FOTOS.SPIBTab_GravaFoto.ParamByName'VB_FOTOGRAFIA').AsBlob :=DM_Fotos.IBTab_GravaFoto.FieldByName('Fotografia').AsVariant;
O Problema é que apesar de nao dar erro de compilação ao passar por esta linha ele me da o seguinte erro
Class EvariantInvalidError With Message Invalid Argument
Ou seja ele não está aceitando passar um valor variant para um campo Blob.
Alguem poderia me ajudar pois eu sempre usei desta forma no Delphi 7 e anteriores porem agora no delphi xe não está, existe algum outro tipo que posso utilizar no campo da tabela ou existe alguma outra maneira de passar este valor para o parâmetro da procedure.
Já tentei loadfromfile mas também não deu certo.
Já tentei da forma abaixo.
DM_FOTOS.SPIBTab_GravaFoto.ParamByName'VB_FOTOGRAFIA').AsBlob := DM_Fotos.IBTab_GravaFoto.FieldByName('Fotografia').Value;
Desta forma até funciona porém ele grava algo invalido no banco pois depois deste comando toda vez que o sistema entra neste registro ele retorna a mensagem abaixo.
Class ERadError whith message 'Stream read error
DM_FOTOS.SPIBTab_GravaFoto.ParamByName'VB_FOTOGRAFIA').AsBlob := DM_Fotos.IBTab_GravaFoto.FieldByName('Fotografia').AsBlob;
Desta forma o componente StoredProc que estou utilizando não me retorna um campo com este valor, só tem value ou variant.
Versão Delphi - Embarcadero XE
Banco - FireBird 2.0
Estou tentando passar os parâmetros para uma Stored Procedure que tem os seguintes Parametros
Codigo - Inteiro
Foto - Blob
Segue a baixo a descrição dos campos
DM_FOTOS.SPIBTab_GravaFoto = É uma Stored Procedure que grava o registro na tabela onde o campo Fotografia é do tipo Blob,
DM_Fotos.IBTab_GravaFoto = É uma tabela que contém os valores que eu quero passar para o parâmetro da Stored Procedure.
Obs. Isto funcionava a muito tempo no delphi 7.
Abaixo estou passando a linha onde eu passo um campo para o parâmetro. (Onde está meu problema)
DM_FOTOS.SPIBTab_GravaFoto.ParamByName'VB_FOTOGRAFIA').AsBlob :=DM_Fotos.IBTab_GravaFoto.FieldByName('Fotografia').AsVariant;
O Problema é que apesar de nao dar erro de compilação ao passar por esta linha ele me da o seguinte erro
Class EvariantInvalidError With Message Invalid Argument
Ou seja ele não está aceitando passar um valor variant para um campo Blob.
Alguem poderia me ajudar pois eu sempre usei desta forma no Delphi 7 e anteriores porem agora no delphi xe não está, existe algum outro tipo que posso utilizar no campo da tabela ou existe alguma outra maneira de passar este valor para o parâmetro da procedure.
Já tentei loadfromfile mas também não deu certo.
Já tentei da forma abaixo.
DM_FOTOS.SPIBTab_GravaFoto.ParamByName'VB_FOTOGRAFIA').AsBlob := DM_Fotos.IBTab_GravaFoto.FieldByName('Fotografia').Value;
Desta forma até funciona porém ele grava algo invalido no banco pois depois deste comando toda vez que o sistema entra neste registro ele retorna a mensagem abaixo.
Class ERadError whith message 'Stream read error
DM_FOTOS.SPIBTab_GravaFoto.ParamByName'VB_FOTOGRAFIA').AsBlob := DM_Fotos.IBTab_GravaFoto.FieldByName('Fotografia').AsBlob;
Desta forma o componente StoredProc que estou utilizando não me retorna um campo com este valor, só tem value ou variant.
Amauri Alves
Curtir tópico
+ 0
Responder
Posts
07/03/2016
Paulo Freire
procedure TFormPrincipal.GravaVisitante;
var
ImageJPG: TJPEGImage;
ImageMST: TMemoryStream;
begin
ImageJPG := TJPEGImage.Create;
ImageMST := TMemoryStream.Create;
ImageJPG.Assign(imgFotoCapturada.Picture.Graphic);
ImageJPG.SaveToStream(ImageMST);
ImageMST.Position := 0;
try
DM.SP_INS_UDP_VISITANTES.ParamByName('ID').AsInteger := StrtoInt(txtCod.Txt);
DM.SP_INS_UDP_VISITANTES.ParamByName('NOME').AsString := txtNome.Text;
DM.SP_INS_UDP_VISITANTES.ParamByName('EMPRESA').AsString := txtEmpresa.Text;
DM.SP_INS_UDP_VISITANTES.ParamByName('FOTO').LoadFromStream(ImageMST , ftBlob);
DM.SP_INS_UDP_VISITANTES.ExecProc;
finally
//Deu tudo Certo e Grava
Application.MessageBox('Colaborador(a) Registrado com sucesso !!!','Salvar',
MB_ICONINFORMATION + mb_OK);
//Imprime Etiqueta Zebra com Foto e local onde vai.
if MessageBox(Handle, 'Deseja imprimir Etiqueta?', 'Etique de Visitante', MB_YESNO+MB_SYSTEMMODAL+MB_ICONQUESTION+MB_DEFBUTTON1) = ID_YES Then
begin
ImprimeETQ;
end;
ImageJPG.Free;
ImageMST.Free;
end;
LimpaDados;
var
ImageJPG: TJPEGImage;
ImageMST: TMemoryStream;
begin
ImageJPG := TJPEGImage.Create;
ImageMST := TMemoryStream.Create;
ImageJPG.Assign(imgFotoCapturada.Picture.Graphic);
ImageJPG.SaveToStream(ImageMST);
ImageMST.Position := 0;
try
DM.SP_INS_UDP_VISITANTES.ParamByName('ID').AsInteger := StrtoInt(txtCod.Txt);
DM.SP_INS_UDP_VISITANTES.ParamByName('NOME').AsString := txtNome.Text;
DM.SP_INS_UDP_VISITANTES.ParamByName('EMPRESA').AsString := txtEmpresa.Text;
DM.SP_INS_UDP_VISITANTES.ParamByName('FOTO').LoadFromStream(ImageMST , ftBlob);
DM.SP_INS_UDP_VISITANTES.ExecProc;
finally
//Deu tudo Certo e Grava
Application.MessageBox('Colaborador(a) Registrado com sucesso !!!','Salvar',
MB_ICONINFORMATION + mb_OK);
//Imprime Etiqueta Zebra com Foto e local onde vai.
if MessageBox(Handle, 'Deseja imprimir Etiqueta?', 'Etique de Visitante', MB_YESNO+MB_SYSTEMMODAL+MB_ICONQUESTION+MB_DEFBUTTON1) = ID_YES Then
begin
ImprimeETQ;
end;
ImageJPG.Free;
ImageMST.Free;
end;
LimpaDados;
Responder
Clique aqui para fazer login e interagir na Comunidade :)