Tipo de consulta ou bd
eu uso o interbase em uma aplicação de imobiliaria.
abro uma janela para consulta e no boto o seguinte codigo:
procedure TForm4.Button1Click(Sender: TObject);
begin
try
Screen.Cursor:=crSQLWait;
dmimob.Qdormi.Close;
dmimob.Qdormi.ParamByName(´d11´).Asstring:=Edit1.Text;
dmimob.Qdormi.ParamByName(´d22´).Asstring:=Edit2.text;
if not (dmimob.Qdormi.Prepared) then
dmimob.Qdormi.Prepare;
dmimob.Qdormi.Open;
finally
Screen.Cursor:=crDefault;
end;
end;
e dentro do edit sql da query:
select * from IMOVEIS where DORMI BETWEEN :d11 and :d22
eu queria uma consulta q apareceçe os resultados e quando clicasse em algum resultado a tela de cadastro apareceria com as informações do resultado clicado.
obrigado
abro uma janela para consulta e no boto o seguinte codigo:
procedure TForm4.Button1Click(Sender: TObject);
begin
try
Screen.Cursor:=crSQLWait;
dmimob.Qdormi.Close;
dmimob.Qdormi.ParamByName(´d11´).Asstring:=Edit1.Text;
dmimob.Qdormi.ParamByName(´d22´).Asstring:=Edit2.text;
if not (dmimob.Qdormi.Prepared) then
dmimob.Qdormi.Prepare;
dmimob.Qdormi.Open;
finally
Screen.Cursor:=crDefault;
end;
end;
e dentro do edit sql da query:
select * from IMOVEIS where DORMI BETWEEN :d11 and :d22
eu queria uma consulta q apareceçe os resultados e quando clicasse em algum resultado a tela de cadastro apareceria com as informações do resultado clicado.
obrigado
Demetriusdgs
Curtidas 0
Respostas
Tnaires
30/06/2004
Olá
Digamos que vc tem duas telas de cadastro e consulta de uma tabela ,a saber:
Tabela
-------
ID
Campo1
Na sua tela de cadastro, ao invés de um table, use um query para cadastrar os dados (o query precisa conter apenas uma tabela. Para gravar em mais de uma, é necessário usar a cláusula INNER JOIN para relacioná-las, mas vc não pode excluir dados diretamente pelo método Delete. Se só tiver uma, pode), com o seguinte SQL:
Na sua tela de cadastro, abra o query e vc pode inserir e excluir dados a vontade.
Na sua tela de consulta, escreva o seguinte código no grid de consulta:
Assim, quando o usuário der dois cliques no grid, a janela de cadastro aparecerá no registro corrente. Pq dois cliques? Por questão de segurança. Isso garante que o registro desejado será selecionado no primeiro clique.
Finalmente, as queries da paleta ADO possibilitam gravação direta. No BDE, seria recomendável utilizar UpdateSQL para isso. Dá pra fazer com Tables também, utilizando o método locate, mas particularmente eu prefiro queries pq é mais fácil de ordenar os registros.
Abraços
Digamos que vc tem duas telas de cadastro e consulta de uma tabela ,a saber:
Tabela
-------
ID
Campo1
Na sua tela de cadastro, ao invés de um table, use um query para cadastrar os dados (o query precisa conter apenas uma tabela. Para gravar em mais de uma, é necessário usar a cláusula INNER JOIN para relacioná-las, mas vc não pode excluir dados diretamente pelo método Delete. Se só tiver uma, pode), com o seguinte SQL:
SELECT ID, Campo1 FROM Tabela WHERE ID = :ID
Na sua tela de cadastro, abra o query e vc pode inserir e excluir dados a vontade.
Na sua tela de consulta, escreva o seguinte código no grid de consulta:
procedure TForm1.DBGrid1OnDblClick(Sender: TObject) begin if not QUERYCONSULTA.IsEmpty then with FormCadastro.QueryCadastro do begin Close; ParamByName(´ID´).AsInteger := QUERYCONSULTAID.Value; Open; FormCadastro.Show; end; end;
Assim, quando o usuário der dois cliques no grid, a janela de cadastro aparecerá no registro corrente. Pq dois cliques? Por questão de segurança. Isso garante que o registro desejado será selecionado no primeiro clique.
Finalmente, as queries da paleta ADO possibilitam gravação direta. No BDE, seria recomendável utilizar UpdateSQL para isso. Dá pra fazer com Tables também, utilizando o método locate, mas particularmente eu prefiro queries pq é mais fácil de ordenar os registros.
Abraços
GOSTEI 0
Tnaires
30/06/2004
Ah, no seu caso, como seu banco é InterBase, usa um IBDataSet e tá tudo resolvido.
GOSTEI 0
Demetriusdgs
30/06/2004
ñ entendi direito pq eu uso no form2 (cadastro) um tabshet de 3 paginas, e num botão surge o form5(consulta por codigo) .
só que dentro do datamodulo. para cadastro ñ tem query só tem: dataset trasaction database e datasource. como eu faria isso daí?
obrigado
só que dentro do datamodulo. para cadastro ñ tem query só tem: dataset trasaction database e datasource. como eu faria isso daí?
obrigado
GOSTEI 0
Tnaires
30/06/2004
Bom, nesse caso, se os forms de cadastro e consulta tiverem os DataSets em comum, o registro selecionado no resultado da consulta tornará o mesmo registro ativo também no form de cadastro. Basta então vc configurar o evento OnClick, ou OnDblClick do Grid para dar um Show no cadastro.
Se não, um query d consulta terá q ser criado. Qdo for dar Show no cadstro, vc tem q passar o valor da chave para ele ativar o registro selecionado na consulta.
Se não, um query d consulta terá q ser criado. Qdo for dar Show no cadstro, vc tem q passar o valor da chave para ele ativar o registro selecionado na consulta.
GOSTEI 0
Demetriusdgs
30/06/2004
só tem dataset no form de cadastro, na consulta possui uma query,
mas eu ñ entendi direito a sua explicação, desculpa mas sou leigo em delphi
mas eu ñ entendi direito a sua explicação, desculpa mas sou leigo em delphi
GOSTEI 0
Tnaires
30/06/2004
Quando o usuário realizar a consulta e clicar em um registro (por exemplo, em um DbGrid), esse registro ficará ativo. aí vc pega o valor da chave primária desse registro selecionado, passa pro seu dataset e mostra o form de cadastro. Qdo ele abrir, vai estar posicionado justamente no registro selecionado pelo usuário. Sacou + ou -?
Explique melhor o uso dos seus componentes. Qdo vc diz dataset, vc tá querendo dizer IBDataSet?
Explique melhor o uso dos seus componentes. Qdo vc diz dataset, vc tá querendo dizer IBDataSet?
GOSTEI 0