Fórum Montando String SQL - De novo #155293

16/04/2003

0

Boa tarde!!

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

Musskopf

Responder

Posts

16/04/2003

Joilson_gouveia

[color=red:7c0c077dfb]add(ligacao+´ dataproximacalibracao between ´+#39+ trim(mostra) +39+´´+´and ´+39+ trim(mostra1) +´´´´+´´); [/color:7c0c077dfb]

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!


Responder

Gostei + 0

16/04/2003

Musskopf

Olá, Obrigado pela atenção!

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


Responder

Gostei + 0

16/04/2003

Musskopf

Se eu fizer assim:

[color=red:4b9203bce2]add(ligacao+´ dataproximacalibracao >=+#39+ trim(mostra) +´´´)[/color:4b9203bce2]

funciona!!!


Responder

Gostei + 0

16/04/2003

Musskopf

Boa tarde!!

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


Responder

Gostei + 0

17/04/2003

Musskopf

Primeiro, gostaria de agradecer a todos que de alguma forma tentaram me ajudar. É assim que fazemos um mundo melhor!!! Valeu!!
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!!!


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar