Query... Tem como fazer isso???
Galera, é o seguinte:
como faço pra excluir os registros na tabela, mas informando quantos registros eu quero deletar...
tipo assim:
digamos que essa query retorne 5 resultados...
e na query abaixo eu vou deletar todos esses resultados...
como eu faço pra ao invés de deletar todos os resultados dessa tabela eu deletar 3, por exemplo... ou uma quantidade qualquer, informada...
obrigado desde ja a ajuda!
como faço pra excluir os registros na tabela, mas informando quantos registros eu quero deletar...
tipo assim:
dm.qryExemplares.SQL.Clear; dm.qryExemplares.Sql.Add(´SELECT * FROM Tabela1´); dm.qryExemplares.Sql.Add(´WHERE controle=:0´); dm.qryExemplares.Parameters[0].Value:=cod; dm.qryExemplares.Open;
digamos que essa query retorne 5 resultados...
e na query abaixo eu vou deletar todos esses resultados...
dm.qryDeletar.SQL.Clear; dm.qryDeletar.Sql.Add(´DELETE * FROM Tabela1´); dm.qryDeletar.Sql.Add(´WHERE controle = :0´); dm.qryDeletar.Parameters[0].Value:=dm.tbTabela2id.Value; dm.qryDeletar.ExecSQL;
como eu faço pra ao invés de deletar todos os resultados dessa tabela eu deletar 3, por exemplo... ou uma quantidade qualquer, informada...
obrigado desde ja a ajuda!
Raphael.sx
Curtidas 0
Respostas
Khundalini
05/07/2005
A única maneira de fazer isso é limitando o valor das chaves, pois assim vc saberá determinar a quantidade de registros que vc quer excluir. E desse jeito, fica bem genérico e válido pra qualquer banco de dados.
[]s
Rubem Rocha
Manaus, AM
[]s
Rubem Rocha
Manaus, AM
GOSTEI 0
Sma
05/07/2005
Existe no MySQL a funçao LIMIT onde eu posso determinar a quantidada de registro que quero trazer para a query, eu não tentei executar mas vc poderia tentar executar...
Ex..
dm.qryDeletar.SQL.Clear;
dm.qryDeletar.Sql.Add(´DELETE * FROM Tabela1´);
dm.qryDeletar.Sql.Add(´WHERE controle = :0´);
dm.qryDeletar.Sql.Add(´LIMIT 3´);
dm.qryDeletar.Parameters[0].Value:=dm.tbTabela2id.Value;
dm.qryDeletar.ExecSQL;
desta forma ele apenas deleta os 3 primeiros registros...
Ex..
dm.qryDeletar.SQL.Clear;
dm.qryDeletar.Sql.Add(´DELETE * FROM Tabela1´);
dm.qryDeletar.Sql.Add(´WHERE controle = :0´);
dm.qryDeletar.Sql.Add(´LIMIT 3´);
dm.qryDeletar.Parameters[0].Value:=dm.tbTabela2id.Value;
dm.qryDeletar.ExecSQL;
desta forma ele apenas deleta os 3 primeiros registros...
GOSTEI 0
Khundalini
05/07/2005
Mas o banco que está sendo usado é o MySQL? Por isso que eu prefiro a minha sugestão, por ser mais genérica.
[]s
Rubem Rocha
Manaus, AM
[]s
Rubem Rocha
Manaus, AM
GOSTEI 0
Raphael.sx
05/07/2005
por favor Khundalini, me da um exemplo de como fazer da maneira que vc disse.
GOSTEI 0
Khundalini
05/07/2005
Cara, é pq eu tô meio sem tempo agora, senão eu codificaria alguma coisa sobre isso. Mas a idéia é essa. A dica pra pescar o peixe foi passada!
[]s
Rubem Rocha
Manaus, AM
[]s
Rubem Rocha
Manaus, AM
GOSTEI 0
Cabelo
05/07/2005
Galera, é o seguinte:
como faço pra excluir os registros na tabela, mas informando quantos registros eu quero deletar...
tipo assim:
digamos que essa query retorne 5 resultados...
e na query abaixo eu vou deletar todos esses resultados...
como eu faço pra ao invés de deletar todos os resultados dessa tabela eu deletar 3, por exemplo... ou uma quantidade qualquer, informada...
obrigado desde ja a ajuda!
dm.qryExemplares.SQL.Clear; dm.qryExemplares.Sql.Add(´SELECT * FROM Tabela1´); dm.qryExemplares.Sql.Add(´WHERE controle=:0´); dm.qryExemplares.Parameters[0].Value:=cod; dm.qryExemplares.Open;
dm.qryDeletar.SQL.Clear; dm.qryDeletar.Sql.Add(´DELETE * FROM Tabela1´); dm.qryDeletar.Sql.Add(´WHERE controle = :0´); dm.qryDeletar.Parameters[0].Value:=dm.tbTabela2id.Value; dm.qryDeletar.ExecSQL;
Esta exclusão é aleatória, ou você deseja excluir registros selecionados..
Outra coisa.. Você quer que seja um SQL, para executar direto no banco ou pode ser via delphi???
GOSTEI 0
Raphael.sx
05/07/2005
caro Cabelo, o código seria executado via delphi mesmo... e exluiria registros selecionados...
obrigado pela atenção!
obrigado pela atenção!
GOSTEI 0
Tremonti
05/07/2005
Existe no SQL o Conhecido Select Top 1 FRom Tabela
onde 1 é quantidade de registro que vc quer trazer...
Bom, o que vc pode fazer é se caso o resultado da query seja exibido em um DBGrid, criar um campo (calculado, pode ser), onde no onDblClick do DBGrid vocÊ coloque o valor para ´X´
E colocar um botao, excluir selecionados por exemplo
onde ele dará um loop na tabela e apagar somente os que o campo tal seja = ´X´
Seria mais ou menos assim
tabela.first
While not Tabela.first do
Begin
if TabelaCAmpo.value = ´X´ Then
TAbela.Delete;
Tabela.next;
End;
Tabela.First
e no onDBLCLick
Tabela.Edit;
If TabelaCAmpo.VAlue = ´X´ Then
TabelaCampo.value = ´´
Else
TabelaCampo.value = ´X´
Existem algumas considerações referentes a cada tipo de componente para conexão que vc usar....
POr exemplo, se usar BDE precisaria de um Update e dar um Apply depois, e assim vai...
onde 1 é quantidade de registro que vc quer trazer...
Bom, o que vc pode fazer é se caso o resultado da query seja exibido em um DBGrid, criar um campo (calculado, pode ser), onde no onDblClick do DBGrid vocÊ coloque o valor para ´X´
E colocar um botao, excluir selecionados por exemplo
onde ele dará um loop na tabela e apagar somente os que o campo tal seja = ´X´
Seria mais ou menos assim
tabela.first
While not Tabela.first do
Begin
if TabelaCAmpo.value = ´X´ Then
TAbela.Delete;
Tabela.next;
End;
Tabela.First
e no onDBLCLick
Tabela.Edit;
If TabelaCAmpo.VAlue = ´X´ Then
TabelaCampo.value = ´´
Else
TabelaCampo.value = ´X´
Existem algumas considerações referentes a cada tipo de componente para conexão que vc usar....
POr exemplo, se usar BDE precisaria de um Update e dar um Apply depois, e assim vai...
GOSTEI 0
Raphael.sx
05/07/2005
não funcionou!! ajuda!!
GOSTEI 0
Ivanh
05/07/2005
No firebird pode fazer esta procedure:
SET TERM ^ ;
CREATE PROCEDURE NEW_PROCEDURE (
QTDEEXCLUIR INTEGER)
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
FOR
SELECT FIRST :QTDEEXCLUIR CODIGO FROM TABELA
INTO :CODIGO;
DO
BEGIN
DELETE FROM TABELA
WHERE CODIGO = :CODIGO;
END
END
^
SET TERM ; ^
SET TERM ^ ;
CREATE PROCEDURE NEW_PROCEDURE (
QTDEEXCLUIR INTEGER)
AS
DECLARE VARIABLE CODIGO INTEGER;
BEGIN
FOR
SELECT FIRST :QTDEEXCLUIR CODIGO FROM TABELA
INTO :CODIGO;
DO
BEGIN
DELETE FROM TABELA
WHERE CODIGO = :CODIGO;
END
END
^
SET TERM ; ^
GOSTEI 0
Tremonti
05/07/2005
Não funcionou pq?!
O que vc fez?!
O que vc fez?!
GOSTEI 0