Montando String SQL - De novo
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]
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
Curtidas 0
Respostas
Joilson_gouveia
16/04/2003
[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!
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
Musskopf
16/04/2003
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!!
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
Musskopf
16/04/2003
Se eu fizer assim:
[color=red:4b9203bce2]add(ligacao+´ dataproximacalibracao >=+#39+ trim(mostra) +´´´)[/color:4b9203bce2]
funciona!!!
[color=red:4b9203bce2]add(ligacao+´ dataproximacalibracao >=+#39+ trim(mostra) +´´´)[/color:4b9203bce2]
funciona!!!
GOSTEI 0
Musskopf
16/04/2003
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???
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
Musskopf
16/04/2003
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!!!
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