Selecionar Linha DBGRID e abrir outra tela de edição dos campos
Boa noite pessoal...
Estou com um pequeno problema... Possuo um sistema onde realizo um cadastro de OS e gravo no banco de dados (frmCadastro)
Possuo na tela inicial (frmConsulta), um dbgrid que mostra todas as OS cadastradas.
Quero saber como eu posso selecionar a linha do meu dbgrid e abrir um outro formulário idêntico ao de cadastro só que para edição dos campos... esse novo formulário(frmEditar) deve trazer os campos preenchidos já com os dados do Dbgrid.
Estou utilizando o Zeos para realizar a comunicação, e Querys para realizar os cadastros e consultas juntamente com DataModule.
Banco de dados Firebird 2.1
Estou com um pequeno problema... Possuo um sistema onde realizo um cadastro de OS e gravo no banco de dados (frmCadastro)
Possuo na tela inicial (frmConsulta), um dbgrid que mostra todas as OS cadastradas.
Quero saber como eu posso selecionar a linha do meu dbgrid e abrir um outro formulário idêntico ao de cadastro só que para edição dos campos... esse novo formulário(frmEditar) deve trazer os campos preenchidos já com os dados do Dbgrid.
Estou utilizando o Zeos para realizar a comunicação, e Querys para realizar os cadastros e consultas juntamente com DataModule.
Banco de dados Firebird 2.1
Rudimar
Curtidas 0
Respostas
Ricardo
27/01/2015
Basta você colocar a mesma rotina que usa para chamar o frmCadastro no evento OnDBclick do dbgrid. Dessa forma o formulário de cadastro vai abrir com os dados relativos ao registro selecionado e se quiser você já pode abrir o form direto em modo de edição.
GOSTEI 0
Rudimar
27/01/2015
Pois é... eu tenho na minha rotina de cadastro o seguinte
tentei adaptar esse código mas não deu muito certo... como eu posso fazer?
procedure TfrmCadastro.btnSalvarClick(Sender: TObject);
var
tipo: String;
i : Integer;
begin
dm.DataModule1.qryOrdemServico.Close;
dm.DataModule1.qryOrdemServico.SQL.Clear;
dm.DataModule1.qryOrdemServico.SQL.Add('INSERT INTO m_ordem_serv_c (DT_SAIDA, DT_ENTRADA, S_OBS, DT_PREVISAO, IB_ENCERRADA, BL_IMAGEM, i_cod_m_pessoa_cliente_c, i_cod_m_pessoa_fornecedor_c)');
dm.DataModule1.qryOrdemServico.SQL.Add('VALUES (:p_dtsaida, :p_dtentrada, :p_observacao, :p_dtprevisao, :p_encerrada, :p_imagem, :p_cliente, :p_fornecedor)');
dm.DataModule1.qryOrdemServico.ParamByName('p_dtsaida').AsDate := dtSaida.Date;
dm.DataModule1.qryOrdemServico.ParamByName('p_observacao').AsString := mmDescricao.Text;
dm.DataModule1.qryOrdemServico.ParamByName('p_dtentrada').AsDate := dtEntrega.Date;
dm.DataModule1.qryOrdemServico.ParamByName('p_dtprevisao').AsDate := dtPrevista.Date;
dm.DataModule1.qryOrdemServico.ParamByName('p_cliente').AsInteger := lcbCliente.KeyValue;
dm.DataModule1.qryOrdemServico.ParamByName('p_fornecedor').AsInteger := lcbFornecedor.KeyValue;
if cbEncerrada.Checked = True then
begin
dm.DataModule1.qryOrdemServico.ParamByName('p_encerrada').AsInteger := 1;
end
else
begin
dm.DataModule1.qryOrdemServico.ParamByName('p_encerrada').AsInteger := 0;
end;
dm.DataModule1.qryOrdemServico.ParamByName('p_imagem').AsString := edtAnexo.Text;
dm.DataModule1.qryOrdemServico.ExecSQL;
ShowMessage('Cadastrado com Sucesso');
for i:=0 to frmCadastro.ComponentCount-1 do
begin
if frmCadastro.Components[i] is TEdit then
(frmCadastro.Components[i] as TEdit).Clear;
if frmCadastro.Components[i] is TMemo then
(frmCadastro.Components[i] as TMemo).Clear;
if frmCadastro.Components[i] is TImage then
(frmCadastro.Components[i] as TImage).Picture:=nil;
end;
DM.DataModule1.qryConsulta.Close;
DM.DataModule1.qryConsulta.Open;
end;
tentei adaptar esse código mas não deu muito certo... como eu posso fazer?
procedure TfrmCadastro.btnSalvarClick(Sender: TObject);
var
tipo: String;
i : Integer;
begin
dm.DataModule1.qryOrdemServico.Close;
dm.DataModule1.qryOrdemServico.SQL.Clear;
dm.DataModule1.qryOrdemServico.SQL.Add('INSERT INTO m_ordem_serv_c (DT_SAIDA, DT_ENTRADA, S_OBS, DT_PREVISAO, IB_ENCERRADA, BL_IMAGEM, i_cod_m_pessoa_cliente_c, i_cod_m_pessoa_fornecedor_c)');
dm.DataModule1.qryOrdemServico.SQL.Add('VALUES (:p_dtsaida, :p_dtentrada, :p_observacao, :p_dtprevisao, :p_encerrada, :p_imagem, :p_cliente, :p_fornecedor)');
dm.DataModule1.qryOrdemServico.ParamByName('p_dtsaida').AsDate := dtSaida.Date;
dm.DataModule1.qryOrdemServico.ParamByName('p_observacao').AsString := mmDescricao.Text;
dm.DataModule1.qryOrdemServico.ParamByName('p_dtentrada').AsDate := dtEntrega.Date;
dm.DataModule1.qryOrdemServico.ParamByName('p_dtprevisao').AsDate := dtPrevista.Date;
dm.DataModule1.qryOrdemServico.ParamByName('p_cliente').AsInteger := lcbCliente.KeyValue;
dm.DataModule1.qryOrdemServico.ParamByName('p_fornecedor').AsInteger := lcbFornecedor.KeyValue;
if cbEncerrada.Checked = True then
begin
dm.DataModule1.qryOrdemServico.ParamByName('p_encerrada').AsInteger := 1;
end
else
begin
dm.DataModule1.qryOrdemServico.ParamByName('p_encerrada').AsInteger := 0;
end;
dm.DataModule1.qryOrdemServico.ParamByName('p_imagem').AsString := edtAnexo.Text;
dm.DataModule1.qryOrdemServico.ExecSQL;
ShowMessage('Cadastrado com Sucesso');
for i:=0 to frmCadastro.ComponentCount-1 do
begin
if frmCadastro.Components[i] is TEdit then
(frmCadastro.Components[i] as TEdit).Clear;
if frmCadastro.Components[i] is TMemo then
(frmCadastro.Components[i] as TMemo).Clear;
if frmCadastro.Components[i] is TImage then
(frmCadastro.Components[i] as TImage).Picture:=nil;
end;
DM.DataModule1.qryConsulta.Close;
DM.DataModule1.qryConsulta.Open;
end;
GOSTEI 0
Ricardo
27/01/2015
Essa é a rotina para salvar que não vem ao caso.
Você precisa colocar no evento OnDbClick do DBgrid a chamada do form.
Ex. frmCadastro.showmodal
frmCadastro.show ou a forma que você utiliza.
Para ficar mais fácil de entender; você certamente tem um botão que quando clica nele abre o frmCadastro não tem? Então, você pega esse mesmo código e cola no evento OnDbClick do DBgrid.
Pronto problema resolvido.
Qualquer coisa entre em contato.
Você precisa colocar no evento OnDbClick do DBgrid a chamada do form.
Ex. frmCadastro.showmodal
frmCadastro.show ou a forma que você utiliza.
Para ficar mais fácil de entender; você certamente tem um botão que quando clica nele abre o frmCadastro não tem? Então, você pega esse mesmo código e cola no evento OnDbClick do DBgrid.
Pronto problema resolvido.
Qualquer coisa entre em contato.
GOSTEI 0