 |
ActiveDelphi .: O site do programador Delphi! :.
|
| Exibir mensagem anterior :: Exibir próxima mensagem |
| Autor |
Mensagem |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Dom Jan 22, 2017 10:38 pm Assunto: Carregar Img salva no Banco de dados FireBird [Resolvido!] |
|
|
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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Jan 23, 2017 7:58 am Assunto: |
|
|
| 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 |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Ter Jan 24, 2017 9:49 pm Assunto: |
|
|
| 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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Jan 25, 2017 7:52 am Assunto: |
|
|
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 |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Sáb Jan 28, 2017 8:58 pm Assunto: |
|
|
| 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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Jan 30, 2017 7:57 am Assunto: |
|
|
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 |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Seg Jan 30, 2017 3:25 pm Assunto: |
|
|
| 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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Seg Jan 30, 2017 3:40 pm Assunto: |
|
|
| 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 |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Seg Jan 30, 2017 4:12 pm Assunto: |
|
|
| 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 |
|
 |
natanbh1 Colaborador

Registrado: Terça-Feira, 15 de Março de 2011 Mensagens: 3093 Localização: Belo Horizonte - MG
|
Enviada: Ter Jan 31, 2017 9:27 am Assunto: |
|
|
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 |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Qua Fev 01, 2017 8:47 am Assunto: |
|
|
| 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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Fev 01, 2017 8:59 am Assunto: |
|
|
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 |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Qua Fev 01, 2017 9:18 am Assunto: |
|
|
| 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 |
|
 |
leo_cj Colaborador

Registrado: Sábado, 26 de Março de 2011 Mensagens: 1335
|
Enviada: Qua Fev 01, 2017 10:09 am Assunto: |
|
|
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 |
|
 |
fmoura Novato

Registrado: Quinta-Feira, 25 de Agosto de 2016 Mensagens: 76
|
Enviada: Qua Fev 01, 2017 12:07 pm Assunto: |
|
|
| 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 |
|
 |
|
|
Enviar Mensagens Novas: Proibido. Responder Tópicos Proibido Editar Mensagens: Proibido. Excluir Mensagens: Proibido. Votar em Enquetes: Proibido.
|
|