CanonTG Posted April 8, 2014 Report Share Posted April 8, 2014 Boas, quero inserir um pdf ao meu campo blob da base de dados. Adiciona bem mas ao abrir danifica o ficheiro. Adicionar campo blob := Query.CreateBlobStream(Query.FieldByName('anexos'), bmWrite);try blob.Seek(0, soFromBeginning); try blob.CopyFrom(TFileStream.Create(Edit3.Text, fmOpenRead), TFileStream.Create(Edit3.Text, fmOpenRead).Size) finally TFileStream.Create(Edit3.Text, fmOpenRead).Free end; finally blob.Free; end; Abrir o ficheiro var //Tratando Blob S : TMemoryStream; FileStream : TFileStream; blob:TStream; //Confirmação de informações resultado : Integer; str:String; begin Query.SQL.Clear; Query.SQL.Text :='select anexos from oportunidades where ' +'nOportunidade = '''+datasource1.dataset.fieldbyname('nOportunidade').AsString+''' '; Query.Open; //Contando o resultado... resultado := Query.RecordCount; S := TMemoryStream.Create; try //Criação do arquivo que receberá o pdf... FileStream := TFileStream.Create(Query.FieldByName('anexos').AsString, fmCreate); //Salvamento do conteúdo do arquivo dentro da memória Ram... TBlobField(Query.FieldByName('anexos')).SaveToStream(S); //Ainda não sei a função do posicionamento... S.Position := 0; //Transferência dos dados da Ram para o arquivo criado FileStream.CopyFrom(S, S.Size); //Abertura do arquivo. //RESULT := 'c:\arquivo.pdf'; str:=Query.FieldByName('anexos').AsString; ShellExecute(handle, 'open',PChar(str),nil,nil,SW_NORMAL); finally S.Free; FileStream.Free; end; Link to comment Share on other sites More sharing options...
Kline777 Posted April 8, 2014 Report Share Posted April 8, 2014 Tens de gravar o ficheiro para o disco... o ShellExecute tem de receber um caminho onde estás a dar o Str. Se o teu pdf está a carregar bem para o FileStream entao deves usar a funçao SavetoFile para gravar para um c:\temp.pdf por exemplo e abrir esse caminho no ShellExecute Link to comment Share on other sites More sharing options...
CanonTG Posted April 8, 2014 Author Report Share Posted April 8, 2014 Podes-me deixar aqui um exemplo? Link to comment Share on other sites More sharing options...
CanonTG Posted April 8, 2014 Author Report Share Posted April 8, 2014 (edited) Ja criei o ficheir no C:\ e continua danificado :/ Acho que o meu problema é ao adicionar a bd, alguém sabe o que se passa? Edited April 8, 2014 by CanonTG Link to comment Share on other sites More sharing options...
Rui Carlos Posted April 12, 2014 Report Share Posted April 12, 2014 Experimenta codificar o conteúdo do ficheiro em base64. Adicionalmente, não me parece grande ideia colocar ficheiros na base de dados. Os ficheiros deviam estar no sistema de ficheiros, e apenas guardavas a path do ficheiro em disco. 1 Report Rui Carlos Gonçalves Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now