Por favor Form pelo DBGrid
Fiz uma pesquisa usando Query e meu resultado apareceu num DBGrid, até aí tudo bem. No meu formulário de cadastro de alunos uso Table. O que eu queria na realidade é colocar no evento OnDobleClick do DBGrid umas linhas de comando que fizessem basicamente o seguinte: abrisse o formulário de cadastrado mostrando o registro no qual foi clicado duas vezes.
Já me deram várias dicas sobre como fazer isso, eu já tentei mas sempre dá erro, eu não sei trabalhar muito bem com Query e isso acaba dificultado um pouco, mas todo o meu sistema está praticamente dependendo disso!
Gostaria de muitos detalhes sobre o código. Tudo bem que eu quero que funcione, mas tb quero entender como funciona. De que outra forma irei aprender?
Galera, Ajuda Aê!
Uso Delphi 5 e Tabelas Paradox.
Já me deram várias dicas sobre como fazer isso, eu já tentei mas sempre dá erro, eu não sei trabalhar muito bem com Query e isso acaba dificultado um pouco, mas todo o meu sistema está praticamente dependendo disso!
Gostaria de muitos detalhes sobre o código. Tudo bem que eu quero que funcione, mas tb quero entender como funciona. De que outra forma irei aprender?
Galera, Ajuda Aê!
Uso Delphi 5 e Tabelas Paradox.
Denysk
Curtidas 0
Respostas
By Alemão
21/08/2003
procedure Form1.DBGrid(Sender: TObject);
begin
form2.edit1.text := Query.FieldByName(´N´).AsString;
form2.ShowModal;
end;
o ´fieldbyname´ é o nome da coluna que contém teu conteúdo....
a hora que vc der o duplo click, ele vai usar o registro que vc selecionou no Grid como index...
entendeu?
begin
form2.edit1.text := Query.FieldByName(´N´).AsString;
form2.ShowModal;
end;
o ´fieldbyname´ é o nome da coluna que contém teu conteúdo....
a hora que vc der o duplo click, ele vai usar o registro que vc selecionou no Grid como index...
entendeu?
GOSTEI 0
Ehvasc
21/08/2003
Saudações Denysk,
Acho que o que vc quer fazer faz-se da seguinte forma:
no evento onDlbClick do grid vc faz o seguinte:
se o form de cadastro já estiver criado, antes de dar um show nele vc abra a table correspondente e dá um locate no registro selecionado com o duplo clique. Em código delphi ficaria mais ou menos assim:
if not Form_Cadastro.table1.active then
begin
Form_Cadastro.table1.Open;
end;
table1.locate(CAMPO_CHAVE_PRIMARIA,Query1.FieldByName(´CAMPO_CHAVE_PRIMARIA´),[]);
isso fará com que o registro apontado pela query seja o mesmo apontado pela table. Isso , se eu entendi direito, resolve seu problema. Qualquer coisa é só falar.
Acho que o que vc quer fazer faz-se da seguinte forma:
no evento onDlbClick do grid vc faz o seguinte:
se o form de cadastro já estiver criado, antes de dar um show nele vc abra a table correspondente e dá um locate no registro selecionado com o duplo clique. Em código delphi ficaria mais ou menos assim:
if not Form_Cadastro.table1.active then
begin
Form_Cadastro.table1.Open;
end;
table1.locate(CAMPO_CHAVE_PRIMARIA,Query1.FieldByName(´CAMPO_CHAVE_PRIMARIA´),[]);
isso fará com que o registro apontado pela query seja o mesmo apontado pela table. Isso , se eu entendi direito, resolve seu problema. Qualquer coisa é só falar.
GOSTEI 0
Allen74
21/08/2003
Denysk,
Tudo vai depender de como estará aberto o seu formulário de cadastro. Seria necessário mais informações, mas vou tentar te ajudar levando em consideração o seguinte:
Seu formulário de cadastros não foi criado. Isso quer dizer que ele não está na lista de autocreate forms que é exibida através do menu Project|Options do Delphi. Você está utilizando um componente TTable para o cadastro de clientes que está inserido no seu formulário de cadastros.
Com este tipo de informações, tudo ficará mais fácil.
Na sua query, você deverá incluir também na lista de campos que serão retornados, o(s) campo(s) que compõe a chave primária de seu cadastro. Neste caso irei supor que este campo chama-se [b:624c3facc2]codigo[/b:624c3facc2]
No evento OnDoubleClick da DBGrid, você irá escrever:
Para que o código acima funcione corretamente, você deve abrir a tabela de cadastros (Table1) no evento OnCreate do formulário de cadastros, caso a propriedade Table1.Active não tenha sido definida para true quando você desenhou o formulário.
Tente esta solução e se não funcionar, informe mais detalhes da estrutura de seu programa e dos formulários e também poste a mensagem de erro, caso ocorra.
Tudo vai depender de como estará aberto o seu formulário de cadastro. Seria necessário mais informações, mas vou tentar te ajudar levando em consideração o seguinte:
Seu formulário de cadastros não foi criado. Isso quer dizer que ele não está na lista de autocreate forms que é exibida através do menu Project|Options do Delphi. Você está utilizando um componente TTable para o cadastro de clientes que está inserido no seu formulário de cadastros.
Com este tipo de informações, tudo ficará mais fácil.
Na sua query, você deverá incluir também na lista de campos que serão retornados, o(s) campo(s) que compõe a chave primária de seu cadastro. Neste caso irei supor que este campo chama-se [b:624c3facc2]codigo[/b:624c3facc2]
No evento OnDoubleClick da DBGrid, você irá escrever:
Application.CreateForm (TFrmCadastro, FrmCadastro); FrmCadastro.Table1.Findkey([Query1.FieldByName(´codigo´).AsString]); FrmCadastro.ShowModal; FrmCadastro.Free
Para que o código acima funcione corretamente, você deve abrir a tabela de cadastros (Table1) no evento OnCreate do formulário de cadastros, caso a propriedade Table1.Active não tenha sido definida para true quando você desenhou o formulário.
Tente esta solução e se não funcionar, informe mais detalhes da estrutura de seu programa e dos formulários e também poste a mensagem de erro, caso ocorra.
GOSTEI 0
Denysk
21/08/2003
Não entendo, fiz tudo o que me disseram, mas sempre me retorna uma mensagem de erro ´Key Violation´.
Eu não sei o que é isso. Fiz tuso direitinho.
Estou quase desistindo.
Denysk
Eu não sei o que é isso. Fiz tuso direitinho.
Estou quase desistindo.
Denysk
GOSTEI 0
Uelton
21/08/2003
Primeiro crie uma variável global no Var do seu form;
Var Form1:TForm;
Teste:String;
No evento OnDoubleClick da DBGrid, você irá:
{Estou supondo que o campo que você irá fazer a consulta é String}
Vamos lá:
Teste:=Dbgrid1.SelectedField.text;
Application.CreateForm(TForm1,Form1);
Form1.Table1.Locate( ´Nome do campo a ser buscado´ ,Teste,[])
Form1.showmodal;
Var Form1:TForm;
Teste:String;
No evento OnDoubleClick da DBGrid, você irá:
{Estou supondo que o campo que você irá fazer a consulta é String}
Vamos lá:
Teste:=Dbgrid1.SelectedField.text;
Application.CreateForm(TForm1,Form1);
Form1.Table1.Locate( ´Nome do campo a ser buscado´ ,Teste,[])
Form1.showmodal;
GOSTEI 0
Denysk
21/08/2003
E se o campo for do tipo integer, como fica?
Uso Delphi 5 e tabelas Paradox.
Denysk
Uso Delphi 5 e tabelas Paradox.
Denysk
GOSTEI 0