Fórum Como deletar varios dados usando o multselect no dbGrid? #334671
13/12/2006
0
Tentei de varias formas e nao consegui
tentei assim
procedure TForm4.Button5Click(Sender: TObject); var i: integer; chaves: array[1..100] of string; begin for i:= 1 to JVdbgrid1.SelectedRows.Count do begin DM.QSAIDA.Bookmark := JVdbgrid1.SelectedRows.Items[i-1]; chaves[i]:= DM.QSAIDA.FIELDBYNAME(´SEQUENCIA´).value; end; for i:= 1 to JVdbgrid1.SelectedRows.Count do begin DM.QSAIDA.first; If DM.QSAIDA.Locate(´SEQUENCIA´, chaves[i], [loPartialKey]) then DM.QSAIDA.Delete; end; DM.QSAIDA.first; DM.QSAIDA.Refresh;
Assim
if Application.MessageBox(´Deseja realmente Excluir esse Registro ?´,´Aviso´,MB_ICONQUESTION+mb_yesno)=idyes then Begin // apagar MULTSELECT With JVDBGrid1.DataSource.DataSet do Begin For I := 0 to JVDBGrid1.SelectedRows.Count - 1 do Begin GotoBookMark(Pointer(JVDBGrid1.SelectedRows.Items[I])); // Primeiro DM.QSAIDA.first; // Enquanto não terminar então while not DM.QSAIDA.eof do Begin // Verifica qual o row selecionado if JVDBGrid1.SelectedRows.CurrentRowSelected then begin // O parametro recebe o codlin selecionado dm.qsaida.close; DM.QSAIDA.FIELDBYNAME(´SEQUENCIA´).value; DM.QSAIDA.ExecSQL; // Ultimo DM.QSAIDA.Last; end; // Proximo DM.QSAIDA.Next; end; end; end; end;
e tentei este ultimo usando a variavel vExclui para ver se selecionava todos os campos sequencia que marquei para deletar
if vExclui = 0 then begin raise Exception.Create(´É necessário selecionar a Linha na Grade para Excluir´); end else if application.messagebox(Pchar(´Deseja Excluir este Lançamento:´ + #13+ dm.qSaida.FieldByName(´Sequencia´).AsString +´ ´+ 13+ dm.qSaida.FieldByName(´basecalculo´).AsString), Pchar(´Excluir Dados´+Self.Caption), MB_ICONQUESTION + MB_YESNO) = IDYES then begin with dm.qsaida do begin Close; sql.text := ´delete from saidas where sequencia = :sequencia´; ParamByName(´sequencia´).value :=vExclui; //multselect try ExecSQL; dm.TRsaida.Active:=true; dm.TRsaida.Commit; SQL.clear; dm.qsaida.Close; sql.add(´ Select * from saidas ´); sql.add(´ where cnpjempresa =:p_cnpjempresa and ano =:p_ano order by sequencia desc ´); parambyname(´p_cnpjempresa´).asstring:=label20.caption; parambyname(´p_Ano´).AsString:=label21.Caption; open; BitBtn9.setfocus; sbar.SimpleText:=´Dados Excluidos´; except on E:Exception do begin dm.TRsaida.RollBack; sbar.SimpleText:=´Abortado´; ShowMessage(´Falha na Exclusão dos Dados!´#1310´ Mensagem: ´+E.Message); end; end; end; end;
Entao a pergunta como deletar varios dados usando o multselect na grade do dbgrid?
Adriano_servitec
Curtir tópico
+ 0Posts
13/12/2006
Catunda
seudbgrid.selectedrows.delete;
Simples assim.
Gostei + 0
14/12/2006
Adriano_servitec
[b:59e0d447f3]Aparece mensagem de erro: ´Update Failed´
[/b:59e0d447f3]Estou usando um IBQuery, ja coloquei ateh o componente UpdateSQL e direcionei ao ibQuery pra ver se funcionava e nada ainda.
Gostei + 0
14/12/2006
Emerson Nascimento
With JVDBGrid1.DataSource.DataSet do
Begin
For I := JVDBGrid1.SelectedRows.Count - 1 downto 0 do
Begin
GotoBookMark(Pointer(JVDBGrid1.SelectedRows.Items[I]));
// O parametro recebe o codlin selecionado
dm.qsaida.Close;
DM.qsaida.ParamByName(´sequencia´).asinteger := FIELDBYNAME(´SEQUENCIA´).asinteger;
DM.qsaida.ExecSQL;
end;
end;
o que há em qsaida? qual a instrução ali contida? por acaso qsaida não é o próprio dataset ligado à grade, é?
Gostei + 0
14/12/2006
Emerson Nascimento
With JVDBGrid1.DataSource.DataSet do Begin For I := JVDBGrid1.SelectedRows.Count - 1 downto 0 do Begin GotoBookMark(Pointer(JVDBGrid1.SelectedRows.Items[I])); // O parametro recebe o codlin selecionado dm.qsaida.Close; DM.qsaida.ParamByName(´sequencia´).asinteger := FIELDBYNAME(´SEQUENCIA´).asinteger; DM.qsaida.ExecSQL; end; end;
o que há em qsaida? qual a instrução ali contida? por acaso qsaida não é o próprio dataset ligado à grade, é?
Gostei + 0
14/12/2006
Adriano_servitec
Agora o problema esta eh que nao reconheçe o parametro ´sequencia´
O erro na hora de deletar
´QSaida Parameter ´Sequencia´ not found´
E aponta pra esta linha
[b:645e5dae4b]DM.qsaida.ParamByName(´sequencia´).asinteger := FIELDBYNAME(´SEQUENCIA´).asinteger; [/b:645e5dae4b]
Gostei + 0
14/12/2006
Emerson Nascimento
With JVDBGrid1.DataSource.DataSet do Begin For I := JVDBGrid1.SelectedRows.Count - 1 downto 0 do Begin GotoBookMark(Pointer(JVDBGrid1.SelectedRows.Items[I])); Delete; end; end;
Gostei + 0
14/12/2006
Adriano_servitec
Desculpe Emerson, mais da erro na hora de deletar e aponta para esse end em negrito.
A mesma mensagem
[b:fe2095a243]Aparece mensagem de erro: ´Update Failed´[/b:fe2095a243]
Lembrando que estou usando um IBQuery da paleta IBX
Gostei + 0
14/12/2006
Adriano_servitec
begin if vExclui = 0 then begin raise Exception.Create(´É necessário selecionar a Linha na Grade para Excluir´); end else With JVDBGrid1.DataSource.DataSet do Begin For I := JVDBGrid1.SelectedRows.Count - 1 downto 0 do Begin GotoBookMark(Pointer(JVDBGrid1.SelectedRows.Items[I])); with dm.qsaida do begin Close; sql.text := ´delete from saidas where sequencia = :sequencia´; ParamByName(´sequencia´).Value :=vexclui; ExecSQL; end; end; end; end;
Gostei + 0
14/12/2006
Emerson Nascimento
Gostei + 0
14/12/2006
Adriano_servitec
Quer dizer que para eu excluir com multselect tenho que ter outro dataset? Mais ai como vou marcar os dados que eu quero excluir se eu marco(seleciono) eles dentro do dbgrid?
Gostei + 0
17/12/2006
Adriano_servitec
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)