ActiveDelphi - Índice do Fórum ActiveDelphi
.: O site do programador Delphi! :.
 
 FAQFAQ   PesquisarPesquisar   MembrosMembros   GruposGrupos   RegistrarRegistrar 
 PerfilPerfil   Entrar e ver Mensagens ParticularesEntrar e ver Mensagens Particulares   EntrarEntrar 

Carregar Img salva no Banco de dados FireBird [Resolvido!]
Ir à página 1, 2, 3  Próximo
 
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados
Exibir mensagem anterior :: Exibir próxima mensagem  
Autor Mensagem
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Dom Jan 22, 2017 10:38 pm    Assunto: Carregar Img salva no Banco de dados FireBird [Resolvido!] Responder com Citação

Boa Noite!

Tenho um Form de cadastro onde utilizo o seguinte procedimento para carregar uma imagem com um TImage:

Código:
procedure TFrmCadastro_Aluno.BitBtn1Click(Sender: TObject);
begin
     if Foto_Aluno.Execute then
     begin
        Foto.Picture.LoadFromFile(Foto_Aluno.FileName);
        dm_dados.tbl_aluno.Edit;
        dm_dados.tbl_alunoALUNO_FOTO.Value:=Foto_Aluno.FileName;
     end;

end;


Até aqui, ele salva o caminho no banco de dados FireBird normalmente.

Mas na hora de efetuar uma consulta com este código:

Código:
procedure Tdm_dados.SqlConsAlunoAfterPost(DataSet: TDataSet);
begin
     Foto.Picture.LoadFromFile(dm_dados.tbl_alunoALUNO_FOTO.AsString);
end;


Aparece os Seguintes erros:

Código:
[Error] UDM_Dados.pas(153): Undeclared identifier: 'Foto'
[Error] UDM_Dados.pas(153): Missing operator or semicolon


Mas se eu inserir:
Código:
var
  dm_dados: Tdm_dados; Foto: String;


Aparece o seguinte erro:

Código:
[Error] UDM_Dados.pas(153): Record, object or class type required


Uso para o cadastro um IBDataBase, um IBTransaction, um IBTable e um DataSource.

Para as Consultas uso um IBQuery e um DataSource.

Gerencio meu banco de dados pelo IBOConsole.

Como posso fazer para que na hora que digitar o código do usuário ou nome por exemplo, ele me retorne todos os dados e a imagem referente ao cadastro?

O Componente que uso para exibir as imagens é um TImage e deixo uma imagem pré-definida caso não tenha nada gravado nela.

Esta é a minha segunda dúvida.

Se não cadastrar nenhuma foto, como posso deixar uma outra imagem como padrão no lugar?

A terceira dúvida é a seguinte:

Quando salvo as imagens, elas ficam sendo exibidas desde que estejam gravadas na pasta onde estão inseridas, mas se o usuário apagá-las, elas desaparecem. Então como posso fazer com que ao salvar o cadastro, o aplicativo faça uma cópia para uma outra pasta dentro do Servidor e busque a consulta das imagens por ela, assim, mesmo que o usuário apague a imagem de onde ele gravou, a foto continua sendo exibida.

Procurei vários exemplos aqui neste fórum e mesmo em outros e ainda não consegui resolver estas dúvidas.

Agradeço a atenção!


Editado pela última vez por fmoura em Sex Fev 17, 2017 4:34 pm, num total de 3 vezes
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Seg Jan 23, 2017 7:58 am    Assunto: Responder com Citação

Citação:
[Error] UDM_Dados.pas(153): Undeclared identifier: 'Foto'

Esse erro quer dizer que não foi encontrado nenhuma referência para 'Foto'

se você declarar a variável foto como sendo do tipo string vai dar erro mesmo, pois você a está utilizando como se fosse um TImage
Código:
Foto.Picture.LoadFromFile(dm_dados.tbl_presoPRESO_FOTO.AsString);


nesse caso, substitua Foto pelo nome do TImage que vai receber a imagem

Citação:
[Error] UDM_Dados.pas(153): Missing operator or semicolon

Esse erro aparece geralmente quando esquecemos do ; no final de alguma linha.

1º Dúvida:
Para carregar a imagem, primeiro você vai precisar trazer os dados ex:

supondo que o usuário tenha digitado 10 como código do usuário que ele quer buscar

