News & Events
- 11 de agosto de 2009
- Posted by: Adriano Santos
- Category: Tutoriais
Nos últimos dias passei por um problema bastante desagradável. Minha aplicação hoje é desenvolvida em IntraWeb no Delphi 2007 com Firebird 2.0.4. Os campos blog não funcionam para gravação de imagens jpg e tive que correr atrás do prejuízo. Até a versão BDS 2006 tudo estava ok, mas o 2007 me proporcionou esse problema.
Até onde me informaram, o último update do RAD Studio 2007 estava com essa incompatibilidade corrigida, mas mesmo atualizadíssimo não funcionou. Recorri então a drivers de terceiro e esbarrei no driver TBODBXFB do Thiago Borges, que já é bem conhecido na comunidade. Instalei ele e mesmo assim ainda precisei fazer uma pequena adaptação na minha aplicação.
Precisei criar uma função para gravar a foto diretamente no banco. Vejam a solução:
procedure TfrmForm1.GravarFoto(AID: Integer);
var
__Stream: TMemorystream;
__SQLCommand: string;
begin
__Stream := TMemorystream.Create;
__Stream.LoadFromFile(PathString);
__Stream.Position := 0;
__SQLCommand :=
____’UPDATE TABELA SET CAMPO_FOTO=:IMAGEM WHERE ID=:ID’;
__try
____DataModule.IniciarTransacao;
____DataModule.Objects.Close;
____DataModule.Objects.Params.Clear;
____DataModule.Objects.CommandText := SQLCommand;
____DataModule.Objects.FetchParams;
____DataModule.Objects.Params.ParamByName(‘IMAGEM’).LoadFromStream(Stream, ftBlob);
____DataModule.Objects.Params.ParamByName(‘ID’).AsInteger := AID;
____DataModule.Objects.Execute;
____DataModule.CommitTransacao;
__except on e:exception do
____begin
______WebApplication.ShowMessage(e.Message);
______DataModule.RollBackTransacao;
____end;
__end;
__Stream.Free;
end;
Como podem ver, faço um Update no ClientDataSet (DataModule.Objects).
É isso ai, abs.
Adriano Santos
http://www.twitter.com/delphi2delphi
http://www.twitter.com/asrsantos
Siga @tdevrocks no Twitter agora e fique por dentro de todas as atualizações do blog.
Siga também o autor @asrsantos
E a DLL que está no Google Code??? Já testasse?
http://groups.google.com/group/dbxfirebird
Pelo menos é compatível com o 2007/2009, atualmente estou usando o driver da CoreLab e está 100%. Não tive tempo para testar essa ai de cima, mas estou curioso.
Essa incompatibilidade não ocorre somente no 2007 mas também no 2009 onde eu tive o mesmo problema, só consegui resolver graças a este driver!