Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Deletar linha de um dbrigd selecionando outro dbgrid


robinhocne

Pergunta

Estou formando uma estrutura para que quando eu clicar na na linha do DbgCarChe(Dbgrid) ele apagar

a linha do outro dbgrid(DbgCheques), os Dbgrids são iguais só que o DbgCarChe eu mostro todos os cheques

e quando eu clico duas vezes eu lanço o determinado cheque para o outro dbgrid, e a linha do cheque selecionado

do DbgCarChe fica em vermelho e quando eu clico duas vezes nela ela volta a cor normal, ai eu quero excluir

do DbgCheques, estava fazendo assim mas não deu certo, o que estou fazendo de errado.

Aluno, Cheque, Datado são variaveis que eu atribuo os valores da linha do grid pelo evento afterscroll da query que está ligada no dbgrid (dbgcarche), e TxtVal.value e um TCurrencyEdit do RxLib que tbém atribuo o valor pelo afterscroll.

if tblcheques.Fields[00].AsString = Aluno then
    if tblcheques.Fields[02].AsString = Cheque then
      if tblcheques.Fields[03].AsCurrency = TxtVal.value then
        if tblcheques.Fields[04].AsDateTime = Datado then
          begin

    if ( not tblcheques.Active ) then tblcheques.Open;
      with tblcheques do
      begin
         Delete;
         Fields[00].AsString   := Aluno;
         Fields[02].AsString   := Cheque;
         Fields[03].AsCurrency := Valor.value;
         Fields[04].AsDateTime := Datado;
         Post;
      end;
      tblcheques.Refresh;

Editado por robinhocne
Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 0
Estou formando uma estrutura para que quando eu clicar na na linha do DbgCarChe(Dbgrid) ele apagar

a linha do outro dbgrid(DbgCheques)

Se voce tem duas dbgrids e consequetemente duas tabelas linkadas a estes dbgrids, basta então que ao dar um duplo clique em um registro da primeira, e procurar na segunda usando locate ou parametro, e então deletar o registro da segunda.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
Estou formando uma estrutura para que quando eu clicar na na linha do DbgCarChe(Dbgrid) ele apagar

a linha do outro dbgrid(DbgCheques)

Se voce tem duas dbgrids e consequetemente duas tabelas linkadas a estes dbgrids, basta então que ao dar um duplo clique em um registro da primeira, e procurar na segunda usando locate ou parametro, e então deletar o registro da segunda.

abraço

me falaram sobre o locate mas eu não sei como usar, você poderia me ajudar ???

Link para o comentário
Compartilhar em outros sites

  • 0
me falaram sobre o locate mas eu não sei como usar, você poderia me ajudar ???

No evento OnDblClick do DBGrid voce coloca este codigo