supondo que na sua qry você traga nome, endereço e imagem, o sql da query seria assim

Código:
'SELECT NOME, ENDERECO, FOTO FROM USUARIO WHERE ID_USUARIO = :ID_USUARIO'

no delphi, você passaria o ID do usuário como parâmetro

Código:
qry.Params.ParamByName('ID_USUARIO').Value := edtCodigo.Text;
qry.open;


e para carregar a imagem, fica assim:
Código:
if FileExists(qry.FieldByName('FOTO').AsString) then
begin
  image.Picture.LoadFromFile(qry.FieldByName('FOTO').AsString);
end;


2ª Dúvida:
Para copiar a imagem, você pode utilizar o comando CopyFile, a sintaxe é CopyFile(Origem, Destino, True);
ex:
Código:
CopyFile(qry.FieldByName('FOTO').AsString, 'C:\Imagem\foto.jpg', True);


3ª Dúvida:
Você vai ter que criar essa imagem padrão e deixá-la na pasta da aplicação ou na pasta padrão de fotos, ai na hora de carregar a imagem, você faz assim:
Código:
if FileExists(qry.FieldByName('FOTO').AsString) then
begin
  image.Picture.LoadFromFile(qry.FieldByName('FOTO').AsString);
end
else
begin
  image.picture.LoadFromFile('Endereco_Imagem_Padrao');
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Ter Jan 24, 2017 9:49 pm    Assunto: Responder com Citação

leo_cj escreveu:
Citação:
[Error] UDM_Dados.pas(153): Undeclared identifier: 'Foto'

Esse erro quer dizer que não foi encontrado nenhuma referência para 'Foto'

se você declarar a variável foto como sendo do tipo string vai dar erro mesmo, pois você a está utilizando como se fosse um TImage
Código:
Foto.Picture.LoadFromFile(dm_dados.tbl_alunoALUNO_FOTO.AsString);


nesse caso, substitua Foto pelo nome do TImage que vai receber a imagem

Citação:
[Error] UDM_Dados.pas(153): Missing operator or semicolon

Esse erro aparece geralmente quando esquecemos do ; no final de alguma linha.

1º Dúvida:
Para carregar a imagem, primeiro você vai precisar trazer os dados ex:

supondo que o usuário tenha digitado 10 como código do usuário que ele quer buscar

supondo que na sua qry você traga nome, endereço e imagem, o sql da query seria assim

Código:
'SELECT NOME, ENDERECO, FOTO FROM USUARIO WHERE ID_USUARIO = :ID_USUARIO'

no delphi, você passaria o ID do usuário como parâmetro

Código:
qry.Params.ParamByName('ID_USUARIO').Value := edtCodigo.Text;
qry.open;


e para carregar a imagem, fica assim:
Código:
if FileExists(qry.FieldByName('FOTO').AsString) then
begin
  image.Picture.LoadFromFile(qry.FieldByName('FOTO').AsString);
end;


2ª Dúvida:
Para copiar a imagem, você pode utilizar o comando CopyFile, a sintaxe é CopyFile(Origem, Destino, True);
ex:
Código:
CopyFile(qry.FieldByName('FOTO').AsString, 'C:\Imagem\foto.jpg', True);


3ª Dúvida:
Você vai ter que criar essa imagem padrão e deixá-la na pasta da aplicação ou na pasta padrão de fotos, ai na hora de carregar a imagem, você faz assim:
Código:
if FileExists(qry.FieldByName('FOTO').AsString) then
begin
  image.Picture.LoadFromFile(qry.FieldByName('FOTO').AsString);
end
else
begin
  image.picture.LoadFromFile('Endereco_Imagem_Padrao');
end;


Boa Noite leo_cj!

Fiz as correções que me indicou e o aplicativo compilou normalmente, mas na hora de fazer uma pesquisa ele aparece o seguinte erro:
Código:
ProjectEscola.exe raised exception class EDatabaseError with message 'SqlConsAluno: Parameter 'foto_aluno' not found'.
Process stopped. Use Step or Run to continue.


O estranho é que o parâmetro foi criado e adicionado no meu datamodule.
Aqui os códigos:
SQL TStrings:

