Tipo de consulta ou bd

Delphi

30/06/2004

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


Demetriusdgs

Demetriusdgs

Curtidas 0

Respostas

Tnaires

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:
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

Tnaires

30/06/2004

Ah, no seu caso, como seu banco é InterBase, usa um IBDataSet e tá tudo resolvido.


GOSTEI 0
Demetriusdgs

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


GOSTEI 0
Tnaires

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.


GOSTEI 0
Demetriusdgs

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


GOSTEI 0
Tnaires

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?


GOSTEI 0
POSTAR