Migrando Access gt; SQL Server, campos data
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:
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:
Mas também dá erro. O campo no SQL server está como smalldate.
Agradeço qualquer ajuda.
Quadrado
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
Curtidas 0
Respostas
Quadrado
21/06/2006
Up
Ajuda ai pessoal !!!
Ajuda ai pessoal !!!
GOSTEI 0
Paulocesar1301
21/06/2006
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:
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:
GOSTEI 0
Micheus
21/06/2006
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.:
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]
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]
GOSTEI 0
Quadrado
21/06/2006
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.
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.
GOSTEI 0
Quadrado
21/06/2006
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.
Valeu !
Vou continuar com a migração e vamos ver o que me espera !!!
Obrigado.
GOSTEI 0