Fórum Apagar registro do bando de dados usando stringgrid #604260
05/08/2019
0
Tenho a seguinte questão por resolver.
Tenho um código que apaga através de um botão, uma linha selecionada no stringgrid. Até ai tudo bem, o problema que ocorrem duas coisas. primeiro que este código apenas vai jogando as linhas pra cima, com isso acaba sempre a ultima linha a ser apagada indo parar na linha de cabeçalhos.
E não apaga no bando de dados.
Por ex. Se eu apagar 4 linhas do stringgrid, no banco só apagam 3, sempre sobra uma, a mesma que foi parar no cabeçalho.
Este é o código que estou usando.
procedure TForm_Cad_Pedidos.DeletaLinhaGrid;
Var i : Integer;
begin
with Self.C_Det_Grid1 do
begin
for i := Row to RowCount -2 do {para a penultima receber a ultima}
Cells[0,i] := Cells[0,i+1];
RowCount := RowCount -1; {retira uma linha}
end;
end;
Se puderem ajudar, desde já agradeço.
Helbert
Curtir tópico
+ 0Post mais votado
08/08/2019
Declare o type abaixo antes da linha Implementation da sua unit
type
TAuxStringGrid = class(TStringGrid);
e use o método abaixo para deletar o registro
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
with Self.C_Det_Grid1 do
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
end;
Me confirme se deu certo por gentileza ok, grato.
Um abraço,
ITO
Correção, não precisa do With:
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
Fernando Ito
Gostei + 1
Mais Posts
06/08/2019
Helbert
Tenho a seguinte questão por resolver.
Tenho um código que apaga através de um botão, uma linha selecionada no stringgrid. Até ai tudo bem, o problema que ocorrem duas coisas. primeiro que este código apenas vai jogando as linhas pra cima, com isso acaba sempre a ultima linha a ser apagada indo parar na linha de cabeçalhos.
E não apaga no bando de dados.
Por ex. Se eu apagar 4 linhas do stringgrid, no banco só apagam 3, sempre sobra uma, a mesma que foi parar no cabeçalho.
Este é o código que estou usando.
procedure TForm_Cad_Pedidos.DeletaLinhaGrid;
Var i : Integer;
begin
with Self.C_Det_Grid1 do
begin
for i := Row to RowCount -2 do {para a penultima receber a ultima}
Cells[0,i] := Cells[0,i+1];
RowCount := RowCount -1; {retira uma linha}
end;
end;
Se puderem ajudar, desde já agradeço.
Alguém?
Gostei + 0
08/08/2019
Fernando Ito
Declare o type abaixo antes da linha Implementation da sua unit
type
TAuxStringGrid = class(TStringGrid);
e use o método abaixo para deletar o registro
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
with Self.C_Det_Grid1 do
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
end;
Me confirme se deu certo por gentileza ok, grato.
Um abraço,
ITO
Gostei + 0
08/08/2019
Helbert
Declare o type abaixo antes da linha Implementation da sua unit
type
TAuxStringGrid = class(TStringGrid);
e use o método abaixo para deletar o registro
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
with Self.C_Det_Grid1 do
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
end;
Me confirme se deu certo por gentileza ok, grato.
ITO
Correção, não precisa do With:
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
Olá Fernando, agradeço pela dica.
Fiz aqui as mudanças mas não surtiram o efeito esperado.
Continua não apagando no Banco de Dados.
Está apenas apagando a linha do StringGrid.
Outro detalhe é que estou usando o TAdvStringGrid da paleta TMS, mudei o método para:
Mas também não resolveu.
Gostei + 0
08/08/2019
Fernando Ito
Declare o type abaixo antes da linha Implementation da sua unit
type
TAuxStringGrid = class(TStringGrid);
e use o método abaixo para deletar o registro
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
with Self.C_Det_Grid1 do
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
end;
Me confirme se deu certo por gentileza ok, grato.
ITO
Correção, não precisa do With:
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
Olá Fernando, agradeço pela dica.
Fiz aqui as mudanças mas não surtiram o efeito esperado.
Continua não apagando no Banco de Dados.
Está apenas apagando a linha do StringGrid.
Outro detalhe é que estou usando o TAdvStringGrid da paleta TMS, mudei o método para:
Mas também não resolveu.
O StringGrid não é um componente consciente de dados, por isso não vai apagar o registro no banco de dados, para isso você terá que criar um método, ou usar um outro componente, o método pode ser feito de várias maneiras, depende de como você está acessando os dados, se for por consulta, você pode dar um locate e depois consulta.delete; commit; se precisar de ajuda me passe mais informações de como você acessa os dados para popular o StringGrid que vejo se consigo te ajudar ok.
Abraço,
ITO
Gostei + 1
08/08/2019
Helbert
Declare o type abaixo antes da linha Implementation da sua unit
type
TAuxStringGrid = class(TStringGrid);
e use o método abaixo para deletar o registro
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
with Self.C_Det_Grid1 do
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
end;
Me confirme se deu certo por gentileza ok, grato.
ITO
Correção, não precisa do With:
TForm_Cad_Pedidos.DeletaLinhaGrid;
begin
TAuxStringGrid(Self.C_Det_Grid1).DeleteRow(Self.C_Det_Grid1.Row);
end;
Olá Fernando, agradeço pela dica.
Fiz aqui as mudanças mas não surtiram o efeito esperado.
Continua não apagando no Banco de Dados.
Está apenas apagando a linha do StringGrid.
Outro detalhe é que estou usando o TAdvStringGrid da paleta TMS, mudei o método para:
Mas também não resolveu.
O StringGrid não é um componente consciente de dados, por isso não vai apagar o registro no banco de dados, para isso você terá que criar um método, ou usar um outro componente, o método pode ser feito de várias maneiras, depende de como você está acessando os dados, se for por consulta, você pode dar um locate e depois consulta.delete; commit; se precisar de ajuda me passe mais informações de como você acessa os dados para popular o StringGrid que vejo se consigo te ajudar ok.
Abraço,
ITO
Se puder ajudar, gostaria sim.
É um Form para cadastro, uso alguns dbedits para inserir os dados no bando de dados (Access) e ao mesmo tempo são exibidos no StringGrid.
E o que eu queria era que o usuário ao selecionar a linha qualquer do Stringgrid, pudesse apagar não só a linha mas o seu respectivo conteúdo no banco de dados.
Gostei + 0
09/08/2019
Fernando Ito
você pode usar uma consulta auxiliar para fazer a exclusão:
var
codigoStringGrid: string;
codigoStringGrid := Self.C_Det_Grid1.Cells[1, Self.C_Det_Grid1.Row]; // 1 é a coluna na sua StringGrid, daí você pega da coluna que refere-se ao id no banco de dados
qryAux.Close;
qryAux.SQL.Clear;
qryAux.SQL.Add('delete from suaTabela where id = ' + codigoStringGrid);
qryAux.ExecSQL;
ou
qryAux.Close;
qryAux.SQL.Clear;
qryAux.SQL.Add('delete from suaTabela where id = :codigoStringGrid');
qryAux.Params[0].AsString := codigoStringGrid;
qryAux.ExecSQL;
Sucesso,
ITO
Gostei + 1
Clique aqui para fazer login e interagir na Comunidade :)