Dbgrid chana form com ado

Delphi

01/06/2012

Bom dia Pessoal

Estou com uma dúvida que acredito até já ter sido respondido no forum porem não estou encontrando
siguinte:

Tenho um formulario de pesquisa que usa uma query quero clicar na linha seleciona
e o sistema chamar o formulario de cadastro naquele registro que selecioneri

porem uso access e conexão ado
podem me ajudar por favor
Luis Carlos

Luis Carlos

Curtidas 0

Respostas

Joel Rodrigues

Joel Rodrigues

01/06/2012

Olá. O esquema é o seguinte:
1) No form a ser chamado, coloque os componentes de DB ligados ao datasource da tela onde está o DBGrid.
2) No evento onDbliClick do grid do primeiro form, chame o segundo.

Quando você liga os controles do segundo form ao datasource do primeiro, eles estarão sempre sincronizados, ou seja, o registro selecionado no grid é o mesmo exibido na segunda tela.

Boa sorte.
GOSTEI 0
Bruno Leandro

Bruno Leandro

01/06/2012

Ola luis, ao clicar em uma linhas do dbgrid a query ja estará posicionada no registro que voce deseja, caso query passar isso para outra query, seria mais ou menos assim

queryCadastro.parambyname(codigo).value := queryDBGrid.fieldbyname(codigo).value

sendo que na queryCadastro seu sql seja assim :

select * from tabela where codigo = :codigo

caso seja aberto uma outra tela, voce pode criar uma variavel publica por exemplo nesta tela e fazer desta forma

Application.CreateForm(TFormCadastro, FormCadastro);
FormCadastro.codigo := queryDBGrid.fieldbyname(codigo).value;
FormCadastro.Show;
GOSTEI 0
Luis Carlos

Luis Carlos

01/06/2012

Joel em primeiro lugar obrigado por me responder

o problema é que o form a ser chamado e um cadastro que está ligado em uma tabela no caso tabela colaboradores

e na tela de pesquisa onde tem o dbgrid estou usando uma query para poder filtra os dados por data

tennho esse código

If (DM.Colaborador.FindKey([DM.QrPData.FieldByName(cod_col).Asinteger]))then;

FormColab.showmodal;

Mas como havia dito estou usando conexão ado , sei que tenho que trocar o Findkey por Locate
Mas não estou conseguindo colocar o FielByName.
o que está errado?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

01/06/2012

Repare que você colocou ponto-e-vírgula depois do THEN, aí já tem um problema.
Na tela que contém o DBGrid, deve ter um DataSource, certo? Ligue os componentes da tela de cadastro ao mesmo datasource.
Experimente usar consultas SQL para atingir seu objetivo (a menos que o Locate atenda completamente sua necessidade).
GOSTEI 0
Luis Carlos

Luis Carlos

01/06/2012

Se eu pegar o data source e conecta lo a tabela de colaboradores minha pesquisa não funciona
pois ele está ligado a query que filtra os dados por data

quando ao ponto e virgula ja retirei

porem ainda sim não funciona

usando ado posso subtiuir o Fieldbyname por outro????
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

01/06/2012

Cara, primeiramente um conceito que precisa estar claro:
ADO é uma engine de conexão com bases de dados da Microsoft. Consiste de vários controles como TADOConnectio, TADOQuery, TADOTable, etc.

Não sei como você está fazendo, mas a estrutura das suas telas deve ser a seguinte:
1) Tela de consulta
- ADOQuery ou ADOTable de onde vem os dados;
- DataSource ligado à tabela acima;
- DBGrid ligado ao DataSource;
- - Aqui você faz o processo de consulta usando o Locate ou instruções SQL;

2) Tela de cadastro
- Controles DB (DBEdit, DBCombobox, etc) ligados ao DataSource da primeira tela.

Caso você esteja utilizando a tabela em um DataModule, o que muda é apenas que você não precisa ter a tabela na tela de consulta, apenas um DataSource ligado à tabela do DataModule.
GOSTEI 0
Luis Carlos

Luis Carlos

01/06/2012

Esse é o codigo da consulta
begin
ShowMessage(Intervalo de datas inválido, a data inicial é maior que a data final!);
DateTimePicker2.Date := DateTimePicker1.Date;
end
Else
begin
Inicio := DateToStr(DateTimePicker1.Date);
Final := DateToStr(DateTimePicker2.Date);
DM.QrPesqA.Close;
DM.QrPesqA.SQL.Clear;
DM.QrPesqA.SQL.Text:= SELECT Código,COLABORADOR,TECNICO,DATA,STATUS,DESCRIÇÃO FROM Atendimento WHERE DATA >=:pInicial and Data<=:pFinal ORDER BY COLABORADOR;
DM.QrPesqA.Parameters.ParamByName(pInicial).Value :=StrToDate(Inicio);
DM.QrPesqA.Parameters.ParamByName(pFinal).Value:= StrToDate(Final);
//DM.QrPesqA.Prepare;
DM.QrPesqA.Open;
DBGrid1.SetFocus
end;
end;

Como voce disse nela uso uma adoquery de um data source
e na tela de cadastro uso adotable e um data source
por tanto se ligo o data source da pesquisa a tabela
a pesquisa não funciona

pode descrever o codigo correto para conseguir chamar o formulario?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

01/06/2012

Pera lá, a tela de cadastro é para COLABORADORES? Então você consulta o atendimento e cadastra o COLABORADOR?
Bom, se for isso, então vocÊ faz assim (após a pesquisa, claro, no evento dblclick do grid):

formCadastro := TformCadastro.Create(Application);
formCadastro.Tabela.Open();
formCadastro.Tabela.Locate(´campo´, qryPesquisaA.FieldByName(´COLABORADOR´).AsString, []);
formCadastro.ShowModal();


Você pode utilizar essa lógica, adaptando-a a sua necessidade.
GOSTEI 0
Luis Carlos

Luis Carlos

01/06/2012

Joel é justamente isso
porem quando digito qryPesquisaA. ele não me da a opção para FieldByName o que uso no lugar?
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

01/06/2012

O controle qryPesquisaA é um TADOTable? Tente ´´forçar a barra´´, digite e veja se é acusado um erro ao compilar.
GOSTEI 0
Joel Rodrigues

Joel Rodrigues

01/06/2012

TADOQuery*, perdão.
GOSTEI 0
POSTAR