Trabalhar com data no Oracle Boa tarde, Pessoal criei uma variável NLS_LANG e apliquei o mesmo tipo que encontro no banco: AMERICAN_AMERICA.AL32UTF8. Desta maneira não tenho problemas na visualização de datas e também de acentos. Porem ao tentar realizar um insert tenho a mensagem de erro em anexo, eu utilizei o código padrão do Studio Professional do form de cadastro como descrito abaixo: ...
EL
Trabalhar com data no Oracle  
Fechado
Boa tarde,
Pessoal criei uma variável NLS_LANG e apliquei o mesmo tipo que encontro no banco: AMERICAN_AMERICA.AL32UTF8.
Desta maneira não tenho problemas na visualização de datas e também de acentos.
Porem ao tentar realizar um insert tenho a mensagem de erro em anexo, eu utilizei o código padrão do Studio Professional do form de cadastro como descrito abaixo:

 
  1. <?php
  2. /**
  3. * SacPesquisaForm Registration
  4. * @author <your name here>
  5. */
  6. class Pesquisa extends TPage
  7. {
  8. protected $form; // form
  9. use Adianti\\Base\\AdiantiStandardFormTrait; // Standard form methods
  10. /**
  11. * Class constructor
  12. * Creates the page and the registration form
  13. */
  14. function __construct()
  15. {
  16. parent::__construct();
  17. $this->setDatabase('dbprod'); // defines the database
  18. $this->setActiveRecord('SacPesquisa'); // defines the active record
  19. // creates the form
  20. $this->form = new TQuickForm('form_SacPesquisa');
  21. $this->form->class = 'tform'; // change CSS class
  22. $this->form->style = 'display: table;width:100%'; // change style
  23. // define the form title
  24. $this->form->setFormTitle('SacPesquisa');
  25. // create the form fields
  26. //$NR_SEQUENCIA = new TEntry('NR_SEQUENCIA');
  27. $NR_SEQ_APRES = new TEntry('NR_SEQ_APRES');
  28. $DT_AVALIACAO = new TEntry('DT_AVALIACAO');
  29. $DT_ATUALIZACAO = new TEntry('DT_ATUALIZACAO');
  30. $NM_USUARIO = new TEntry('NM_USUARIO');
  31. $CD_PESSOA_FISICA = new TEntry('CD_PESSOA_FISICA');
  32. $NR_SEQ_TIPO_AVALIACAO = new TEntry('NR_SEQ_TIPO_AVALIACAO');
  33. $DS_OBSERVACAO = new TEntry('DS_OBSERVACAO');
  34. $CD_ESTABELECIMENTO = new TEntry('CD_ESTABELECIMENTO');
  35. $DT_LIBERACAO = new TEntry('DT_LIBERACAO');
  36. $CD_SETOR_ATENDIMENTO = new TEntry('CD_SETOR_ATENDIMENTO');
  37. $NR_SEQ_CICLO = new TEntry('NR_SEQ_CICLO');
  38. $DT_CANCELAMENTO = new TEntry('DT_CANCELAMENTO');
  39. $NM_USUARIO_CANCELAMENTO = new TEntry('NM_USUARIO_CANCELAMENTO');
  40. $CD_PERFIL = new TEntry('CD_PERFIL');
  41. $NR_SEQ_BO = new TEntry('NR_SEQ_BO');
  42. $CD_CONVENIO = new TEntry('CD_CONVENIO');
  43. // add the fields
  44. //$this->form->addQuickField('Nr Sequencia', $NR_SEQUENCIA, 200 );
  45. $this->form->addQuickField('Seq. Apres.', $NR_SEQ_APRES, 200 );
  46. $this->form->addQuickField('Dt Avaliacao', $DT_AVALIACAO, 200 );
  47. $this->form->addQuickField('Dt Atualizacao', $DT_ATUALIZACAO, 200 );
  48. $this->form->addQuickField('Nm Usuario', $NM_USUARIO, 200 );
  49. $this->form->addQuickField('Cd Pessoa Fisica', $CD_PESSOA_FISICA, 200 );
  50. $this->form->addQuickField('Nr Seq Tipo Avaliacao', $NR_SEQ_TIPO_AVALIACAO, 200 );
  51. $this->form->addQuickField('Ds Observacao', $DS_OBSERVACAO, 200 );
  52. $this->form->addQuickField('Cd Estabelecimento', $CD_ESTABELECIMENTO, 200 );
  53. $this->form->addQuickField('Dt Liberacao', $DT_LIBERACAO, 200 );
  54. $this->form->addQuickField('Cd Setor Atendimento', $CD_SETOR_ATENDIMENTO, 200 );
  55. $this->form->addQuickField('Nr Seq Ciclo', $NR_SEQ_CICLO, 200 );
  56. $this->form->addQuickField('Dt Cancelamento', $DT_CANCELAMENTO, 200 );
  57. $this->form->addQuickField('Nm Usuario Cancelamento', $NM_USUARIO_CANCELAMENTO, 200 );
  58. $this->form->addQuickField('Cd Perfil', $CD_PERFIL, 200 );
  59. $this->form->addQuickField('Nr Seq Bo', $NR_SEQ_BO, 200 );
  60. $this->form->addQuickField('Cd Convenio', $CD_CONVENIO, 200 );
  61. if (!empty($DT_AVALIACAO))
  62. {
  63. $DT_AVALIACAO->setEditable(FALSE);
  64. $DT_AVALIACAO->setValue(date("d/m/Y h:i:s"));
  65. $DT_ATUALIZACAO->setEditable(FALSE);
  66. $DT_ATUALIZACAO->setValue(date("d/m/Y h:i:s"));
  67. $NM_USUARIO->setEditable(FALSE);
  68. $NM_USUARIO->setValue('ELOPES');
  69. }
  70. /** samples
  71. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  72. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  73. $fieldX->setSize( 100, 40 ); // set size
  74. **/
  75. // create the form actions
  76. $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
  77. $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onEdit')), 'bs:plus-sign green');
  78. // vertical box container
  79. $container = new TVBox;
  80. $container->style = 'width: 90%';
  81. // $container->add(new TXMLBreadCrumb('menu.xml', __CLASS__));
  82. $container->add($this->form);
  83. parent::add($container);
  84. }
  85. }
  86. Como posso contornar está situação?

