Como deletar varios dados usando o multselect no dbGrid?
Pessoal, gostaria de saber se tem como deletar varios registros de um dbgrid usando o multselect, mais com o componente IBX ibQuery
Tentei de varias formas e nao consegui
tentei assim
Aparece mensagem de erro: ´Update Failed´
Assim
Para nesta linha na hora de deletar [b:766b448ae3]DM.QSAIDA.Last;[/b:766b448ae3] e apareçe a mensagem ´User Open for a Select Stratement´
e tentei este ultimo usando a variavel vExclui para ver se selecionava todos os campos sequencia que marquei para deletar
E esse ultimo deleta somente o ultimo marcado e nao todos como desejo.
Entao a pergunta como deletar varios dados usando o multselect na grade do dbgrid?
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
Curtidas 0
Respostas
Catunda
13/12/2006
vc está escrevendo demais pra pouca coisa colega.
seudbgrid.selectedrows.delete;
Simples assim.
seudbgrid.selectedrows.delete;
Simples assim.
GOSTEI 0
Adriano_servitec
13/12/2006
vc está escrevendo demais pra pouca coisa colega.
seudbgrid.selectedrows.delete;
Simples assim.
Olah amigo, desta forma apareçe a mesma mensagem do primeiro codigo que eu postei.[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
Emerson Nascimento
13/12/2006
quando vc apaga registros dessa forma, o melhor é tentar ir de trás pra frente, senão o ponteiro ´se perde´.
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, é?
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
Emerson Nascimento
13/12/2006
quando vc apaga registros dessa forma, o melhor é tentar ir de trás pra frente, senão o ponteiro ´se perde´.
o que há em qsaida? qual a instrução ali contida? por acaso qsaida não é o próprio dataset ligado à grade, é?
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
Adriano_servitec
13/12/2006
o que há em qsaida? qual a instrução ali contida? por acaso qsaida não é o próprio dataset ligado à grade, é?
Sim o QSaida eh um compoente do IBS IBQuery, e esta ligado na grade sim.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
Emerson Nascimento
13/12/2006
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
Adriano_servitec
13/12/2006
With JVDBGrid1.DataSource.DataSet do
Begin
For I := JVDBGrid1.SelectedRows.Count - 1 downto 0 do
Begin
GotoBookMark(Pointer(JVDBGrid1.SelectedRows.Items[I]));
Delete;
[b:fe2095a243]end;[/b:fe2095a243]
end;
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
Adriano_servitec
13/12/2006
Agora tentei assim
E aparece o seguinte erro [b:85dd577cec]violation of primary or unique key constraint ´Pk_Saidas´ on Table ´Saidas´ at Trigger ´Saidas_ADO´[/b:85dd577cec]
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
Emerson Nascimento
13/12/2006
olha, você não deve manipular o mesmo dataset que está ligado à grade.
GOSTEI 0
Adriano_servitec
13/12/2006
olha, você não deve manipular o mesmo dataset que está ligado à grade.
Hum como assim? Desculpe a pergunta, masi nao entendi.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
Adriano_servitec
13/12/2006
Page up
GOSTEI 0