Código:
select * from TBL_ALUNO
where   
         ALUNO_NOME like :nome_aluno and
         ALUNO_MATRICULA= :matricula_aluno and
         ALUNO_DATA_NASC= :idade_aluno and
         ALUNO_SOBRENOME like :sobrenome_aluno and
         ALUNO_PAI like :pai_aluno and
         ALUNO_MAE like :mae_aluno and
         ALUNO_DAT_ENTRADA>= :entrada_aluno and
         ALUNO_SAIDA>= :saida_aluno and
         ALUNO_CPF = :cpf_aluno and 
         ALUNO_RG = :rg_aluno and
         ALUNO_FOTO = :foto_aluno


Params:
Código:
 
         nome_aluno
         matricula_aluno
         idade_aluno
         sobrenome_aluno
         pai_aluno
         mae_aluno
         entrada_aluno
         saida_aluno
         cpf_aluno
         rg_aluno
         foto_aluno


O parâmetro foto, deixei como ftVariant.
E aqui o código utilizado na procedure do meu DataModule:


Código:
procedure Tdm_dados.SqlConsAlunoAfterPost(DataSet: TDataSet);
var
  Foto: Variant;
begin
     Foto.Picture.LoadFromFile(dm_dados.tbl_alunoALUNO_FOTO.AsString);
     if FileExists(dm_dados.SqlConsAluno.FieldByName('foto_aluno').AsString) then
begin
  Foto.Picture.LoadFromFile(dm_dados.sqlconsaluno.FieldByName('foto_aluno').AsString);
end;
end;


O que pode estar errado neste código?
Agradeço a atenção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Jan 25, 2017 7:52 am    Assunto: Responder com Citação

certo, essa variável foto sua, qual o sentido dela?
pra você carregar a foto, você vai precisar de um TImage, supondo que eu tenha um TImage chamado imgFotoAluno, meu código ficaria assim:
Código:
imgFotoAluno.Picture.LoadFromFile(caminho_foto)


quanto ao erro do campo, repare que o seu campo se chama ALUNO_FOTO, porém você está tentando buscar o valor do campo foto_aluno, sendo que foto aluno é o nomo do seu parâmetro

exemplo de uso do parâmetro:
Código:
dm_dados.SqlConsAluno.close;
dm_dados.SqlConsAluno.ParamByName('foto_aluno').value := caminho_foto;
dm_dados.SqlConsAluno.open;


para buscar o valor do campo, o uso correto seria assim:
Código:
procedure Tdm_dados.SqlConsAlunoAfterPost(DataSet: TDataSet);
var
  Foto: Variant;
begin
  Foto.Picture.LoadFromFile(dm_dados.tbl_alunoALUNO_FOTO.AsString);
  if FileExists(dm_dados.SqlConsAluno.FieldByName('ALUNO_FOTO').AsString) then
  begin
    Foto.Picture.LoadFromFile(dm_dados.sqlconsaluno.FieldByName('ALUNO_FOTO').AsString);
  end;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Sáb Jan 28, 2017 8:58 pm    Assunto: Responder com Citação

leo_cj escreveu:
certo, essa variável foto sua, qual o sentido dela?
pra você carregar a foto, você vai precisar de um TImage, supondo que eu tenha um TImage chamado imgFotoAluno, meu código ficaria assim:
Código:
imgFotoAluno.Picture.LoadFromFile(caminho_foto)


quanto ao erro do campo, repare que o seu campo se chama ALUNO_FOTO, porém você está tentando buscar o valor do campo foto_aluno, sendo que foto aluno é o nomo do seu parâmetro

exemplo de uso do parâmetro:
Código:
dm_dados.SqlConsAluno.close;
dm_dados.SqlConsAluno.ParamByName('foto_aluno').value := caminho_foto;
dm_dados.SqlConsAluno.open;


para buscar o valor do campo, o uso correto seria assim:
Código:
procedure Tdm_dados.SqlConsAlunoAfterPost(DataSet: TDataSet);
var
  Foto: Variant;
begin
  Foto.Picture.LoadFromFile(dm_dados.tbl_alunoALUNO_FOTO.AsString);
  if FileExists(dm_dados.SqlConsAluno.FieldByName('ALUNO_FOTO').AsString) then
  begin
    Foto.Picture.LoadFromFile(dm_dados.sqlconsaluno.FieldByName('ALUNO_FOTO').AsString);
  end;
end;

Boa Noite leo_cj!