var
  Form1: TForm1;
  itemx : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin

    // PROCURAR NA TABELA QUE ESTA NO DBGRID2 UM REGISTRO PARA DELETAR

    if CDS_Tabela.Locate('CAMPODATABELA',itemx,[loCaseInsensitive, loPartialKey]) then
       begin

           if MessageDlg('Deseja Apagar o Registro ?' ,
              mtConfirmation, [mbYes, mbNo], 0) = mrYes then
              begin
                 CDS_Tabela.Delete;
                 CDS_Tabela.ApplyUpdates(-1);
              end;

         // executar outros comandos se for o caso
       end
    else
       begin
         MessageDlg('O Registro solicitado' + #13 + 'não foi encontrado.' , mtInformation,[mbOk], 0);
         Edit1.Clear;
       end;
end;

// No evento OnCellClick do DBGrid

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
   itemx := CDS_TabelaITEM.AsInteger;
end;

OBS: CDS_Tabela é o ClientDataSet da sua tabela

a variavel inteira itemx receberá o valor do item ou numero ou codigo do registro que voce quer, quando voce clicar no registro desejado.

No evento OnDblClick do DBGrid , quando voce der o duplo click o codigo ira procurar o registro da outra tabela atraves do locate.... se for encontrado executara a deleção do registro, caso contrario mostrara uma mensagem dizendo que o registro não foi encontrado na tabela.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0
me falaram sobre o locate mas eu não sei como usar, você poderia me ajudar ???

No evento OnDblClick do DBGrid voce coloca este codigo

var
  Form1: TForm1;
  itemx : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin

    // PROCURAR NA TABELA QUE ESTA NO DBGRID2 UM REGISTRO PARA DELETAR

    if CDS_Tabela.Locate('CAMPODATABELA',itemx,[loCaseInsensitive, loPartialKey]) then
       begin

           if MessageDlg('Deseja Apagar o Registro ?' ,
              mtConfirmation, [mbYes, mbNo], 0) = mrYes then
              begin
                 CDS_Tabela.Delete;
                 CDS_Tabela.ApplyUpdates(-1);
              end;

         // executar outros comandos se for o caso
       end
    else
       begin
         MessageDlg('O Registro solicitado' + #13 + 'não foi encontrado.' , mtInformation,[mbOk], 0);
         Edit1.Clear;
       end;
end;

// No evento OnCellClick do DBGrid

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
   itemx := CDS_TabelaITEM.AsInteger;
end;

OBS: CDS_Tabela é o ClientDataSet da sua tabela

a variavel inteira itemx receberá o valor do item ou numero ou codigo do registro que voce quer, quando voce clicar no registro desejado.

No evento OnDblClick do DBGrid , quando voce der o duplo click o codigo ira procurar o registro da outra tabela atraves do locate.... se for encontrado executara a deleção do registro, caso contrario mostrara uma mensagem dizendo que o registro não foi encontrado na tabela.

abraço

Mas eu utilizo, só uma IbDataBase, IbQuery e IbTransaction e na no grid eu chamo pela query local!

Como eu poderia fazer assim?

Link para o comentário
Compartilhar em outros sites

  • 0
Mas eu utilizo, só uma IbDataBase, IbQuery e IbTransaction e na no grid eu chamo pela query local!

Como eu poderia fazer assim?

Voce precisa ler mais sobre delphi.

var
  Form1: TForm1;
  itemx : integer = 0;
implementation

{$R *.DFM}

procedure TForm1.DBGrid1DblClick(Sender: TObject);
begin

    // PROCURAR NA TABELA QUE ESTA NO DBGRID2 UM REGISTRO PARA DELETAR

    if IBQuery1.Locate('CAMPODATABELA',itemx,[loCaseInsensitive, loPartialKey]) then
       begin

           if MessageDlg('Deseja Apagar o Registro ?' ,
              mtConfirmation, [mbYes, mbNo], 0) = mrYes then
              begin
                 IBQuery1.Delete;
                 IBQuery1.ApplyUpdates;
              end;

         // executar outros comandos se for o caso
       end
    else
       begin
         MessageDlg('O Registro solicitado' + #13 + 'não foi encontrado.' , mtInformation,[mbOk], 0);
         Edit1.Clear;
       end;
end;

// No evento OnCellClick do DBGrid

procedure TForm1.DBGrid1CellClick(Column: TColumn);
begin
   itemx := IBQuery1ITEM.AsInteger;
end;

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Acho que estou mais confuso do que nunca...

Adaptei aqui mas não acontece nada, inclusive só dá a mensagem de que o registro solicitado.... não foi encontrado...

Mas faltou uns fatores importantes.

No DbgCarChe(DbGrid1) eu uso a IbQuey (QryCarChe) que mostra todos os cheques, clicando duas vezes a linha fica vermelha para indicar que o cheque está sendo repassado e assim eu faço um insert no outro grid DbgCheques(DbGrid2) que nela eu conecto com um RxMemoryData(TblCheques), pois então eu clico no QryCarChe para deletar do DbgCheques.

if TblCheques.Locate('Codigo',itemx,[loCaseInsensitive, loPartialKey]) then
       begin

           if MessageDlg('Deseja Apagar o Registro ?' ,
              mtConfirmation, [mbYes, mbNo], 0) = mrYes then
              begin
                 TblCheques.Delete;
                 TblCheques.Refresh;//.ApplyUpdates;
              end;

         // executar outros comandos se for o caso
       end
    else
       begin
         MessageDlg('O Registro solicitado' + #13 + 'não foi encontrado.' , mtInformation,[mbOk], 0);
         //Edit1.Clear;
       end;
procedure TFrmCarteiraDeCheque.DbgCarCheDrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
begin
   itemx := TblCheques.FieldValues['Codigo'].AsInteger;
end;

que estou fazendo de errado??

Link para o comentário
Compartilhar em outros sites

  • 0

procedure TFrmCarteiraDeCheque.DbgCarCheDblClick(Sender: TObject);
begin

TblCheques.first;

if TblCheques.Locate('Codigo',itemx,[loCaseInsensitive, loPartialKey]) then
       begin

           if MessageDlg('Deseja Apagar o Registro ?' ,
              mtConfirmation, [mbYes, mbNo], 0) = mrYes then
              begin
                 TblCheques.Delete;
                 TblCheques.Refresh;//.ApplyUpdates;
              end;

       end
    else
       begin
         MessageDlg('O Registro solicitado' + #13 + 'não foi encontrado.' , mtInformation,[mbOk], 0);

       end;

end;


procedure TFrmCarteiraDeCheque.DbgCarCheDrawDataCell(Sender: TObject;
  const Rect: TRect; Field: TField; State: TGridDrawState);
begin
   itemx := TblCheques.FieldValues['Codigo'].AsInteger;
end;

que estou fazendo de errado??

OBS: O clique na celula ( Registro ) é para selecionar o conteudo da sua tabela que esta no campo Código

o duplo clique é para executar a pesquisa em cima da tabela TblCheques uma vez que a variavel itemx tenha recebido o valor....

inclusive só dá a mensagem de que o registro solicitado.... não foi encontrado...

se não esta encontrando nada, então voce deve verificar se a variavel itemx esta realmente recebendo o valor do codigo que voce esta procurando.

abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Opa, consegui resolver, estava fuçando no primeiro programa que eu tinha feito no curso de delphi, ai tbém lembrei que tinha feito algo parecido, verifiquei e foi batata, era mais ou menos do jeito que eu queria...

E ainda foi bem mais facil do que eu pensei, obrigado a todos pela atenção e paciencia!

If ((not TblCheques.Active) or (TblCheques.IsEmpty)) then Exit;
      begin
         TblCheques.Delete;
         TxtVal.Value := TxtVal.Value - Valor.Value;
      end;

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...