[Dúvida] Como Salvar Imagens no Banco de DAdos
Olá amigos!
Sou novato em Programação e estou criando um pequeno projeto, onde tenho imagens que quero que sejam salvas no banco de dados no formato PNG.
Uso Delphi 7 com Firebird 2.1 com um campo BLOB para a imagem, Conexão Interbase com, (1 IBtable, 1 IBTransaction, 1 IBDatabase e 1 Datasource) Um Data Modulo.
Tnho um campo TDBImage com 1 TButton com o seguinte comando:
if DMTeste.ibtable1.state = dsBrowse then DMTeste.ibtable1.edit;
If openpicturedialog1.Execute then
Ifrente.Picture.LoadFromFile(openpicturedialog1.FileName);
Visualiza imagens bmp, wmf e emf. Porém só ta aceitando salvar bmp se eu puser os outros ao mandar salvar e atualizar a imagem some. Sera porque?
Quero salvar imagens do tipo PNG no Banco Firebird tem como? Qual seria o comando?
Já ouvi dizer que dá até para salvar jpeg, porém não tenho a minima ideia de como fazer...se alguém puder me ajudar ficarei muito agradecido.
Obrigado e aguardo o contato dos amigos!
Sou novato em Programação e estou criando um pequeno projeto, onde tenho imagens que quero que sejam salvas no banco de dados no formato PNG.
Uso Delphi 7 com Firebird 2.1 com um campo BLOB para a imagem, Conexão Interbase com, (1 IBtable, 1 IBTransaction, 1 IBDatabase e 1 Datasource) Um Data Modulo.
Tnho um campo TDBImage com 1 TButton com o seguinte comando:
if DMTeste.ibtable1.state = dsBrowse then DMTeste.ibtable1.edit;
If openpicturedialog1.Execute then
Ifrente.Picture.LoadFromFile(openpicturedialog1.FileName);
Visualiza imagens bmp, wmf e emf. Porém só ta aceitando salvar bmp se eu puser os outros ao mandar salvar e atualizar a imagem some. Sera porque?
Quero salvar imagens do tipo PNG no Banco Firebird tem como? Qual seria o comando?
Já ouvi dizer que dá até para salvar jpeg, porém não tenho a minima ideia de como fazer...se alguém puder me ajudar ficarei muito agradecido.
Obrigado e aguardo o contato dos amigos!
Jore
Curtidas 0
Respostas
Emerson Nascimento
19/03/2010
tente seguir este tópico:
http://forum.devmedia.com.br/viewtopic.php?t=65012
http://forum.devmedia.com.br/viewtopic.php?t=65012
GOSTEI 0
Marcelo Cavalcanti
19/03/2010
Tente algo assim:
var
S: TStream;
MS: TMemoryStream;
begin
... MS := TMemoryStream.Create;
if OPD.Execute then // Localizar imagem
try
S := TFileStream.Create(OPD.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
...
TBlobField(DM.qUsuarios.FieldByName('IMAGEM')).LoadFromStream(MS);
qUsuarios.Post; finally
S.Free;
end;
finally
MS.Free;
end; Sds, www.swg2.com.br (Transformando suas informações em dados gerenciais)
S: TStream;
MS: TMemoryStream;
begin
... MS := TMemoryStream.Create;
if OPD.Execute then // Localizar imagem
try
S := TFileStream.Create(OPD.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
...
TBlobField(DM.qUsuarios.FieldByName('IMAGEM')).LoadFromStream(MS);
qUsuarios.Post; finally
S.Free;
end;
finally
MS.Free;
end; Sds, www.swg2.com.br (Transformando suas informações em dados gerenciais)
GOSTEI 0
Jore
19/03/2010
Olá amigo Marcelo Rezende Cavalcanti,
Como eu disse sou novato em programação...fiz assim com o código que você postou:
Cliquei sobre o botão no TButton que tinha o seguinte comando:
if DMTeste.ibtable1.state = dsBrowse then DMTeste.ibtable1.edit;
If openpicturedialog1.Execute then
Ifrente.Picture.LoadFromFile(openpicturedialog1.FileName);
E coloquei o que você postou no lugar...
A principio deu erro nos três pontinhos que tem no código.
Ao retirar os três pontinhos e dar F9 deu outro erro é este:
[Error] UNovo.pas(96): Undeclared identifier: 'OPD'
Amigos, desculpem a minha falta de conhecimento, mais preciso muito da ajuda de vocês!
Como eu disse sou novato em programação...fiz assim com o código que você postou:
Cliquei sobre o botão no TButton que tinha o seguinte comando:
if DMTeste.ibtable1.state = dsBrowse then DMTeste.ibtable1.edit;
If openpicturedialog1.Execute then
Ifrente.Picture.LoadFromFile(openpicturedialog1.FileName);
E coloquei o que você postou no lugar...
A principio deu erro nos três pontinhos que tem no código.
Ao retirar os três pontinhos e dar F9 deu outro erro é este:
[Error] UNovo.pas(96): Undeclared identifier: 'OPD'
Amigos, desculpem a minha falta de conhecimento, mais preciso muito da ajuda de vocês!
GOSTEI 0
Jore
19/03/2010
Emerson, Seu link tem várias dicas! Porém não consegui com nenhuma...
Olha só:
Tentei este :
E da este erro:
[Error] UNovo.pas(100): Undeclared identifier: 'LoadFromFile'
Olha só:
Tentei este :
begin if DMDados.ibtable1.state = dsBrowse then DMdados.ibtable1.edit; If openpicturedialog1.Execute then DBImage1.Picture.LoadFromFile(openpicturedialog1.FileName); if Opendialog1.Execute then begin DMDados.ibtable1.edit; dbimage1.Picture.LoadFromFile(Opendialog1.FileName); DMDados.ibtable1.LoadFromFile(Opendialog1.FileName); end; end;
E da este erro:
[Error] UNovo.pas(100): Undeclared identifier: 'LoadFromFile'
GOSTEI 0
Marcelo Cavalcanti
19/03/2010
Jore, alguma dificuldade com o código que te enviei!!! Tenho certeza que você conseguirá, pois é do meu próprio aplicativo, com Firebird!!!
Sds,
Marcelo Rezende Cavalcanti
--------------------------------------------------------------------
www.swg2.com.br (Transformando suas informações em dados gerenciais)
--------------------------------------------------------------------
www.swg2.com.br (Transformando suas informações em dados gerenciais)
GOSTEI 0
Jore
19/03/2010
Olá amigo Marcelo Rezende Cavalcanti
Como eu disse sou novato em programação...fiz assim com o código que você postou:
Cliquei sobre o botão no TButton que tinha o seguinte comando:
if DMTeste.ibtable1.state = dsBrowse then DMTeste.ibtable1.edit;
If openpicturedialog1.Execute then
Ifrente.Picture.LoadFromFile(openpicturedialog1.FileName);
E coloquei o que você postou no lugar...
Este:
*****************************************************
var
S: TStream;
MS: TMemoryStream;
begin
... MS := TMemoryStream.Create;
if OPD.Execute then // Localizar imagem
try
S := TFileStream.Create(OPD.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
...
TBlobField(DM.qUsuarios.FieldByName('IMAGEM')).LoadFromStream(MS);
qUsuarios.Post; finally
S.Free;
end;
finally
MS.Free;
end; *****************************************************
A principio deu erro nos três pontinhos que tem no código.
Ao retirar os três pontinhos e dar F9 deu outro erro é este:
[Error] UNovo.pas(96): Undeclared identifier: 'OPD'
Veja se pode me ajudar 8-))
Amigos, desculpem a minha falta de conhecimento, mais preciso muito da ajuda de vocês!
Como eu disse sou novato em programação...fiz assim com o código que você postou:
Cliquei sobre o botão no TButton que tinha o seguinte comando:
if DMTeste.ibtable1.state = dsBrowse then DMTeste.ibtable1.edit;
If openpicturedialog1.Execute then
Ifrente.Picture.LoadFromFile(openpicturedialog1.FileName);
E coloquei o que você postou no lugar...
Este:
*****************************************************
var
S: TStream;
MS: TMemoryStream;
begin
... MS := TMemoryStream.Create;
if OPD.Execute then // Localizar imagem
try
S := TFileStream.Create(OPD.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
...
TBlobField(DM.qUsuarios.FieldByName('IMAGEM')).LoadFromStream(MS);
qUsuarios.Post; finally
S.Free;
end;
finally
MS.Free;
end; *****************************************************
A principio deu erro nos três pontinhos que tem no código.
Ao retirar os três pontinhos e dar F9 deu outro erro é este:
[Error] UNovo.pas(96): Undeclared identifier: 'OPD'
Veja se pode me ajudar 8-))
Amigos, desculpem a minha falta de conhecimento, mais preciso muito da ajuda de vocês!
GOSTEI 0
Jore
19/03/2010
Veja como esta o meu codigo:
procedure TFrmNovo.Button1Click(Sender: TObject);
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
TBlobField(DMdados.ibtable1('IMAGEM')).LoadFromStream(MS);
qUsuarios.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
********************************************************************
Ta dando erro nesta linha: TBlobField(DMdados.ibtable1('IMAGEM')).LoadFromStream(MS);
Seguinte mensagem: [Error] UNovo.pas(106): Missing operator or semicolon
procedure TFrmNovo.Button1Click(Sender: TObject);
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
TBlobField(DMdados.ibtable1('IMAGEM')).LoadFromStream(MS);
qUsuarios.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
********************************************************************
Ta dando erro nesta linha: TBlobField(DMdados.ibtable1('IMAGEM')).LoadFromStream(MS);
Seguinte mensagem: [Error] UNovo.pas(106): Missing operator or semicolon
GOSTEI 0
Emerson Nascimento
19/03/2010
tente:
TBlobField(DMdados.ibtable1.FieldByName('IMAGEM')).LoadFromStream(MS);
DMdados.ibtable1.Post;
TBlobField(DMdados.ibtable1.FieldByName('IMAGEM')).LoadFromStream(MS);
DMdados.ibtable1.Post;
GOSTEI 0
Jore
19/03/2010
Ola amigos,
Com a juda de vocês acho que j´já terei exito.
Bom, agora que o amigo Emerson, me ajudou com a correção do codigo, o programa já esta executando. Porem ainda da um erro. Vejam:
'Not in edit mode'
Meu codigo agora eh:
Como posso estar resolvendo este problema?
Obrigado pela ajuda amigos!!
Com a juda de vocês acho que j´já terei exito.
Bom, agora que o amigo Emerson, me ajudou com a correção do codigo, o programa já esta executando. Porem ainda da um erro. Vejam:
'Not in edit mode'
Meu codigo agora eh:
var S: TStream; MS: TMemoryStream; begin MS := TMemoryStream.Create; if openpicturedialog2.Execute then // Localizar imagem try S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead); try S.Position := 0; MS.LoadFromStream(S); MS.Seek(0, soFromBeginning); if (MS.Size = 0) then Exit; TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS); DMdados.ibtable1.Post; finally S.Free; end; finally MS.Free; end; end;
Como posso estar resolvendo este problema?
Obrigado pela ajuda amigos!!
GOSTEI 0
Wilson Junior
19/03/2010
O registro da sua tabela "DMdados.ibtable1." deve estar em modo de edição (Edit) ou inclusão (Insert ou Append) para poder efetuar a gravação (Post).
Espero ter colaborado.
Espero ter colaborado.
GOSTEI 0
Jore
19/03/2010
Olá amigo
Você poderia me dizer em que parte do meu codigo eu devo locar este comando?
Pois coloquei nesta parte DMdados.ibtable1.Insert; depois tentei DMdados.ibtable1.Append; aqui e continuou dando erro.
Veja o codigo:
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
Você poderia me dizer em que parte do meu codigo eu devo locar este comando?
Pois coloquei nesta parte DMdados.ibtable1.Insert; depois tentei DMdados.ibtable1.Append; aqui e continuou dando erro.
Veja o codigo:
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
GOSTEI 0
Jore
19/03/2010
Olá amigo Lehapan,
Você poderia me dizer em que parte do meu codigo eu devo locar este comando?
Pois coloquei nesta parte DMdados.ibtable1.Insert; depois tentei DMdados.ibtable1.Append; aqui e continuou dando erro.
Veja o codigo:
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
Você poderia me dizer em que parte do meu codigo eu devo locar este comando?
Pois coloquei nesta parte DMdados.ibtable1.Insert; depois tentei DMdados.ibtable1.Append; aqui e continuou dando erro.
Veja o codigo:
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
GOSTEI 0
Thiago Santana
19/03/2010
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit; Dmdados.IbTable1.open; Dmdados.IbTable1.append; // <- Utilize um desse aí que irá resolver. TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
Espero ter ajudado!
AbraçoO
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit; Dmdados.IbTable1.open; Dmdados.IbTable1.append; // <- Utilize um desse aí que irá resolver. TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
Espero ter ajudado!
AbraçoO
GOSTEI 0
Wilson Junior
19/03/2010
1º - em qual registro você irá salvar a imagem? Se for um registro novo, deve ter outros campos nesta tabela que devem ser preenchidos;
2º - A sua tabela deve estar aberta (DMdados.ibtable1.Open);
3º - Esta rotina poderia somente atribuir a imagem para o campo "IMGFRENTE" e ser salvo na sua manutenção do registro.
Qualquer dúvida post aí.
Espero ter colaborado.
2º - A sua tabela deve estar aberta (DMdados.ibtable1.Open);
3º - Esta rotina poderia somente atribuir a imagem para o campo "IMGFRENTE" e ser salvo na sua manutenção do registro.
Qualquer dúvida post aí.
Espero ter colaborado.
GOSTEI 0
Jore
19/03/2010
Lehapan,
Tenho outros campos sim, como nome, tamanho... e ao acessar a imagem da erro porque esta apagando o conteudo dos outros campos.
Mesmo colocando assim da erro veja:
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
DMdados.ibtable1.Open;
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
ESte codigo abaixo eu usava antes. Porem ele não esta salvando imagens Jpeg e nem PNG apesar de me deixar vislualizar. So que na hora que clico em salvar a imagem some.
begin
if DMDados.ibtable1.state = dsBrowse then DMDados.ibtable1.edit;
If openpicturedialog1.Execute then
DBImage1.Picture.LoadFromFile(openpicturedialog1.FileName);
end;
Tenho outros campos sim, como nome, tamanho... e ao acessar a imagem da erro porque esta apagando o conteudo dos outros campos.
Mesmo colocando assim da erro veja:
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
DMdados.ibtable1.Open;
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
ESte codigo abaixo eu usava antes. Porem ele não esta salvando imagens Jpeg e nem PNG apesar de me deixar vislualizar. So que na hora que clico em salvar a imagem some.
begin
if DMDados.ibtable1.state = dsBrowse then DMDados.ibtable1.edit;
If openpicturedialog1.Execute then
DBImage1.Picture.LoadFromFile(openpicturedialog1.FileName);
end;
GOSTEI 0
Thiago Santana
19/03/2010
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
DMdados.ibtable1.Append; // Criando um mnovo registro DmDados.ibTable.Fieldbyname(' CampoNome').asString := EditNome.text; // Irá passar tds os campos que desejar gravar
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
DMdados.ibtable1.Append; // Criando um mnovo registro DmDados.ibTable.Fieldbyname(' CampoNome').asString := EditNome.text; // Irá passar tds os campos que desejar gravar
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
GOSTEI 0
Emerson Nascimento
19/03/2010
não sei como você montou seu programa, mas não recomendo usar o append/insert. acho melhor você testar o estado do dataset antes de tentar manipular o campo de imagem.
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
if not (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
try
DMdados.ibtable1.Edit;
except
end;
if (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
begin
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post; // este Post é realmente necessário nesse momento?
end
else
ShowMessage('Registro não está em modo de edição!');
finally
S.Free;
end;
finally
MS.Free;
end;
end;
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog2.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog2.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
if not (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
try
DMdados.ibtable1.Edit;
except
end;
if (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
begin
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post; // este Post é realmente necessário nesse momento?
end
else
ShowMessage('Registro não está em modo de edição!');
finally
S.Free;
end;
finally
MS.Free;
end;
end;
GOSTEI 0
Jore
19/03/2010
Ola ThiiaGuinho
Veja o erro que deu no seu codigo...
procedure TFrmNovo.Button1Click(Sender: TObject);
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog1.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog1.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
DMdados.ibtable1.Append; // Criando um mnovo registro
DmDados.ibTable1.Fieldbyname(' imgfrente').asString := dbimage1.text;
// Irá passar tds os campos que desejar gravar
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
Onde esta escrito em vermelho eu coloquei o nome do DBImage1 que ia receber a imagem ta certo?
O erro esta na parte escrita em azul.
ESte erro: [Error] UNovo.pas(106): Undeclared identifier: 'text'
***********************************************************************************
Ola Emerson
Tentei adicionar uma imagem jpeg com o seu código e deu este erro:
procedure TFrmNovo.Button1Click(Sender: TObject);
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog1.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog1.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
if not (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
try
DMdados.ibtable1.Edit;
except
end;
if (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
begin
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post; // este Post é realmente necessário nesse momento?
end
else
ShowMessage('Registro não está em modo de edição!');
finally
S.Free;
end;
finally
MS.Free;
end;
end;
************************************************************
Obrigado amigos! Nao me abandonem...
Veja o erro que deu no seu codigo...
procedure TFrmNovo.Button1Click(Sender: TObject);
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog1.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog1.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
DMdados.ibtable1.Append; // Criando um mnovo registro
DmDados.ibTable1.Fieldbyname(' imgfrente').asString := dbimage1.text;
// Irá passar tds os campos que desejar gravar
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post;
finally
S.Free;
end;
finally
MS.Free;
end;
end;
Onde esta escrito em vermelho eu coloquei o nome do DBImage1 que ia receber a imagem ta certo?
O erro esta na parte escrita em azul.
ESte erro: [Error] UNovo.pas(106): Undeclared identifier: 'text'
***********************************************************************************
Ola Emerson
Tentei adicionar uma imagem jpeg com o seu código e deu este erro:
procedure TFrmNovo.Button1Click(Sender: TObject);
var
S: TStream;
MS: TMemoryStream;
begin
MS := TMemoryStream.Create;
if openpicturedialog1.Execute then // Localizar imagem
try
S := TFileStream.Create(openpicturedialog1.FileName, fmOpenRead);
try
S.Position := 0;
MS.LoadFromStream(S);
MS.Seek(0, soFromBeginning);
if (MS.Size = 0) then
Exit;
if not (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
try
DMdados.ibtable1.Edit;
except
end;
if (DMdados.ibtable1.State in [dsEdit, dsInsert]) then
begin
TBlobField(DMdados.ibtable1.FieldByName('IMGFRENTE')).LoadFromStream(MS);
DMdados.ibtable1.Post; // este Post é realmente necessário nesse momento?
end
else
ShowMessage('Registro não está em modo de edição!');
finally
S.Free;
end;
finally
MS.Free;
end;
end;
************************************************************
Obrigado amigos! Nao me abandonem...
GOSTEI 0
Emerson Nascimento
19/03/2010
para que o código funcione você terá de trabalhar com Image e não DBImage.
GOSTEI 0
Jore
19/03/2010
Amigo Emerson,
Como faço para ligar o Image no lugar do DBImage...digo os campos DataSource e DataField para o Image receber a imagem e depois para ela poder ser salva no Banco de dados.
Muito Obrigado pela ajuda de todos!
Como faço para ligar o Image no lugar do DBImage...digo os campos DataSource e DataField para o Image receber a imagem e depois para ela poder ser salva no Banco de dados.
Muito Obrigado pela ajuda de todos!
GOSTEI 0
Emerson Nascimento
19/03/2010
você terá de fazer essa manipulação via código.
pode ser feito no evento AfterScroll do dataset. Ali você preenche o Image com o conteúdo do campo.
pode ser feito no evento AfterScroll do dataset. Ali você preenche o Image com o conteúdo do campo.
GOSTEI 0
Jore
19/03/2010
Ola Emerson,
Por um acaso voce teria um exemplo de como se faz isso? Como já disse sou novato e isso esta além de minhas forças.
Mesmo assim Obrigado!
Por um acaso voce teria um exemplo de como se faz isso? Como já disse sou novato e isso esta além de minhas forças.
Mesmo assim Obrigado!
GOSTEI 0