Coloquei a variável foto porque sem ela não consigo compilar o código.
Uso sim um TImage no qual renomeei com o nome Foto para identificá-lo.
Segui o exemplo que me passou e mesmo assim aparece o seguinte erro na hora de efetuar a consulta:
Código:
Project_Escola.exe raised exception class EDataBaseError with message 'SqlConsAluno: Parameter 'ALUNO_FOTO' not found.'
Process Stopped. Use Step or Run for continue.


Meu código na página de consulta é esse:
Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
      dm_dados.sqlconsaluno.Close;
      dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
      dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.ParamByName('ALUNO_FOTO').Value := EdtMatricula.Text;
      dm_dados.sqlconsaluno.Open;
end;


Nas consultas sem as imagens, os resultados são exibidos normalmente, mas quando tento fazer isso selecionando uma imagem salva, aparece este erro.

Para o cadastro das imagens, uso o TImage, um OpenDialog e um DBEdit para que ele registre o caminho da pasta.

Mas na consulta estou usando apenas um TImage.
Tentei adicionar o DBEdit e o OpenDialog, mas não obtive êxito.
O que está errado aqui?
Agradeço a Atenção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Seg Jan 30, 2017 7:57 am    Assunto: Responder com Citação

Nesse caso agora, acredito que o problema seja que você mudou a linha

Código:
dm_dados.SqlConsAluno.ParamByName('foto_aluno').value := EdtMatricula.Text;


para

Código:
dm_dados.sqlconsaluno.ParamByName('ALUNO_FOTO').Value := EdtMatricula.Text;


ALUNO_FOTO é o nome da coluna no banco de dados e nesse caso, o seu Field vem com o nome ALUNO_FOTO, no WHERE, você tem a seguinte condição:
Código:
ALUNO_FOTO = :foto_aluno


ou seja o campo ALUNO_FOTO deve ser igual ao parâmetro foto_aluno

então no FieldByName da query você deve utilizar ALUNO_FOTO, pois faz referência ao Field, e no ParamByName você deve utilizar foto_aluno, pois faz referência ao parâmetro

quanto a variável Foto, o seu componente TImage foi criado em tempo de projeto ou execução?

Pois se o TImage chama Foto, não precisa criar uma variável Foto para que o código funcione, porque assim você estaria passando valor para a variável Foto e não para o TImageFoto

Logo abaixo do Type, verifique se junto com a declaração dos demais componentes, existe também o Foto: TImage;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Seg Jan 30, 2017 3:25 pm    Assunto: Responder com Citação

leo_cj escreveu:
Nesse caso agora, acredito que o problema seja que você mudou a linha

Código:
dm_dados.SqlConsAluno.ParamByName('foto_aluno').value := EdtMatricula.Text;


para

Código:
dm_dados.sqlconsaluno.ParamByName('ALUNO_FOTO').Value := EdtMatricula.Text;


ALUNO_FOTO é o nome da coluna no banco de dados e nesse caso, o seu Field vem com o nome ALUNO_FOTO, no WHERE, você tem a seguinte condição:
Código:
ALUNO_FOTO = :foto_aluno


ou seja o campo ALUNO_FOTO deve ser igual ao parâmetro foto_aluno

então no FieldByName da query você deve utilizar ALUNO_FOTO, pois faz referência ao Field, e no ParamByName você deve utilizar foto_aluno, pois faz referência ao parâmetro

quanto a variável Foto, o seu componente TImage foi criado em tempo de projeto ou execução?

Pois se o TImage chama Foto, não precisa criar uma variável Foto para que o código funcione, porque assim você estaria passando valor para a variável Foto e não para o TImageFoto

Logo abaixo do Type, verifique se junto com a declaração dos demais componentes, existe também o Foto: TImage;


Boa Tarde leo_cj!

Existe sim o componente Foto: TImage; no Type como me peguntou.
Apaguei a variável foto e na hora de compilar ele me dá o seguinte erro agora:
Código:
Project_Escola.exe raised exception class EDataBaseError with message 'SqlConsAluno: Parameter 'ALUNO_FOTO' not found.'
Process Stopped. Use Step or Run for continue.
.

Mas se eu trocar o parâmetro para foto_aluno, aparece o mesmo erro só que com o parâmetro 'foto_aluno'. Assim:
Código:
Project_Escola.exe raised exception class EDataBaseError with message 'SqlConsAluno: Parameter 'foto_aluno' not found.'
Process Stopped. Use Step or Run for continue.

