Fórum Montando String SQL - De novo #155293
16/04/2003
0
Tenho o seguinte problema, agora:
Estou tentando montar uma string sql dinâmica, dependendo da escolha do usuário, e quanto ele selecionar duas datas, comparar os dados com BETWEEN. Meu fonte segue anexo, e peço a ajuda dos colegas para verificar por que depois de montar o sql, quando comparo os dados, me retorna um erro ´Type mismatch on object´.
Qualquer ajuda é bem-veinda. Obrigado
[i:1544b2ea7f][b:1544b2ea7f]
if MeDatade.Text <> ´ / / ´ then
begin
if MeDataAte.Text <> ´ / / ´ then
begin
data:=StrtoDate(MeDataAte.Text);
mostra1 :=FormatDateTime(´dd-mmm-yyyy´,data);
end
else
begin
MeDataAte.Text:=´31/12/9999´;
data:=StrtoDate(MeDataAte.Text);
mostra1 :=FormatDateTime(´dd-mmm-yyyy´,data);
end;
data:=StrtoDate(MeDatade.Text);
if ligacao <> ´Where´ then
begin
ligacao:=´ and ´;
end;
mostra :=FormatDateTime(´dd-mmm-yyyy´,data);
[color=red:1544b2ea7f] add(ligacao+´ dataproximacalibracao between ´+#39+ trim(mostra) +39+´´+´and ´+39+ trim(mostra1) +´´´´+´´);
[/i:1544b2ea7f][/b:1544b2ea7f][/color:1544b2ea7f]
Musskopf
Curtir tópico
+ 0Posts
16/04/2003
Joilson_gouveia
Como seu código não veio completo, estou avaliando com mais relevância o fragmento em vermelho:
- Verifique se dataproximacalibracao é do tipo date ou do tipo string, pois se for do tipo date dará erro mesmo;
- Verifique que vc tem a variável mostra e mostra1 e que ambas recebem valor diferente de nulo...
Espero que te ajude!
Gostei + 0
16/04/2003
Musskopf
Todos os teus questionamentos já foram verificados. Essa rotina funciona quando eu insiro apenas uma data, mas quando tenho duas digitadas, e ativa o between, dá esse erro!! O problema aparece quando ativo a query!!
Gostei + 0
16/04/2003
Musskopf
[color=red:4b9203bce2]add(ligacao+´ dataproximacalibracao >=+#39+ trim(mostra) +´´´)[/color:4b9203bce2]
funciona!!!
Gostei + 0
16/04/2003
Musskopf
Eu descobri o problema, mas não sei como solucioná-lo:
Seguinte. Como minha FormatDateTime está com dd-mmm-yyyy, a data é formatada com o abreviado do mes, porém em português, tipo
[color=blue:bb82540e23]01-dez-2003[/color:bb82540e23]. Usando o Sql do database explorer, eu passei esse mesmo parâmetro, porém com a abreviatura em [color=red:bb82540e23]inglês, tipo 01-dec-2003[/color:bb82540e23], e, voilá!! Funcionou!!
O que preciso fazer pra que o parametro [color=blue:bb82540e23]mmm[/color:bb82540e23] me retorne a abreviatura do mes em [color=blue:bb82540e23]inglês[/color:bb82540e23]??
Any help??
Please, tá faltando so isso pra eu entregar um software aqui na empresa que tá sendo muito necesário!!!
Antecipadamente, Obrigado!!!
Ps. Porque eu não consigo passar como parâmetro uma data tipo ´01/12/2002´?? É alguma configuração no meu computador???
Gostei + 0
17/04/2003
Musskopf
Pessoal, encontrei a solução, e deixo postada aqui para o caso de alguém mais que venha a ter o mesmo problema.
Como não funcionava passar a data formatada dentro de uma string, que é o que eu estava fazendo até então, usei o recurso de no texto do sql incluir BIND VARIABLES( aquelas que você coloca dois pontos´:´ na frente, e em seguida alimentar essas variaveis com a data formatada. Deu certo. Meu código vicou assim:
[color=red:23a70f5181][i:23a70f5181]
add(ligacao+´ dataproximacalibracao between :INICIO AND :FIM´);
Query1.ParamByName(´INICIO´).AsDate:=StrtoDate(MeDatade.Text);
Query1.ParamByName(´FIM´).AsDate:=StrtoDate(MeDataAte.Text);
[/color:23a70f5181][/i:23a70f5181]
Valeu, abraços!!!
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)