INSERT usando SQLRDD no MYSql

Forum sobre SQL.

Moderador: Moderadores

jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

INSERT usando SQLRDD no MYSql

Mensagem por jelias »

Amiguinhos,

Temos um sistema feito em PHP+MYSQL que roda nas nuvens e os representantes comerciais da empresa fazem seus pedidos através do mesmo, e na empresa fiz integração no sistema usando xHarbour 1.2.1 + SQLRDD, trazendo os pedidos e atualizando os dados de cadastros na nuvens.
Tudo está funcionando certinho, mais tenho que melhorar um processo que é o INSERT.
Quando estou cadastrando dados nas nuvens, mesmo usando o comando SR_CommitTransaction() após cada atualização, a alteração que é concretizada no bando de dados, somente ocorre verdadeiramente quando eu fecho a conexão. SR_EndConnection( nCnn )

Abertura do banco de dados

Código: Selecionar todos

  //-------------------------------------------------------------------------
   // Primeiro fazer teste de conectividade com o banco nas Nuvens
   //
   nCnn = sr_addConnection( CONNECT_MYSQL, "MYSQL=;UID=;PWD=;DTB=;PORT=3306")
   if nCnn < 0
      mensagem("Erro de conexao com o banco de dados!",3)
      MENSAGEM("Nao sera possivel usar esta opcao neste momento!",5)
      ABREARQ(,.F.)
      RESTSCREEN(00,00,24,79,aTel)
   else
      WIN3D("Conexao com o Banco de Dados",03,01,05,30,2,"9")
      @ 04,05 say "Conectado com SUCESSO"
      sr_msg(2)
      sr_setfastopen(.T.)
      sr_setbaselang(2)
      sr_setactiveconnection( nCnn )
   end
Comando INSERT

Código: Selecionar todos

nConect=sr_getconnection()
      nConect:exec([INSERT INTO tb_v_produtos (vstrCodProduto,vstrDescricao,vstrPrecoTab,vdecDesconto1,vdecDesconto2,vdecDesconto3,vdecDesconto4,vdecDesconto5,vdecDesconto6,vdecDescAtcd1,vdecDescAtcd2,vdecDescAtcd3,vdecDescAtcd4,vdecDescAtcd5,vstrTipo,vstrCodBarra,vintStatus) ]+;
      [VALUES ("]+ALLTRIM(AL_ESTOQ->codigo)+;
      [","]+ALLTRIM(AL_ESTOQ->descri)+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->pretab,"99999999.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->indic1,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->indic2,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->indic3,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->indic4,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->indic5,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->indic6,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->desca1,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->desca2,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->desca3,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->desca4,"99.99"))+;
      [","]+ALLTRIM(TRANS(AL_ESTOQ->desca5,"99.99"))+;
      [","]+cTipo+;
      [","]+ALLTRIM(AL_ESTOQ->codbar)+;
      [","]+IIF(AL_ESTOQ->situac="01","1",IIF(AL_ESTOQ->situac="03","3","2"))+[")])
      SR_CommitTransaction()
Espero resolver esta situação com a ajuda dos amigos e assim como no xHarbour poder atualizar o registro logo após o comitar.

Saudações,

Júlio.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

INSERT usando SQLRDD no MYSql

Mensagem por Jairo Maia »

Olá Júlio,

Você não postou a função completa, então, apenas um palpite:

O comando SR_EndConnection() salva os dados pendentes e encerra a conexão. Como você disse, está funcionando, então um palpite:

Por acaso você não está executando mais de uma vez a sequência SR_BeginTransaction()/SR_EndTransaction(), está? Se sim, para cada sequencia SR_BeginTransaction()/SR_EndTransaction() você terá que usar um SR_CommitTransaction().
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
jelias
Usuário Nível 3
Usuário Nível 3
Mensagens: 260
Registrado em: 27 Ago 2008 11:32
Localização: Minas Gerais

INSERT usando SQLRDD no MYSql

Mensagem por jelias »

Amigo Jairo, grato por responder.

Eu não uso as funções, SR_BeginTransaction()/SR_EndTransaction(). Neste caso deveria? Como e quando devo usá-las?

Sds,

Júlio.
xHarbour 1.2.1 (simplex) + BCC 5.8.2 + Hwgui + SQLRDD
Clipper 5.2e / Blinker 7
Júlio Cézar Elias
e-mail: jelias@tpnet.psi.br
Avatar do usuário
Itamar M. Lins Jr.
Administrador
Administrador
Mensagens: 7928
Registrado em: 30 Mai 2007 11:31
Localização: Ilheus Bahia
Curtiu: 1 vez

INSERT usando SQLRDD no MYSql

Mensagem por Itamar M. Lins Jr. »

set autocommit = 0
See
http://dev.mysql.com/doc/refman/5.5/en/ ... ommit.html
The FLUSH and RESET statements cause an implicit commit.
Saudações,
Itamar M. Lins Jr.
Saudações,
Itamar M. Lins Jr.
Avatar do usuário
Jairo Maia
Moderador
Moderador
Mensagens: 2785
Registrado em: 16 Ago 2010 13:46
Localização: Campinas-SP

INSERT usando SQLRDD no MYSql

Mensagem por Jairo Maia »

Olá Júlio,
jelias escreveu:Eu não uso as funções, SR_BeginTransaction()/SR_EndTransaction(). Neste caso deveria? Como e quando devo usá-las?
Acho que você deve (ou pode) usar toda vez que for fazer uma transmissão:

Código: Selecionar todos

SR_BeginTransaction()

try

  Seu código...

  SR_CommitTransaction()

catch e

  SR_RollbackTransaction()  // falhou? retoma ambiente anterior...

end

SR_EndTransaction()
No entanto, vendo com mais cuidado o comando INSERT, antes de qualquer alteração tente alterar a função SR_CommitTransaction() para:

Código: Selecionar todos

SR_CommitTransaction( nConect )
ou
nConect:Commit()
Abraços, Jairo
Harbour / Clipper 5.2e - Blinker 7
(Não respondo dúvidas por MP ou E-mail. Por favor, não encaminhe via mensagem privada ou e-mail, dúvidas que podem ser compartilhadas com todos no fórum)
Responder