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:
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