Fórum Migrando Access gt; SQL Server, campos data #323963

21/06/2006

0

Estou começando no SQL Server. Ja converti o banco de dados e durante os testes estou tendo dificuldade na pesquisa com datas. Estou uso ADO para a conexão. O código antigo era assim:

SQL.Add(´WHERE (( DataHora >= #´+FormatDateTime(´mm/dd/yyyy´, dData)+´ ) AND ( DataHora < ´+FormatDateTime(´mm/dd/yyyy´, dData+1)+´ )) ´)


Pelo que ja li, o valor da data, precisa vir entre aspas simples, mas não consigo colocar o caracter porque ele fecha a string. Se não colo nada, me retorna vazio. Já tentei assim:

SQL.Add(´(( DataHora >= ´+FormatDateTime(´mm/dd/yyyy´, dData)+´ 00:00:00 ) AND ( DataHora < ´+FormatDateTime(´mm/dd/yyyy´, dData+1)+´ 00:00:00 )) ´)


Mas também dá erro. O campo no SQL server está como smalldate.

Agradeço qualquer ajuda.

Quadrado


Quadrado

Quadrado

Responder

Posts

24/06/2006

Quadrado

Up

Ajuda ai pessoal !!!


Responder

Gostei + 0

25/06/2006

Paulocesar1301

Nunca trabalhei com SQLServer, então vai aí apenas um chute:
Se o valor tem que estar entre aspas, tente colocar o que deseja pesquisar dentro de um QuotedStr(<data a pesquisar>).
Espero não ter falado besteira... minha cabeça pode não estar funcionando bem depois da balada 8)

Abs e bons códigos :wink:


Responder

Gostei + 0

26/06/2006

Micheus

Já postei isto em outro forum e acho que é válido.
Tente deixar por conta do driver a manipulação da data, utilize parametrização e passe o parâmetro no formato de data. Não estou certo quanto ao ADOQuery, mas em outro componentes Query, esta é a melhor opção, pois vc foge de ter que saber como o banco vai tratar a data no formato string: se será yyyy-mm-dd ou dd-mm-yyyy; ou qual delimitador usar, pois o Access, por exemplo não usa aspas duplas, mas sim sustenido (#).

ex.:
adoquery1.SQL.Add(´WHERE ((DataHora >= :dtInicial) AND (DataHora < :dtFinal))´);

adoquery1.Parameters.ParamByName(´dtInicial´).Value := dData;
adoquery1.Parameters.ParamByName(´dtFinal´).Value := dData +1;

adoquery1.Open;


Obs.: vc pode utilizar escrever seu comando de outra maneira, mais comum na avaliação de períodos (se for o caso): [i:7c6db4fb94]WHERE data BETWEEN data1 AND data2[/i:7c6db4fb94]


Responder

Gostei + 0

27/06/2006

Quadrado

Nenhuma das duas formas funcionou. Com os parametros, retorna erro ´Tipo de dados incompatível no critério expressão de critério´.

Com o Quotedstring() tambem não funciona.

A gravação dos dados usando parâmetro para DataHora funciona bem, mas na pesquisa, não funciona.

Este sistema está ENORME com 9 BDs em access mas estou tendo problemas de performance, por isto estou iniciando a migração, primeiro com o menor dos bancos que tem somente uma tabela (arquivo de log), que deveria ser simples.

Pelo que já li nos foruns, a migração seria simples, corrigindo somente os comandos SQL, adaptando-os para o SQLServer. Já li algumas apostilas, mas eu não queria trabalar com storedprocedures ou trigger agora, faria a migração e iria usando as ferramentas do SQL com o tempo.

Continuo precisando de ajuda.

Obrigado.


Responder

Gostei + 0

27/06/2006

Quadrado

OK, Funcionou usando parâmetros. Eu tinha feito uma cag.... no código.

Valeu !

Vou continuar com a migração e vamos ver o que me espera !!!

Obrigado.


Responder

Gostei + 0

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

Aceitar