Dbgrid chana form com ado
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
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
Curtidas 0
Respostas
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.
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
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;
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
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?
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
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).
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
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????
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
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.
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
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?
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
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):
Você pode utilizar essa lógica, adaptando-a a sua necessidade.
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
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?
porem quando digito qryPesquisaA. ele não me da a opção para FieldByName o que uso no lugar?
GOSTEI 0
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
01/06/2012
TADOQuery*, perdão.
GOSTEI 0