marcioe Posted March 24, 2017 Report Share Posted March 24, 2017 Bom dia a Todos os amigos, Estou com problemas em um Servidor Linux, na atualização de dados, explicarei melhor abaixo: A situação atual é a seguinte. O servidor está com MYSQL e o S.O. Linux DEBIAN 8.7.1 Gnome. Dai tenho por Exemplo 07 Estaçoes, (Estacao_01,Estacao_02...... Estacao_07). Estão conectando e funcionando. O Problema é assim Se a estação 02 Modificar um Cadastro de um cliente, (trocar o endereço) por exemplo, gravar os dados. Dai vou na estação 07 por exemplo e consulto o cadastro do cliente, ele ainda está com o endereço antigo. Porem se eu repetir o processo a estação 02 Modifica um Cadastro de um cliente, (trocar o endereço) , gravar os dados. Dai vou na estação 07 Fecho o Sistema e Reabro ele os dados estão atualizados. Estive verificando e a atualização no banco de dados do Servidor acontece realtime. mas porque em uma nova consulta ele nao estão no servidor de imediato. Já fiz o mesmo teste, com um Servidor WINDOWS e o problema nao acontece. será que tenho que configurar algo no MYSQL. Quote Link to comment Share on other sites More sharing options...
Eroni Posted March 24, 2017 Report Share Posted March 24, 2017 Bom dia , Me parece que você não está usando transação e o mysql está configurado para não dar o autocommit. Reveja estes conceitos, geralmente as instalações em Windows já vem com o padrão autocommit, diferente do Linux. Quando você fecha o sistema, ao desconectar o banco já faz um commit de tudo que está pendente. Você não especificou qual RDD que está usando, se especificar quem sabe posso ajudar mais. Abraço. Quote Link to comment Share on other sites More sharing options...
marcioe Posted March 24, 2017 Author Report Share Posted March 24, 2017 Olá amigo, obrigado por responder. Vamos lá Uso SQLLIB o mysql que instalei no linux, apenas configurei os itens abaixo *=================================================================== Instalar um servidor da base de dados MySQL, por padrão ele só será acessado por aplicações que estejam na mesma máquina que o servidor, em outras palavras, não está habilitado para acesso remoto. Neste tutorial iremos aprender a liberar o acesso remoto. Atenção: Execute estes comando no terminal do servidor. 1º abra um terminal 2º nano /etc/mysql/my.cnf 3º altere a linha bind-address = 127.0.0.1 para bind-address = 0.0.0.0 4º reinicie o servidor com o comando /etc/init.d/mysql restart 5º entre no prompt do mysql com o comando: mysql –u root –p Será solicitado a senha do usuário root para servidor MySQL 6º no prompt do MySQL digite: GRANT ALL ON *.* TO root@’%’ IDENTIFIED By ‘senhadoroot’; O comando acima irá permitir acesso a todos os bancos de dados de qualquer máquina remota ao usuário root. *=================================================================== Teria alguma coisa a mais Quote Link to comment Share on other sites More sharing options...
joaosolution Posted March 24, 2017 Report Share Posted March 24, 2017 Marcio Boa tarde Uso este comando após conectar com o banco, isso direto no meu sistema. SQL EXECUTE "SET SESSION AUTOCOMMIT=1" Veja se ajuda. Att João Bosco Quote Link to comment Share on other sites More sharing options...
Eroni Posted March 24, 2017 Report Share Posted March 24, 2017 Boa tarde, faz muito tempo que não uso sqllib, mas deve ter alguma forma de você trabalhar com transação, tipo assim: // Comando de Iniciar a transação < seus comandos insert, delete update > // Comando de encerrar a transação Desta forma você garante a integridade de todo o bloco de gravação das informações, ou grava tudo ou não grava. Eu trabalho sempre assim. mas uso outro RDD não sei como é na sqllib. De qualquer fora, o que está faltando no seu código é o commit ao final. Quote Link to comment Share on other sites More sharing options...
marcioe Posted March 24, 2017 Author Report Share Posted March 24, 2017 SQL CONNECT ON (TRIM(T_IP_SERVER)); // Nome da estação ou IP do micro onde o MySQL está rodando PORT 3306; // Numero da porta, onde o servidor SQL está escutando DATABASE (TRIM(T_BANCO_DAD)); USER 'usuario_banco'; PASSWORD 'senha_banco' ; OPTIONS SQL_NO_WARNING; LIB 'MySQL' Como seria esse SQL EXECUTE "SET SESSION AUTOCOMMIT=1" Quanto a gravação já está assim BEGIN TRANSACTION cQuery_Mtabela := "INSERT INTO eventos ( " cQuery_Mtabela := cQuery_Mtabela + " NOME" cQuery_Mtabela := cQuery_Mtabela + ",TIPO" cQuery_Mtabela := cQuery_Mtabela + ",BASE_IRRF" cQuery_Mtabela := cQuery_Mtabela + ",BASE_INSS" cQuery_Mtabela := cQuery_Mtabela + ",BASE_ADIANTAMENTO" cQuery_Mtabela := cQuery_Mtabela + ",BASE_CONTA_RECEBER" cQuery_Mtabela := cQuery_Mtabela + ",COTA_CAPITAL" cQuery_Mtabela := cQuery_Mtabela + ",SITUACAO" cQuery_Mtabela := cQuery_Mtabela + " ) VALUES ( " cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(T_NOME_EVENTOS,"T",35,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_TIPO_EVENTOS='Provento','P','D'),"T",01,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_BASE_IRRF_EVENTOS="Sim","S","N"),"T",01,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_BASE_INSS_EVENTOS="Sim","S","N"),"T",01,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_BASE_ADIN_EVENTOS="Sim","S","N"),"T",01,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_BASE_CCOR_EVENTOS="Sim","S","N"),"T",01,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_CONTA_CAPITAL="Sim","S","N"),"T",01,0) + "," cQuery_Mtabela := cQuery_Mtabela + TRANSFORMA_SQL(IF(T_SITUACAO_EVENTOS="Ativo","A","I"),"T",01,0) cQuery_Mtabela := cQuery_Mtabela + " )" SQL EXECUTE('COMMIT') END TRANSACTION já essa funcao TRANSFORMA_SQL() é uma funcção apenas de conversao dos dados nada mais. mas ao final do insert eu executo o commit no banco en todas as transaçoes olá amigo joao SQL CONNECT ON (TRIM(T_IP_SERVER)); // Nome da estação ou IP do micro onde o MySQL está rodando PORT 3306; // Numero da porta, onde o servidor SQL está escutando DATABASE (TRIM(T_BANCO_DAD)); USER 'usuario_banco'; PASSWORD 'senha_banco' ; OPTIONS SQL_NO_WARNING; LIB 'MySQL' Como seria esse SQL EXECUTE "SET SESSION AUTOCOMMIT=1" agradeço ao amigo Quote Link to comment Share on other sites More sharing options...
CIACPD Posted March 24, 2017 Report Share Posted March 24, 2017 Márcio, este comando deve ser colocado na linha após o sql connect, SQL CONNECT ON ...... SQL EXECUTE "SET SESSION AUTOCOMMIT=1" Daniel Segura Quote Link to comment Share on other sites More sharing options...
Jmsilva Posted March 24, 2017 Report Share Posted March 24, 2017 Marcio Boa tarde Uso este comando após conectar com o banco, isso direto no meu sistema. SQL EXECUTE "SET SESSION AUTOCOMMIT=1" Veja se ajuda. Att João Bosco João pq = 1 sabe me dizer ? Quote Link to comment Share on other sites More sharing options...
joaosolution Posted March 27, 2017 Report Share Posted March 27, 2017 Marcio Manual da SQLLIB: Você pode desejar projetar as suas transações para não incluir estas instruções. Se você executar uma instrução da qual não se pode fazer ROLLBACK em uma transação, e então outra instruções falhar posteriormente, o efeito total da transação não pode ser desfeito usando uma instrução ROLLBACK. Os seguintes comandos finalizam uma transação implicitamente (como se você tivesse feito um COMMIT depois de executar o comando): Comando Comando Comando ALTER TABLE BEGIN CREATE INDEX DROP DATABASE DROP INDEX DROP TABLE LOAD MASTER DATA LOCK TABLES RENAME TABLE SET AUTOCOMMIT=1 START TRANSACTION TRUNCATE Att João Bosco Quote Link to comment Share on other sites More sharing options...
marcioe Posted March 27, 2017 Author Report Share Posted March 27, 2017 Bom dia obrigado a Todos Com o Comando SQL EXECUTE "SET SESSION AUTOCOMMIT=1" , funciona 100%, porem conforme o João Bosco explicou, perde-se o ROLLBACK , então fica meio que não funcional. Pois teria que ficar colocando AUTOCOMMIT=1, em alguns casos e e outros Não. Dai nao é muito pratico. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.