Já nem sei mais o que está acontecendo.
Agradeço a atenção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Seg Jan 30, 2017 3:40 pm    Assunto: Responder com Citação

ele não está encontrando o parâmetro, verifique em seu sql e nos parametros do SqlConsAluno se o parâmetro existe
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Seg Jan 30, 2017 4:12 pm    Assunto: Responder com Citação

leo_cj escreveu:
ele não está encontrando o parâmetro, verifique em seu sql e nos parametros do SqlConsAluno se o parâmetro existe


Boa Tarde leo_cj!

No meu SQL TStrings criei o parâmetro: ALUNO_FOTO = :foto_aluno

No Params criei o parâmetro: foto_aluno com um DataType do tipo ftVariant.

E na página de cadastro uso os seguintes códigos:

Código:
procedure TFrmCadastro_Aluno.BitBtn1Click(Sender: TObject);
begin
     if Foto_Aluno.Execute then
     begin
        Foto.Picture.LoadFromFile(foto_aluno.FileName);
        dm_dados.tbl_aluno.Edit;
        dm_dados.tbl_alunoALUNO_FOTO.Value :=foto_aluno.FileName;
     end;


Na página de consulta por número da matrícula, o código é este:

Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
      dm_dados.sqlconsaluno.Close;
      dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
      dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.ParamByName('foto_aluno').Value := EdtMatricula.Text;
      dm_dados.sqlconsaluno.Open;
end;


E quando executo o código aparece os erros que lhe falei.

O que está errado aqui?

Agradeço a atenção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
natanbh1
Colaborador
Colaborador


Registrado: Terça-Feira, 15 de Março de 2011
Mensagens: 3093
Localização: Belo Horizonte - MG

MensagemEnviada: Ter Jan 31, 2017 9:27 am    Assunto: Responder com Citação

Repare que no código SQL que você postou:
Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
      dm_dados.sqlconsaluno.Close;
      dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
      dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.ParamByName('foto_aluno').Value := EdtMatricula.Text;
      dm_dados.sqlconsaluno.Open;
end;


Não tem o parâmetro foto_aluno, somente matricula_aluno, por isso o erro.

Remova a linha abaixo para teste:

Código:
dm_dados.sqlconsaluno.ParamByName('foto_aluno').Value := EdtMatricula.Text;

_________________
''A persistência é o caminho para o êxito.''
Charlie Chaplin
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular Enviar E-mail
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Qua Fev 01, 2017 8:47 am    Assunto: Responder com Citação

natanbh1 escreveu:
Repare que no código SQL que você postou:
Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
      dm_dados.sqlconsaluno.Close;
      dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
      dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.ParamByName('foto_aluno').Value := EdtMatricula.Text;
      dm_dados.sqlconsaluno.Open;
end;


Não tem o parâmetro foto_aluno, somente matricula_aluno, por isso o erro.

Remova a linha abaixo para teste:

Código:
dm_dados.sqlconsaluno.ParamByName('foto_aluno').Value := EdtMatricula.Text;


Bom Dia nathanbh1!

A linha está no código sim, colocada abaixo do ParamByName('matricula_aluno').

Já fiz várias modificações e testes e até agora não consegui resolver este problema.

Agradeço a atenção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Fev 01, 2017 8:59 am    Assunto: Responder com Citação

O que o natan quis dizer, é que no SQL da sua query, o parâmetro foto_aluno não existe

observe o SQL que você postou:
Código:
dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');


aqui temos apenas o parâmetro matricula_aluno, não temos foto_aluno
porém na passagem dos parâmetros você passa tanto matricula_aluno quanto foto_aluno

Código:
dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.ParamByName('foto_aluno').Value := EdtMatricula.Text;


existe a necessidade de filtrar pelo caminho da foto?
caso não, siga a sugestão do natan, com isso seu código ficará assim:

Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
      dm_dados.sqlconsaluno.Close;
      dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
      dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.Open;
end;
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Qua Fev 01, 2017 9:18 am    Assunto: Responder com Citação

leo_cj escreveu:
O que o natan quis dizer, é que no SQL da sua query, o parâmetro foto_aluno não existe

observe o SQL que você postou:
Código:
dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');


