Ir para o conteúdo

 Voltar a REDECA Suporte
Tela cheia

Erro na Versão 2.0 ao cadastrar pessoa

14 de Setembro de 2010, 15:36 , por Desconhecido - | Ninguém seguindo este artigo por enquanto.
Visualizado 172 vezes

Boa tarde,

 

Atualizamos para a versão 2.0 e, ao cadastrar uma pessoa, aparece a mensagem de erro na tela "Houve uma falha ao salvar a pessoa".

O arquivo de log da aplicação indica que o erro é

2010-09-14T15:29:26-03:00 ERR (3): Caught exception: Zend_Db_Statement_Exception
Message: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id_person' at row 1 [Stack] exception 'Zend_Db_Statement_Exception' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id_person' at row 1' in C:\programs\xampp\htdocs\redeca\lib\Zend\Db\Statement\Pdo.php:227
Stack trace:
#0 C:\programs\xampp\htdocs\redeca\lib\Zend\Db\Statement.php(279): Zend_Db_Statement_Pdo->_execute(Array)
#1 C:\programs\xampp\htdocs\redeca\lib\Zend\Db\Adapter\Abstract.php(396): Zend_Db_Statement->execute(Array)
#2 C:\programs\xampp\htdocs\redeca\lib\Zend\Db\Adapter\Pdo\Abstract.php(206): Zend_Db_Adapter_Abstract->query('INSERT INTO `pe...', Array)
#3 C:\programs\xampp\htdocs\redeca\lib\Zend\Db\Adapter\Abstract.php(474): Zend_Db_Adapter_Pdo_Abstract->query('INSERT INTO `pe...', Array)
#4 C:\programs\xampp\htdocs\redeca\lib\Zend\Db\Table\Abstract.php(769): Zend_Db_Adapter_Abstract->insert('per_person', Array)
#5 C:\programs\xampp\htdocs\redeca\application\business\PersonBusiness.php(71): Zend_Db_Table_Abstract->insert(Array)
#6 C:\programs\xampp\htdocs\redeca\application\controllers\PersonController.php(242): PersonBusiness::save(Array)
#7 C:\programs\xampp\htdocs\redeca\lib\Zend\Controller\Action.php(499): PersonController->addAction()
#8 C:\programs\xampp\htdocs\redeca\lib\Zend\Controller\Dispatcher\Standard.php(242): Zend_Controller_Action->dispatch('addAction')
#9 C:\programs\xampp\htdocs\redeca\lib\Zend\Controller\Front.php(929): Zend_Controller_Dispatcher_Standard->dispatch(Object(Zend_Controller_Request_Http), Object(Zend_Controller_Response_Http))
#10 C:\programs\xampp\htdocs\redeca\index.php(187): Zend_Controller_Front->dispatch()
#11 {main}


Para os usuários da versão 2.0, alguém também teve o mesmo problema e como resolver?

Abraços.

Autor: Celso Nishioka


1111 comentários

  • F29116043d0e46bf714d76d300a53da8?only path=false&size=50&d=404Celso Nishioka(usuário não autenticado)
    14 de Setembro de 2010, 16:18

     

    Se ajudar em alguma coisa....

    Reparei que a mensagem de erro indica que foi passado um valor string vazio para um campo inteiro auto-incrementável.

    Fiz um teste há pouco e modifiquei em PersonController.php conforme código abaixo e resolveu o problema. Por enquanto vamos usar esta solução até obtermos uma outra resposta.

                // retorna um array com as informações de pessoa
                $person = PersonForm::assembleFormToPerson($this->view->form);

                // linha adicionada para tornar o valor null e permitir a insercao pelo banco de dados
                $person[PRS_ID_PERSON] = Null;
                           
                // retorna metafones para nome e apelido
                $person[PRS_METANAME] = MetaPhoneClass::getMetaPhone($person[PRS_NAME]);

    Abraços.

    • 5124050685f66a5b9c49dcaf2a6cf243?only path=false&size=50&d=404Equipe Suporte Redeca S2it(usuário não autenticado)
      14 de Setembro de 2010, 16:56

       

      Oi Celso,

      Aqui no nosso ambiente estamos executando a versão 2.0 do Redeca com as versões: MySql  5.1.36 e PHP 5.2.11 e não é necessário acrescentar a linha acima mencionada.

      Mas, já aproveitando a sua gentileza em postar o código, que inclusive solucionou o seu problema, gostaríamos de simular aqui no nosso ambiente este erro que você menciona e para isso peço que você poste as versões do PHP e MySQL que tem utilizado ai.

      Agradeço desde já.

      Abraço.

      Fabricio Meireles Monteiro

      • F29116043d0e46bf714d76d300a53da8?only path=false&size=50&d=404Celso Nishioka(usuário não autenticado)
        14 de Setembro de 2010, 17:09

         

        Oi Fabricio,

         

        Conseguimos simular o erro em dois ambientes, sendo que um deles é Windows 7 Ultimate com MySQL 5.1.46 e o outro é Windows Server 2008 com MySQL 5.1.50.

        Em ambos utilizamos a instalação do Xampp 1.7.1, com Apache 2.2.11 e PHP 5.2.9.

        Se precisar de mais informações, é só pedir.

         

        Abraços.

        • 5124050685f66a5b9c49dcaf2a6cf243?only path=false&size=50&d=404Equipe Suporte Redeca S2it(usuário não autenticado)
          14 de Setembro de 2010, 18:01

           

          Oi Celso,

          Implementaremos aqui os ajustes necessários conforme você mesmo sugeriu para que o Redeca continue compatível que estas versões do MySQL que você mencionou.

          Cabe lembrar que este ajuste já vai estar disponível na próxima versão, ou seja, a versão 2.1.

          Obrigado.

           

          Abraço.

          Fabricio Meireles Monteiro

          • F29116043d0e46bf714d76d300a53da8?only path=false&size=50&d=404Celso Nishioka(usuário não autenticado)
            23 de Setembro de 2010, 10:55

             

            Olá Fabrício,

            Faz pouco tempo que implantamos o Redeca na instituição Pró-Criança de nossa cidade. Conforme eles utilizam o sistema, reportam os erros para nós.

            Após o erro relatado acima do cadastro de Pessoas, eles relataram nesta semana que não conseguiam efetuar o cadastro de Moradia e Renda.

            Fizemos alguns testes e instalamos a versão do MySQL que você indicou. Infelizmente, nem assim os erros foram resolvidos.

            Assim como fiz com o cadastro de Pessoas, ontem comecei a alterar o código-fonte da aplicação para resolver os problemas relatados. Após pesquisar os erros em fóruns diversos, surgiu a hipótese que o problema possa estar na configuração do MySQL, mais precisamente no parâmetro "sql-mode" que é definido no arquivo "my.ini" ou "my.cnf".

            Por favor, você pode encaminhar o seu arquivo para eu conferir as minhas configurações ou pelo menos indicar como está a configuração do parâmetro "sql-mode"?

             

            Desde já agradeço.

            Abraços,
            Celso Nishioka

            • 5124050685f66a5b9c49dcaf2a6cf243?only path=false&size=50&d=404Equipe Suporte Redeca S2it(usuário não autenticado)
              27 de Setembro de 2010, 11:00

               

              Oi Celso, 

              Encaminhei via e-mail o arquivo "my.ini" que utilizo aqui.

              Estou analisando aqui o que pode gerar o erro que você menciona. Você tem a "mensagem de erro" ou o "log" que a aplicação gerou ?

              Um abraço.

              Fabricio Meireles Monteiro

              • F29116043d0e46bf714d76d300a53da8?only path=false&size=50&d=404Celso Nishioka(usuário não autenticado)
                27 de Setembro de 2010, 14:06

                 

                Olá Fabrício,

                 

                Obrigado pelo envio do arquivo por e-mail. Vou postar por aqui a descrição do problema e a solução que encontrei, para que sirva de ajuda caso algum usuário venha a ter o mesmo tipo de problema. Se precisar de mais detalhes técnicos, podemos trocar mais informações por e-mail.

                 

                As mensagens de erro que aparecem são semelhantes à primeira que indiquei. Reparei em dois comportamentos.

                No primeiro deles, ele envia uma string vazia para um campo numérico auto incrementável e por conta disso, não consegue realizar a inserção. Resolvi esse problema forçando a SQL a enviar NULL ao invés de uma string vazia.

                No segundo caso, ele não envia valores para campos que na base estão definidos como NOT-NULL. Normalmente este tipo de erro ocorre com os campos de nome "status".

                 

                Uma vez que estava ficando muito trabalhoso corrigir tudo isso manualmente, tentei instalar a versão MySQL que você indicou. Como isso também não resolveu o problema, fiz algumas pesquisas nos fóruns de MySQL e encontrei uma sugestão que resolveu nosso problema, sem precisarmos alterar o código-fonte do Redeca.

                No Windows, ao instalar o MySQL, o arquivo de configuração "my.ini" normalmente contém um parâmetro chamado "sql-mode". Não vou lembrar de cabeça, mas por padrão ele aparentemente inicia com os valores sql-mode="STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION".

                A sugestão indicada foi alterar este parâmetro e remover os tipos de restrições, de forma que ele fique definido como sql-mode=""

                Com essa alteração, o cadastro de Pessoa, Moradia e Renda funciona normalmente em nosso ambiente Windows, e com o código-fonte disponibilizado na versão 2.0

                Ainda estamos avaliando se essa alteração causará algum outro tipo de problema.

                Reparei que no arquivo que você me enviou, este parâmetro não consta. Não sei se isso foi alterado por vocês ou se o arquivo padrão no Ubuntu é diferente.

                Estou à disposição caso precise de mais informações.

                Abraços,
                Celso Nishioka.

                • 5124050685f66a5b9c49dcaf2a6cf243?only path=false&size=50&d=404Equipe Suporte Redeca S2it(usuário não autenticado)
                  27 de Setembro de 2010, 17:12

                   

                  Oi Celso, tudo bem ?!

                  Primeiro, obrigado pelas informações e desculpe-nos pela demora no retorno. Vamos lá !

                  Essa alteração não vai impactar o Redeca mas caso esteja utilizando o mesmo MySQL pra outras aplicações seria bom avaliar o impacto disso sobre as mesmas.

                  O "sql-mode" que você menciona está relacionado com a instalação e configuração da sua base de dados e não com a aplicação Redeca. Ou seja, seria interessante você alterar essas configurações da sua base de dados em vez de alterar os arquivos ".php" da sua aplicação Redeca.

                  O parâmetro "sql-mode" basicamente vai aplicar algumas validações sobre as informações a serem inseridas na base de dados e inclusive causa uma ligeira queda de performance na utilização do Redeca, já que todos os dados a serem inseridos na base de dados passarão pelas validações implementadas no parâmetro "sql-mode".

                  O Redeca já aplica todas as validações necessárias sobre os dados antes de inserí-los no banco de dados.

                  Um abraço.

                   

                  Fabricio Meireles Monteiro

                  • F29116043d0e46bf714d76d300a53da8?only path=false&size=50&d=404Celso Nishioka(usuário não autenticado)
                    27 de Setembro de 2010, 20:35

                     

                    Olá Fabrício...

                    Na realidade, como eu reportei anteriormente, a partir do momento que alteramos este parâmetro, voltamos ao código-fonte original do Redeca 2.0, pois as alterações que aplicamos nos fontes php não mais se fizeram necessárias.

                    O banco de dados MySQL é compartilhado entre outras aplicações, mas isto não é problema para nós, porque esta configuração padrão só causava erros no Redeca, e não nas outras aplicações.

                    Fico feliz em saber que esta configuração do parâmetro não trara malefícios ao Redeca, porque esta era justamente a nossa dúvida.

                     

                    Abraços,
                    Celso Nishioka

                    • 5124050685f66a5b9c49dcaf2a6cf243?only path=false&size=50&d=404Equipe Suporte Redeca S2it(usuário não autenticado)
                      28 de Setembro de 2010, 9:33

                       

                      Olá Celso,

                      Eu tinha me esquecido de dizer que a aplicação Redeca em momento algum carrega valores no parâmetro "sql-mode".

                      Do mais Celso, muito obrigado por fazer junto conosco um Redeca cada vez melhor.

                      Um abraço.

                       

                      Fabricio Meireles Monteiro

          • 5124050685f66a5b9c49dcaf2a6cf243?only path=false&size=50&d=404Equipe Suporte Redeca S2it(usuário não autenticado)
            27 de Setembro de 2010, 17:24

             

            Olá.

            Após uma análise mais aprimorada foi constatado que os problemas postados relacionados aos cadastros de forma geral no sistema Redeca estão estritamente associados com as configurações da base de dados MySQL. Até o momento pudemos concluir que o parâmetro "sql-mode" deve ser configurado para sql-mode="" (vazio) para que o Redeca seja executado com sucesso e sem erros durante os cadastros.

            Um abraço a todos.

             

            Fabricio Meireles Monteiro

Suporte a dúvidas

27 de Fevereiro de 2013, 11:41, por Desconhecido

O suporte a dúvidas do sistema Redeca será efetuado a partir do dia 20/02/2013 pela própria comunidade utilizadora da aplicação.



Versão 3.0.0 do Redeca disponível!

18 de Agosto de 2011, 11:20, por Desconhecido

Está disponível a nova versão do Redeca (v3.0.0), com um módulo de saúde adicionado e correções de vários Bugs apontados pela comunidade.



Novo local para download das versões do Redeca

9 de Junho de 2011, 15:16, por Desconhecido

Autor: Equipe Suporte Redeca S2it



Disponibilização da versão 2.1

8 de Outubro de 2010, 17:17, por Desconhecido

Autor: Equipe Suporte Redeca S2it



Nova versão disponível

27 de Maio de 2010, 11:32, por Desconhecido

Autor: Equipe Suporte Redeca S2it