RK
Erro ao salvar formato "datetime" no SQL Server
Olá pessoal,
Tive uma certa dificuldade em resolver um probleminha ao submeter um formulário contendo campo DateTime (conforme imagem anexa) e salvar no banco SQL Server, pois o mesmo apresentava a seguinte mensagem de erro:
O registro é enviado ao banco no formato "yyyy-mm-dd hh:ii:ss", porém no caso do SQL Server o registro deve ser enviado no formato "yyyy-dd-mm hh-ii-ss", então resolvi o problema de todos os formulários do sistema alterando a classe de modelo, apenas incluindo o seguinte método onBeforeStore conforme listado abaixo:
Esse método altera o formato do registro antes de ser submetido ao banco.
Espero que possa ajudar aqueles que enfrentarem a mesma dificuldade.
Tive uma certa dificuldade em resolver um probleminha ao submeter um formulário contendo campo DateTime (conforme imagem anexa) e salvar no banco SQL Server, pois o mesmo apresentava a seguinte mensagem de erro:
SQLSTATE[22007]: [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]A conversão de um tipo de dados varchar em um tipo de dados datetime resultou em um valor fora do intervalo."
O registro é enviado ao banco no formato "yyyy-mm-dd hh:ii:ss", porém no caso do SQL Server o registro deve ser enviado no formato "yyyy-dd-mm hh-ii-ss", então resolvi o problema de todos os formulários do sistema alterando a classe de modelo, apenas incluindo o seguinte método onBeforeStore conforme listado abaixo:
- <?php
- ...
- public function __construct($id = NULL, $callObjectLoad = TRUE)
- {
- parent::__construct($id, $callObjectLoad);
- parent::addAttribute('id');
- parent::addAttribute('trem');
- parent::addAttribute('os');
- parent::addAttribute('ts_importacao');
- parent::addAttribute('ts_meta_entrada_pera');
- parent::addAttribute('ts_meta_inicio');
- parent::addAttribute('ts_meta_fim');
- parent::addAttribute('meta_vagao_hora');
- parent::addAttribute('meta_peso_medio');
- parent::addAttribute('meta_ton_hora');
- parent::addAttribute('ts_entrada_pera');
- parent::addAttribute('ts_inicio');
- parent::addAttribute('ts_fim');
- parent::addAttribute('ts_saida_pera');
- parent::addAttribute('real_vagao_hora');
- parent::addAttribute('real_peso_medio');
- parent::addAttribute('real_ton_hora');
- parent::addAttribute('obs');
- parent::addAttribute('produto_id');
- parent::addAttribute('status_composicao_id');
- parent::addAttribute('origem_id');
- parent::addAttribute('destino_id');
- }
- public function onBeforeStore($object)
- {
- $object->ts_meta_fim = TDateTime::convertToMask($object->ts_meta_fim, 'yyyy-mm-dd hh:ii:ss', 'yyyy-dd-mm hh:ii:ss');
- }
- ...
- ?>
Esse método altera o formato do registro antes de ser submetido ao banco.
Espero que possa ajudar aqueles que enfrentarem a mesma dificuldade.
neste link tem outra opção também.
www.adianti.com.br/forum/pt/view_3432?manipulacao-de-campos-tdate-ut