Jump to content
Fórum Script Brasil
  • 0

Deletar Varios Registro Do Bd Usando Instrução Sql ?


maxm.ro
 Share

Question

tenho que deletar alguns dados aqui...

Código:

DataModule1.ADOQryHistorico.close;

DataModule1.ADOQryHistorico.SQL.Text:='DELETE * FROM historico WHERE codigo_cli_mov = '+Edit3.Text+' ORDER BY codigo_mov';

DataModule1.ADOQryHistorico.Open;

coloquei esse codigo ai pra fazer um teste mas não funcionou ....

deu o seguinte erro !

Ponto e virgula Faltando no final da instru~ção SQL!!!

verifiquei certinho mas parece não estar faltando nada...

alguém sabe se é possiavel deletar desta forma ????

atenciosamente,

..max

Link to comment
Share on other sites

9 answers to this question

Recommended Posts

  • 0

BLZA CARA, MAS AGORA DEU ERRO DE SINTAXE NA CLAUSULA FROM

DataModule1.ADOQryHistorico.close;

DataModule1.ADOQryHistorico.SQL.Add('select * FROM historico WHERE codigo_cli_mov = '+EdtCodCli.Text+'');

DataModule1.ADOQryHistorico.Open;

ESSE AI O CODIGO...

SE PUDER AJUDAR AGRADEÇO.....

Link to comment
Share on other sites

  • 0
Guest --Jonas --
BLZA CARA, MAS AGORA DEU ERRO DE SINTAXE NA CLAUSULA FROM

DataModule1.ADOQryHistorico.close;

DataModule1.ADOQryHistorico.SQL.Add('select * FROM historico WHERE codigo_cli_mov = '+EdtCodCli.Text+'');

DataModule1.ADOQryHistorico.Open;

ESSE AI O CODIGO...

SE PUDER AJUDAR AGRADEÇO.....

so se codigo_cli_mov for string

DataModule1.ADOQryHistorico.SQL.Add('select * FROM historico WHERE codigo_cli_mov = '+trim(EdtCodCli.Text));

Link to comment
Share on other sites

  • 0

Tenta isso.

datamodule1.ADOQryHistorico.first;
while not DataModule1.ADOQryHistorico.oef do
begin
if datamodule1.ADOqryHistorico.Fieldbyname('codigo_Cli_mov').value = EditCodCli.text then
 begin
 datamodule1.tabela1.locate(Codigo_Cli_mov,editCodCli.text,[]);
 datamodule1.tabela1.delete;
 datamodule1.tabela1.next;
 end;
end;
ou tenta isso,
Query1.Close;
Query1.Sql.Clear;
Query1.Sql.Add('delete * from tabela where Codigo_Cli_mov = EditCodCli.text');
Query1.Open;
Verifica se o "Codigo_cli_mov" estar como "Integer" se Tiver no criterio fica assim
Strtoint(EditCodCli.text)

Link to comment
Share on other sites

  • 0

tentei de todos os modos que foram passados acima mas não deu certo...

acho que o banco de dados em access que ñão da suprte para apagar varios ccampos de uma só vez, porque coloquei esse codigo:

StrToInt(EdtCodCli.Text);

DataModule1.ADOQryHistorico.Close;

DataModule1.ADOQryHistorico.SQL.Clear;

DataModule1.ADOQryHistorico.SQL.Text:= 'DELETE * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text+'';

DataModule1.ADOQryHistorico.Open;

e ele me retornou o seguinte erro :

O provedor atual não oferece suporte para retornar varios conjuntos de registro de uma unica execução.

ADOQRYHistorico: ComandText does not return a result set.

tentei também assim :

