Luiz Fernando Posted October 6, 2015 Report Share Posted October 6, 2015 Colegas estou com uma situação aqui aonde preciso gravar dados em um outro banco de dados, isto ira ocorrer num unico modulo, qual a forma mais correta de fazer isto, tipo terei que fechar um banco, abrir o outro gravar os dados, fechar este e abrir novamente o principal, ou tem como trabalhar durante o projeto com os dois banco de dados. Obrigado Quote Link to comment Share on other sites More sharing options...
CIACPD Posted October 7, 2015 Report Share Posted October 7, 2015 Luiz, se for sqllib é simples, SQL CONNECT ON alltrim( chost_principal ) PORT 3306 DATABASE db USER user PASSWORD pwd LIB "MySQL" nConn1:= SQLGetConnection() SQL CONNECT ON alltrim( chost_principal ) PORT 3306 DATABASE db2 USER user2 PASSWORD pwd2 LIB "MySQL" nConn2:= SQLGetConnection() sqlsetconnection(nConn1) cPesq_Sql:= "SELECT * FROM grupro WHERE grupro.DTALTERA >="+STR_SQL ( ddtinicio )+" order by grupro.CODGRU" use grupro as cPesq_Sql alias grupro new via 'mysql' sqlsetconnection(nConn2) while ! grupro->(eof()) gravar_na_nconn2() end Daniel Segura Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted October 7, 2015 Author Report Share Posted October 7, 2015 Ola Daniel obrigado pela resposta, só uma duvida fazendo da forma que vc postou acima, eu terei que mexer em todas instruções de sql do meu sistema, pq ate então não tinha a necessidade deste comando sqlsetconnection(nConn1) Obrigado Quote Link to comment Share on other sites More sharing options...
CIACPD Posted October 7, 2015 Report Share Posted October 7, 2015 Acredito que não é necessário, se for em apenas um módulo ou rotina específica, você pode setar a variavel nconn1 com a conexão corrente e criar uma nova quando necessário. Qquer coisa manda como faz para se ter uma idéia. Daniel Segura Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted October 7, 2015 Author Report Share Posted October 7, 2015 Daniel veja a situação aqui no inicio do sistema SqlLib_Conn( AllTrim(Lower(nServidor)),Val(nPorta),Lower(AllTrim(nDatabase)),Lower(AllTrim(nUsuario)),Lower(AllTrim(nSenha)),SQL_NO_WARNING,"MySql") if SQL_Errorno() > 0 alerta3(,'Não foi possivel estabelecer',' a Conexão...') return .f. else alerta1(,'Conexão estabelecida com sucesso...') return .t. endif aDBs:= sqlArray("Show Databases") if ASCAN(aDBs,{|X|X[1]=nDatabase})>0 SQL EXECUTE "use "+nDatabase else SQL EXECUTE "create database "+nDatabase SQL EXECUTE "use "+nDatabase endif numa unica situação dentro do sistema, preciso ao dar um INSERT ou UPDATE , gravar os dados elem da base que esta em uso, em mais uma base externa. exemplo do INSERT SQLBeginTrans() cSql:="INSERT INTO os( pedido,cliente,data,hora,contato,status"+")" cSql+="VALUES( "+any2sql(aOs[D_PEDIDO])+" , "+any2sql(aOs[D_CLIENTE])+" ," cSql+=" "+any2sql(aOs[D_DATA])+" , "+any2sql(aOs[D_HORA])+" ," cSql+=" "+any2sql(aOs[D_CONTATO])+" , "+any2sql(aOs[D_STATUS])+")" SqlExecute(cSql) if SQLErrorNO() > 0 fMensagem() return(.f.) endif SqlExecute("commit") SQLRollBack() SQLEndTrans() SQLRefresh() exemplo do UPDATE SQLBeginTrans() cSql:="UPDATE os SET" cSql+=" pedido="+any2sql(aOs[D_PEDIDO])+" ," cSql+=" cliente="+any2sql(aOs[D_CLIENTE])+" ," cSql+=" data="+any2sql(aOs[D_DATA])+" ," cSql+=" hora="+any2sql(aOs[D_HORA])+" ," cSql+=" contato="+any2sql(aOs[D_CONTATO])+" ," cSql+=" status="+any2sql(aOs[D_STATUS])+" " cSql+=" WHERE pedido ='"+ALLTRIM(aOs[D_PEDIDO])+"'" sqlexecute(cSql) if SQLErrorNO() > 0 fMensagem() return(.f.) endif SQLExecute("commit") SQLRollBack() SQLEndTrans() SQLRefresh() Obrigado Luiz Fernando Quote Link to comment Share on other sites More sharing options...
Geraldo (gbsilva) Posted October 7, 2015 Report Share Posted October 7, 2015 Luiz você consegue acessar um outro banco fazendo assim, não sei mas acho que talvez possa ser a solução. Voce conecta no banco1, por exemplo e usando (banco.tabela) você pode trabalhar em qualquer outro banco do seu mysql. SELECT a.campo1, a.campo2, b.campo3 FROM banco1.tabela a INNER JOIN banco2.tabela b ON a.registro = b.registro ; Sds, Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted October 8, 2015 Author Report Share Posted October 8, 2015 Luiz você consegue acessar um outro banco fazendo assim, não sei mas acho que talvez possa ser a solução. Voce conecta no banco1, por exemplo e usando (banco.tabela) você pode trabalhar em qualquer outro banco do seu mysql. SELECT a.campo1, a.campo2, b.campo3 FROM banco1.tabela a INNER JOIN banco2.tabela b ON a.registro = b.registro ; Sds, Geraldo obrigado pela resposta, o problema que os dois banco de dados fica em locais diferente, um esta numa rede local, e o outro esta armazenado num provedor na net. Obrigado Quote Link to comment Share on other sites More sharing options...
CIACPD Posted October 8, 2015 Report Share Posted October 8, 2015 SqlLib_Conn( AllTrim(Lower(nServidor)),Val(nPorta),Lower(AllTrim(nDatabase)),Lower(AllTrim(nUsuario)),Lower(AllTrim(nSenha)),SQL_NO_WARNING,"MySql")if SQL_Errorno() > 0 alerta3(,'Não foi possivel estabelecer',' a Conexão...') return .f.else alerta1(,'Conexão estabelecida com sucesso...') // no inicio só precisa incluir a linha abaixo nConn1:= SQLGetConnection() return .t. endif quando for atualizar a outra base, conecta, salva o que tem a salvar e mata ela Quote Link to comment Share on other sites More sharing options...
Luiz Fernando Posted October 9, 2015 Author Report Share Posted October 9, 2015 SqlLib_Conn( AllTrim(Lower(nServidor)),Val(nPorta),Lower(AllTrim(nDatabase)),Lower(AllTrim(nUsuario)),Lower(AllTrim(nSenha)),SQL_NO_WARNING,"MySql") if SQL_Errorno() > 0 alerta3(,'Não foi possivel estabelecer',' a Conexão...') return .f. else alerta1(,'Conexão estabelecida com sucesso...') // no inicio só precisa incluir a linha abaixo nConn1:= SQLGetConnection() return .t. endif quando for atualizar a outra base, conecta, salva o que tem a salvar e mata ela Blz irei fazer desta forma, pois é só nesta situação mesmo, sobre o comando nConn1:= SQLGetConnection() como só uso um banco de dados nem preciso usar ele né, pq aqui nunca usei. Obrigado 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.