locked
Como resolvo um problema de data num Insert?? RRS feed

  • Pergunta

  •  

    Olá!

     

    Estou com um problema e não sei por onde resolvê-lo....

     

    Tabela em SQL 2005 Express:
    [tbLogs]
     idLog  int (identity) id do log
     lgData  smalldatetime data/hora do log
     lgModulo  varchar(50) frm do sistema que gerou o log
     lgEvento  varchar(50) tipo de evento do log
     lgUser  varchar(30) código do usuário/funcionário
     lgEstacao  varchar(30) estação de trabalho utilizada
     lgVersao  varchar(30) versão do sistema utilizada
     lgMsg  varchar(MAX) mensagem adicional

     

    Rotina em VB6:
        vSql = "Insert into tbLogs (lgData, lgModulo, lgUser, lgEvento, lgEstacao,"
        vSql = vSql & " lgVersao, lgMsg) values ('" & Format(Now, "MM/dd/yyyy HH:mm") & "', '"
        vSql = vSql & vObj & "', '" & vUser & "-" & nUser & "', '" & nTipo & "', '"
        vSql = vSql & StationName & "', '" & App.Major & "." & App.Minor & " r"
        vSql = vSql & App.Revision & "', '" & MudaStr(vInf, "'", "") & "');"
        db.Execute (vSql)

     

    Resultados e problemas:

    - Tanto a estação onde está o SQL Server, quanto as demais, são Windows XP Professional
    - Quando executado na estação em que o SQL está instalado, passa sem problema algum.
    - Quando executado em outra estação, ganho a seguinte mensagem de erro:
    "Erro -2147217913: The conversion of char data type to smalldatetime data type resulted in an out-of-range smalldatetime value".

     

    O que eu faço?

     

    Sandro.

    segunda-feira, 7 de janeiro de 2008 10:20

Respostas

  • Bom Dia,

     

    Provavelmente a estação em que você consegue está com o Regional Settings diferente. Talvez o Default Language do usuário também possa ser diferente (se você estiver fazendo o teste com usuários diferentes). Essa questão de datas é um problema comum no SQL Server. Sempre é necessário configurar um detalhezinho ou algo do tipo para funcionar. Para evitar problemas com data eu recomendo adotar duas práticas.

     

    - Utilizar um SET DATEFORMAT YMD antes das instruções que usam datas

    - Passar todas as datas (inclusive para comparação) no formato YYYY-MM-DD HH:MMTongue TiedS

     

    Se você fizer dessa forma, dificilmente terá dores de cabeça com datas (além de um bom desempenho nas consultas). Para resolver o seu problema especificamente, você pode colocar a instrução SET DATEFORMAT DMY antes de realizar o INSERT. O uso do SET DATEFORMAT é fundamental para que você não dependa de nenhuma configuração de máquina ou de login.

     

    [ ]s,

     

    Gustavo

     

     

    • Marcado como Resposta Richard Juhasz quinta-feira, 9 de agosto de 2012 18:08
    segunda-feira, 7 de janeiro de 2008 11:28
  • Gustavo,

     

    Concordo com você em utilizar o Set Dateformat, principalmente em relação a definir um formato padrão, com isso a possibilidade de erros é muito menor de ocorrer durante o processamento do comando Insert.

    • Marcado como Resposta Richard Juhasz quinta-feira, 9 de agosto de 2012 18:08
    segunda-feira, 7 de janeiro de 2008 11:53

Todas as Respostas

  • Bom Dia,

     

    Provavelmente a estação em que você consegue está com o Regional Settings diferente. Talvez o Default Language do usuário também possa ser diferente (se você estiver fazendo o teste com usuários diferentes). Essa questão de datas é um problema comum no SQL Server. Sempre é necessário configurar um detalhezinho ou algo do tipo para funcionar. Para evitar problemas com data eu recomendo adotar duas práticas.

     

    - Utilizar um SET DATEFORMAT YMD antes das instruções que usam datas

    - Passar todas as datas (inclusive para comparação) no formato YYYY-MM-DD HH:MMTongue TiedS

     

    Se você fizer dessa forma, dificilmente terá dores de cabeça com datas (além de um bom desempenho nas consultas). Para resolver o seu problema especificamente, você pode colocar a instrução SET DATEFORMAT DMY antes de realizar o INSERT. O uso do SET DATEFORMAT é fundamental para que você não dependa de nenhuma configuração de máquina ou de login.

     

    [ ]s,

     

    Gustavo

     

     

    • Marcado como Resposta Richard Juhasz quinta-feira, 9 de agosto de 2012 18:08
    segunda-feira, 7 de janeiro de 2008 11:28
  • Gustavo,

     

    Concordo com você em utilizar o Set Dateformat, principalmente em relação a definir um formato padrão, com isso a possibilidade de erros é muito menor de ocorrer durante o processamento do comando Insert.

    • Marcado como Resposta Richard Juhasz quinta-feira, 9 de agosto de 2012 18:08
    segunda-feira, 7 de janeiro de 2008 11:53
  • e no access como soluciono este caso?
    terça-feira, 18 de março de 2008 14:41