DataModule1.ADOQryHistorico.SQL.Add('DELETE * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text+' ');

e da o mesmo erro....

Link to comment
Share on other sites

  • 0
Guest --felipe --
tentei de todos os modos que foram passados acima mas não deu certo...

acho que o banco de dados em access que ñão da suprte para apagar varios ccampos de uma só vez, porque coloquei esse codigo:

StrToInt(EdtCodCli.Text);

DataModule1.ADOQryHistorico.Close;

DataModule1.ADOQryHistorico.SQL.Clear;

DataModule1.ADOQryHistorico.SQL.Text:= 'DELETE * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text+'';

DataModule1.ADOQryHistorico.Open;

e ele me retornou o seguinte erro :

O provedor atual não oferece suporte para retornar varios conjuntos de registro de uma unica execução.

ADOQRYHistorico: ComandText does not return a result set.

tentei também assim :

DataModule1.ADOQryHistorico.SQL.Add('DELETE * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text+' ');

e da o mesmo erro....

bom você pode apagar os dados de uma só vez, porém um de cada vez, na mesma função

sacou?

por exemplo assim:

DataModule1.ADOQryHistorico.Close;
    DataModule1.ADOQryHistorico.SQL.Clear;
    DataModule1.ADOQryHistorico.SQL.Text:= 'SELECT * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text;
    DataModule1.ADOQryHistorico.Open;
    DataModule1.ADOQryHistorico.First;
    for i := 0 to (DataModule1.ADOQryHistorico.RecordCount-1) do begin
      DataModule1.ADOQryHistorico.Delete;
      DataModule1.ADOQryHistorico.ApplyUpdates;
      DataModule1.ADOQryHistorico.Close;
      DataModule1.ADOQryHistorico.Open;
      DataModule1.ADOQryHistorico.First;
    end;

as ultimas 3 linhas:

DataModule1.ADOQryHistorico.Close;

DataModule1.ADOQryHistorico.Open;

DataModule1.ADOQryHistorico.First;

eu não sei se é necessario mesmo, pois ao deletar, automaticamente o proximo campo se torna o primeiro

mas eu botei só pra garantir

testa ai e ve se funciona

abraço!!

Link to comment
Share on other sites

  • 0

blza problema RESOLVIDO ......

o codigo foi esse ai:

procedure TFRelHistorico.SbLimparClick(Sender: TObject);
begin
     If application.MessageBox( 'Tem certeza de que deseja Limpar todo o histórico do cliente selecionado?','Informação',MB_YESNO)=mryes then
     begin
          If application.MessageBox( 'Você esta Prestes a apagar o histórico do cliente selecionado! Deseja Continuar?','Informação',MB_YESNO)=mryes then
          begin
              DSRelHistorico.DataSet.First;

                while not DSRelHistorico.DataSet.Eof do
                begin
                      if DataModule1.ADOQryHistorico.FieldByName('codigo_cli_mov').Value = Cod_Cli then begin
                          datamodule1.ADOQryHistorico.locate('Codigo_Cli_mov',Cod_Cli,[]);
                          DataModule1.ADOQryHistorico.Delete;
                      end;
               DSRelHistorico.DataSet.Next;

               end;
               DataModule1.ADOQryHistorico.Delete;
               ShowMessage('O Histórico do cliente foi limpo com sucesso!');
           end;
     end;      
end;

obrigado pela ajuda ......

Edited by Micheus
Adicionado o delimitador de código [code] [/code]. Lembre-se de utilizá-lo para melhor visualização
Link to comment
Share on other sites

  • 0
BLZA CARA, MAS AGORA DEU ERRO DE SINTAXE NA CLAUSULA FROM

DataModule1.ADOQryHistorico.close;

DataModule1.ADOQryHistorico.SQL.Add('select * FROM historico WHERE codigo_cli_mov = '+EdtCodCli.Text+'');

DataModule1.ADOQryHistorico.Open;

não justifica o erro, mas aqui você utilizou um SELECT ao invés de DELETE.

tentei de todos os modos que foram passados acima mas não deu certo...

acho que o banco de dados em access que ñão da suprte para apagar varios ccampos de uma só vez, porque coloquei esse codigo:

StrToInt(EdtCodCli.Text);

DataModule1.ADOQryHistorico.Close;

DataModule1.ADOQryHistorico.SQL.Clear;

DataModule1.ADOQryHistorico.SQL.Text:= 'DELETE * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text+'';

DataModule1.ADOQryHistorico.Open;

e ele me retornou o seguinte erro :

O provedor atual não oferece suporte para retornar varios conjuntos de registro de uma unica execução.

ADOQRYHistorico: ComandText does not return a result set.

O problema não é com o SQL, e o MSAccess dá suporte sim exclusão de vários registros sim.

Para quem deseja utilizar comandos como DELETE, UPDATE e INSERT tenham em mente que o método a ser utilizado não é Open, mas sim ExecSQL:

DataModule1.ADOQryHistorico.Close;
    DataModule1.ADOQryHistorico.SQL.Clear;
    DataModule1.ADOQryHistorico.SQL.Text:= 'DELETE * FROM Historico WHERE codigo_cli_mov = '+EdtCodCli.Text+'';
    DataModule1.ADOQryHistorico.ExecSQL;

Sugiro utilizar este comando ao invés de todas aquelas linhas implementadas.

Abraços

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

  • Forum Statistics

    • Total Topics
      149.8k
    • Total Posts
      646.6k
×
×
  • Create New...