aqui temos apenas o parâmetro matricula_aluno, não temos foto_aluno
porém na passagem dos parâmetros você passa tanto matricula_aluno quanto foto_aluno

Código:
dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.ParamByName('foto_aluno').Value := EdtMatricula.Text;


existe a necessidade de filtrar pelo caminho da foto?
caso não, siga a sugestão do natan, com isso seu código ficará assim:

Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
      dm_dados.sqlconsaluno.Close;
      dm_dados.sqlconsaluno.SQL.Clear;
      dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
      dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
      dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
      dm_dados.sqlconsaluno.Open;
end;


Bom Dia leo_cj!

Já havia feito este teste e o erro realmente desaparece, mas neste caso na hora de executar a consulta, a foto não carrega.
Falta inserir ou remover alguma outra linha de código?

Agradeço a atenção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
leo_cj
Colaborador
Colaborador


Registrado: Sábado, 26 de Março de 2011
Mensagens: 1335

MensagemEnviada: Qua Fev 01, 2017 10:09 am    Assunto: Responder com Citação

Como você está utilizando um TImage, você precisa carregar a imagem manualmente

ex:
Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
  dm_dados.sqlconsaluno.Close;
  dm_dados.sqlconsaluno.SQL.Clear;
  dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
  dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
  dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
  dm_dados.sqlconsaluno.Open;
  if (not dm_dados.sqlconsaluno.IsEmpty) then
    Foto.Picture.LoadFromFile(dm_dados.tbl_alunoALUNO_FOTO.AsString);
end;


isso para a primeira imagem, para trocar a imagem de acordo com a troca do registro, você vai precisar utilizar o evento OnScroll da query para que trocar a imagem de acordo com o registro selecionado

ou então você pode criar um campo calculado do tipo blob que carrega a imagem, ai em vez de usar um TImage você usaria um TDBImage ligado nesse campo blob
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
fmoura
Novato
Novato


Registrado: Quinta-Feira, 25 de Agosto de 2016
Mensagens: 76

MensagemEnviada: Qua Fev 01, 2017 12:07 pm    Assunto: Responder com Citação

leo_cj escreveu:
Como você está utilizando um TImage, você precisa carregar a imagem manualmente

ex:
Código:
procedure TFrmMatricula_Aluno.Button1Click(Sender: TObject);
begin
  dm_dados.sqlconsaluno.Close;
  dm_dados.sqlconsaluno.SQL.Clear;
  dm_dados.sqlconsaluno.SQL.Add('select * from TBL_ALUNO');
  dm_dados.sqlconsaluno.SQL.Add('where ALUNO_MATRICULA like :matricula_aluno');
  dm_dados.sqlconsaluno.ParamByName('matricula_aluno').AsString := EdtMatricula.Text + '%';
  dm_dados.sqlconsaluno.Open;
  if (not dm_dados.sqlconsaluno.IsEmpty) then
    Foto.Picture.LoadFromFile(dm_dados.tbl_alunoALUNO_FOTO.AsString);
end;


isso para a primeira imagem, para trocar a imagem de acordo com a troca do registro, você vai precisar utilizar o evento OnScroll da query para que trocar a imagem de acordo com o registro selecionado

ou então você pode criar um campo calculado do tipo blob que carrega a imagem, ai em vez de usar um TImage você usaria um TDBImage ligado nesse campo blob


Boa Tarde leo_cj!

Segui seu exemplo e aparece o seguinte erro:
Código:
Project_Escola.exe raised exception class EInvalidGrafic with message 'Unknow picture file extension (.)'. Process stopped. Use Step or Run to continue.


O que pode ser que está acontecendo agora?
Agradeço mais uma vez a atenção!
Voltar ao Topo
Ver o perfil de Usuários Enviar Mensagem Particular
Mostrar os tópicos anteriores:   
Novo Tópico   Responder Mensagem    ActiveDelphi - Índice do Fórum -> Banco de Dados Todos os horários são GMT - 3 Horas
Ir à página 1, 2, 3  Próximo
Página 1 de 3

 
Ir para:  
Enviar Mensagens Novas: Proibido.
Responder Tópicos Proibido
Editar Mensagens: Proibido.
Excluir Mensagens: Proibido.
Votar em Enquetes: Proibido.


Powered by phpBB © 2001, 2005 phpBB Group
Traduzido por: Suporte phpBB