Query... Tem como fazer isso???

Delphi

05/07/2005

Galera, é o seguinte:
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

Raphael.sx

Curtidas 0

Respostas

Khundalini

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


GOSTEI 0
Sma

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...


GOSTEI 0
Khundalini

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


GOSTEI 0
Raphael.sx

Raphael.sx

05/07/2005

por favor Khundalini, me da um exemplo de como fazer da maneira que vc disse.


GOSTEI 0
Khundalini

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


GOSTEI 0
Cabelo

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:
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!


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

Raphael.sx

05/07/2005

caro Cabelo, o código seria executado via delphi mesmo... e exluiria registros selecionados...
obrigado pela atenção!


GOSTEI 0
Tremonti

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...


GOSTEI 0
Raphael.sx

Raphael.sx

05/07/2005

não funcionou!! ajuda!!


GOSTEI 0
Ivanh

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 ; ^


GOSTEI 0
Tremonti

Tremonti

05/07/2005

Não funcionou pq?!
O que vc fez?!


GOSTEI 0
POSTAR