Curso Dominando o Adianti Framework

O material mais completo de treinamento do Framework.
Curso em vídeo aulas + Livro completo + Códigos fontes do projeto ERPHouse.
Conteúdo Atualizado!


Dominando o Adianti Framework Quero me inscrever agora!

Comentários (6)


FC

Usei o Adianti com ORACLE uma vez lembro que a data entrava assim 'dd/mm/yyyy hh:mm:ss' somente dessa forma com aspas como se fosse string, mas no campo date pena não tenho mais aqui para testar.
EL

Boa tarde, Felipe!
Mas você realizava o insert manualmente sem as classes do Adianti?
Pois tentei economizar no código usando o TAction e deu esta mensagem e se for isso vou tentar escrever o insert manual.

 
  1. <?php
  2. if (!empty($DT_AVALIACAO))
  3. {
  4. $DT_AVALIACAO->setEditable(FALSE);
  5. $DT_AVALIACAO->setValue(date("d/m/Y h:i:s"));
  6. $DT_ATUALIZACAO->setEditable(FALSE);
  7. $DT_ATUALIZACAO->setValue(date("d/m/Y h:i:s"));
  8. $NM_USUARIO->setEditable(FALSE);
  9. $NM_USUARIO->setValue('tasy');
  10. }
  11. /** samples
  12. $this->form->addQuickFields('Date', array($date1, new TLabel('to'), $date2)); // side by side fields
  13. $fieldX->addValidation( 'Field X', new TRequiredValidator ); // add validation
  14. $fieldX->setSize( 100, 40 ); // set size
  15. **/
  16. // create the form actions
  17. $this->form->addQuickAction(_t('Save'), new TAction(array($this, 'onSave')), 'fa:floppy-o');
  18. $this->form->addQuickAction(_t('New'), new TAction(array($this, 'onEdit')), 'bs:plus-sign green');
  19. ?>
FC

Usava sim, não precisei mexer nas classes não , mas lembro que o Oracle tem um configuração de inserção de datas onde define como é feito o input.
FC

Usava sim, não precisei mexer nas classes não , mas lembro que o Oracle tem um configuração de inserção de datas onde define como é feito o input.
EL

Boa tarde,
O INSERT deveria ficar assim:

insert into sac_pesquisa (nr_sequencia, dt_avaliacao, dt_atualizacao, nm_usuario, nr_seq_tipo_avaliacao) select nvl(max(nr_sequencia),0)+1, TO_TIMESTAMP('20/5/2016 10:47:35','DD/MM/YYYY HH24:MI:SS'), TO_TIMESTAMP('20/5/2016 10:47:35','DD/MM/YYYY HH24:MI:SS'), 'Eduardo', '22' from sac_pesquisa
PD

Alteramos a TConnection para que na próxima versão o formato seja definido logo após a conexão:

 
  1. <?php
  2. case 'oracle':
  3. $port = $port ? $port : '1521';
  4. $charset = $char ? ";charset={$char}" : '';
  5. $conn = new PDO("oci:dbname={$host}:{$port}/{$name}{$charset}", $user, $pass);
  6. if (isset($db['date']))
  7. {
  8. $date = $db['date'];
  9. $conn->query("ALTER SESSION SET NLS_DATE_FORMAT = '{$date}'");
  10. }
  11. break;
  12. ?>