Fórum Dbgrid chana form com ado #417865
01/06/2012
0
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
Curtir tópico
+ 0Posts
01/06/2012
Joel Rodrigues
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
01/06/2012
Bruno Leandro
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
01/06/2012
Luis Carlos
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
01/06/2012
Joel Rodrigues
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
01/06/2012
Luis Carlos
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
01/06/2012
Joel Rodrigues
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
01/06/2012
Luis Carlos
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
01/06/2012
Joel Rodrigues
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
01/06/2012
Luis Carlos
porem quando digito qryPesquisaA. ele não me da a opção para FieldByName o que uso no lugar?
Gostei + 0
01/06/2012
Joel Rodrigues
Gostei + 0
01/06/2012
Joel Rodrigues
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)