Ir para conteúdo
Fórum Script Brasil
  • 0

between com datas


serginho_pv

Pergunta

Ao tentar selecionar os registros aparece a seguinte mensagem:

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Driver ODBC para Microsoft Access] Tipo de dados imcompatível na expressão de critério., SQL state 22005 in SQLExecDirect in c:\Apache\htdocs\veiculos\abast.php on line 53

A linha 53 é:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN '$diainicio' AND '$diafim' ORDER BY cod_placa, dia_abastecimento

Já tentei inserir os dados nos formatos yyyy/mm/dd, yyyy-mm-dd sem sucesso. Tentei também sem os apóstrofos nas variáveis.

O campo dia_abastecimento é do tipo data, com o formato de data abreviada, e a conexão é via odbc.

Link para o comentário
Compartilhar em outros sites

6 respostass a esta questão

Posts Recomendados

  • 0
SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN '$diainicio' AND '$diafim' ORDER BY cod_placa, dia_abastecimento

Já tentei inserir os dados nos formatos yyyy/mm/dd, yyyy-mm-dd sem sucesso. Tentei também sem os apóstrofos nas variáveis.

O campo dia_abastecimento é do tipo data, com o formato de data abreviada, e a conexão é via odbc.

serginho_pv, a contatenação das variáveis $diainicio e $diafim diretamente neste formato gerarão algo como:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN 2007-01-01 AND 2007-02-28 ORDER BY cod_placa, dia_abastecimento

o que claramente irá gerar um erro na execução da consulta.

O MSAccess usa como delimitador de data o caracter "#". Assim, você terá que ajustar sua string para acomodá-lo desta forma:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN #'$diainicio'# AND #'$diafim'# ORDER BY cod_placa, dia_abastecimento

agora sua string de consulta gerará algo como:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN #2007-01-01# AND #2007-02-28# ORDER BY cod_placa, dia_abastecimento

O formato ideal é este mesmo yyyy-mm-dd (ou com as barras, mas nesta seqüência)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Infelizmente, o problema persiste.

A mensagem agora é :

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na data na expressão de consulta 'dia_abastecimento BETWEEN #'2007-12-01'# AND #'2007-12-31'#'., SQL state 37000 in SQLExecDirect in c:\Apache\htdocs\veiculos\abast.php on line 53

Pelo visto, vou ter que mudar o BD...

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN '$diainicio' AND '$diafim' ORDER BY cod_placa, dia_abastecimento

Já tentei inserir os dados nos formatos yyyy/mm/dd, yyyy-mm-dd sem sucesso. Tentei também sem os apóstrofos nas variáveis.

O campo dia_abastecimento é do tipo data, com o formato de data abreviada, e a conexão é via odbc.

serginho_pv, a contatenação das variáveis $diainicio e $diafim diretamente neste formato gerarão algo como:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN 2007-01-01 AND 2007-02-28 ORDER BY cod_placa, dia_abastecimento

o que claramente irá gerar um erro na execução da consulta.

O MSAccess usa como delimitador de data o caracter "#". Assim, você terá que ajustar sua string para acomodá-lo desta forma:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN #'$diainicio'# AND #'$diafim'# ORDER BY cod_placa, dia_abastecimento

agora sua string de consulta gerará algo como:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN #2007-01-01# AND #2007-02-28# ORDER BY cod_placa, dia_abastecimento

O formato ideal é este mesmo yyyy-mm-dd (ou com as barras, mas nesta seqüência)

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0
Infelizmente, o problema persiste.

A mensagem agora é :

Warning: odbc_exec() [function.odbc-exec]: SQL error: [Microsoft][Driver ODBC para Microsoft Access] Erro de sintaxe na data na expressão de consulta 'dia_abastecimento BETWEEN #'2007-12-01'# AND #'2007-12-31'#'., SQL state 37000 in SQLExecDirect in c:\Apache\htdocs\veiculos\abast.php on line 53

serginho_pv, observe como a sua string está ficando...

Ela contém as aspas na data. Não é para ter. Observe como eu havia dito que a consulta deveria ficar:

agora sua string de consulta gerará algo como:

SELECT * FROM ABASTECIMENTO WHERE dia_abastecimento BETWEEN #2007-01-01# AND #2007-02-28# ORDER BY cod_placa, dia_abastecimento

Como eu disse, o # é o delimitador de datas - não aspas.

Abraços

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...