consulta SQL

Delphi

26/05/2003

Bom dia!

Bom, pessoal, é o seguinte: passei ontem o dia inteiro em cima de uma aplicação que desenvolvi em delphi em cima de SQL. Eu preciso utilizar o comando DELETE do SQL para apagar todos os registros de uma base de dados baseados em 2 campos da mesma tabela, informados pelo usuário em tempo de execução. Dei uma consultada na referência on-line do DELETE, mas toda vez que mando rodar o procedimento ele me dá o erro ´Type mismatch in expression´. Já não sei mais o que fazer.
A consulta minha idéia é mais ou menos essa:
´Apague todos os registros da tabela REGISTROS onde (DataRetorno estiver entre :DataInicial e :DataFinal) e (TipoCertidão=:Tipo).´

OBS.: Os 3 campos :DataInicial, :DataFinal e :Tipo são informados em uma caixa de diálogo pelo usuário.

Estou utilizando Delphi 5, e as consultas estão sendo realizadas em um banco Paradox.

Fico muito grato se alguém puder me ajudar.

Obrigado,
Tiago. :shock:


Tiagopar

Tiagopar

Curtidas 0

Respostas

Okama

Okama

26/05/2003

Posso sugerir que antes de executar o comando dê uma olhada na instrução enviada à Query para ver se está tudo correto e não faltando nenhum parâmetro:

Showmessage( Query1.SQL.Text);

Query1.Open //Query1.ExecSQL;


GOSTEI 0
Fabricio R.

Fabricio R.

26/05/2003

Posso sugerir que utilize parametros para passar as datas para o sql,

e utilize query.execsql, pois se utilizar [[b:e725867b53]query.open vai dar pau[/b:e725867b53].


GOSTEI 0
Luza

Luza

26/05/2003

Verifique que tipo de variavel vc esta passando para a consulta.

Se TIPO dentro do banco for inteiro e vc esta passando como string vc tera exatamente este tipo de erro.

Ex:

DELETE from tabela where TIPO=:tp
onde tp=´01´, no entanto o campo TIPO em tabela eh inteiro.


Sua exclusao entao seria:

with tabela do;
begin;
SQL.Clear;
SQL.Add(´DELETE FROM tabela WHERE ´);
SQL.Add(´ WHERE (DATARETORNO >= :DataInicial AND DataRetorno <= :DataFinal) and (TIPO = :tp) ´);
ParamByName(´DataInicial´).AsDate := data_digitada_inicial;
ParamByName(´DataFinal´).AsDate := data_digitada_final;
ParamByName(´tp´).AsString := tipo_informado;
{
ou
ParamByName(´tp´).AsInteger := tipo_informado;
}
ExecSQL;
end;


Espero ter contribuido para seu desenvolvimento.

Luza


GOSTEI 0
POSTAR