Jump to content
Fivewin Brasil

2 Conexões em uma mesma query ( MySql/SqlRdd )


Scooby

Recommended Posts

Boa Tarde Senhores

Gostaria de perguntar se alguém já passou por essa situação.

Atualmente estou com um banco de dados na Nuvem ( Google Cloud - MySql ) e um banco de dados Local ( MySql 5.7 ). Eu consigo via conexões separadas efetuar consultas em ambos os bancos. Porém estou passando pela seguinte situação, eu vou precisar efetuar um CRUD nas tabela do Servidor Nuvem.

É ai que está o problema, estou utilizando a SqlRdd e para diferenciar as conexões eu utilizo assim:

conexao:=sr_addconnection()  // e guarda o número da conexão
Sr_getconnection(conexao)     // retorna o objeto da conexão pra executar queries
Faço isso para ambas conexões.

Porém eu gostaria de executar esse comando ou um join qualquer:

         INSERT INTO banco.tabela-destino (campo1, campo2, campo3...)
         SELECT campo1,campo2,campo3... FROM banco.tabela-origem;      

Ai é que eu não estou conseguindo, alguém já passou por esse problema?

Agradeço antecipadamente
 

Márcio Pinheiro

Link to comment
Share on other sites

 

Boa Tarde Senhores

Gostaria de perguntar se alguém já passou por essa situação.

Atualmente estou com um banco de dados na Nuvem ( Google Cloud - MySql ) e um banco de dados Local ( MySql 5.7 ). Eu consigo via conexões separadas efetuar consultas em ambos os bancos. Porém estou passando pela seguinte situação, eu vou precisar efetuar um CRUD nas tabela do Servidor Nuvem.

É ai que está o problema, estou utilizando a SqlRdd e para diferenciar as conexões eu utilizo assim:

conexao:=sr_addconnection()  // e guarda o número da conexão
Sr_getconnection(conexao)     // retorna o objeto da conexão pra executar queries
Faço isso para ambas conexões.

Porém eu gostaria de executar esse comando ou um join qualquer:

         INSERT INTO banco.tabela-destino (campo1, campo2, campo3...)
         SELECT campo1,campo2,campo3... FROM banco.tabela-origem;      

Ai é que eu não estou conseguindo, alguém já passou por esse problema?

Agradeço antecipadamente
 

Márcio Pinheiro

Cheguei a tentar algo uma época atras mas era de SQLSERVER para SQLSERVER. Eu não consegui, sinceramente não lembro o motivo, então desculpa a informação inutil...
Mas só estou comentando aqui pq acredito que não consegui pq não era possivel (como não lembro não vou te dar certeza se é possivel ou não)

Mas se eu fosse você, em um primeiro momento recomendo esquecer sistema. O MYSQL tem algum equivalente ao query analizer do SQL SERVER? Se tiver foque em conseguir um script que funcione e você conseguindo pelo "query analizer" aí vc parte para o SQLRDD que aí é só usar o métido EXECUTE

Abraços

 

 

 

 

Link to comment
Share on other sites

Olá boa noite! pode ser feito n conexões com mesmo banco web ou local ou bancos diferentes.

Veja o exemplo da própria SQLRDD,  a função SR_SetActiveConnection( nCnn1 )  é a responsável por ativar a conexão desejada, a partir dela pode ser feito o CRUD via cmd sql ou via função do xHarbour DBAPPEND()

#include "sqlrdd.ch"

? nCnn1 := SR_AddConnection( CONNECT_MYSQL, cConnString1 )     // 1
? nCnn2 := SR_AddConnection( CONNECT_FIREBIRD, cConnString2 )  // 2
? SR_GetActiveConnection()                                     // 2
? SR_SetActiveConnection( nCnn1 )                              // 2 (valor anterior)
? SR_GetActiveConnection()                                     // 1
? SR_SetActiveConnection( 3 )                                  // -1 (conexão inválida)
 
Caso estiver com uma conexão ativa e deseja abrir uma tabela em outra conexão, poderá também setar a conexão desejada na prápria função DBuSEArea(), veja help

Syntax

( [<lNewArea>]  , ;
           [<cRddName>]  , ;
           <cDatabase>   , ;
           [<cAlias>]    , ;
           [<lShared>]   , ;
           [<lReadonly>] , ;
           [<cCodePage>] , ;
           [<nConnection>] ) --> NIL

Arguments

<cCodePage>
This is a character string specifying the code page to use for character strings stored in the database. It defaults to the return value of HB_SetCodePage().
<nConnection>
This parameter specifies a numeric server connection handle. It is returned by a server connection function which establishes a connection to a database server, such as SR_AddConnection() of the
 
Sugiro verificar a documentação da SQLRDD, para uso de demais funções que trabalha com parâmetro nCon opcional, mas no caso de mais de uma conexão o ideal seria utilizar este parâmetro.
 
Caso necessite pode me contactar via email saa50@bol.com.br, que terei o prazer em ajudá-lo.
abraços
Link to comment
Share on other sites

Bom Dia Senhores

 

fhw : Na verdade eu estou precisando mesmo é com comandos MySql, mas obrigado pela intenção.


Emotta: pois é, eu também estou procurando em vários lugares e ainda não achei algo compatível ao desejado, sim dei uma olhada em várias ferramentas que criam links entre os bancos, porém nenhuma que funcione de mysql para mysql gratuita, ainda vou continuar procurando.

Jmsilva, Pois é, eu vi o funcionamento da função  SR_SetActiveConnection , porém ela define que no momento que eu executo o "oSlq:Exc", eu já tenha setado em qual banco/conexão aquela query será montada e executava. É dai que vem o meu problema, como são bancos MySql ( Local e Nuvem ), eu tenho que abrir os 2 schemas e efeutar ambas conexões e excutar um único comando ( Join ) que possa ligar essas duas conexões diferentes... se fosse a opção um ou outro estaria tranquilo, o problema é que eu estou levando os dados que estão local para nuvem, então a melhor forma seria evitar interação com loop ou abertura de tabelas para replicação e afins.
Fazendo isso com somente 1 comando Sql economizar tempo de execução além de deixar o código mais fácil de manutenção.
Para ter mais ou menos ideia de como seria, seria assim:

Veja o exemplo da própria SQLRDD,  a função SR_SetActiveConnection( nCnn1 )  é a responsável por ativar a conexão desejada, a partir dela pode ser feito o CRUD via cmd sql ou via função do xHarbour DBAPPEND()

#include "sqlrdd.ch"

nCnn1 := SR_AddConnection( CONNECT_MYSQL, cConnString1 )  // 1 Local
nCnn2 := SR_AddConnection( CONNECT_MYSQL, cConnString2 )  // 2 Nuvem
SR_SetActiveConnection( nCnn1 ) 
SR_SetActiveConnection( nCnn2 )                              

nConn  := SR_GetActiveConnection()
oSQL   := SR_GetConnection( nCnn2 )
nErr   := oSql:exec( 'INSERT INTO nCnn1.Banco1.TabelaXX(Campo1, Campo2, Campo3 ...) 
SELECT Campo1, Campo2, Campo3 ... FROM nCnn2 .Banco2.TabelaXX
Where Condicional',.t.,.t.)

 

Link to comment
Share on other sites

Outra linguagem não vai adiantar, pq a situação que vc precisa é uma query que resolva isso. Se vc conseguir uma query vc vai conseguir em SQLRDD e tb em outras linguagens, mas se não conseguir uma Query vc não vai conseguir em NENHUMA linguagem, pelo menos não da forma que deseja.

Em outras linguagens o q vc vai cosneguir é o mesmo que o SQLRDD já permite, que são criar duas conexões e gravar de uma pra outra, fazendo um While ou FOR em array e jogando as informações uma a uma para o outro banco de dados.

Então meu conselho é: Ou foque em conseguir uma query que faça isso e depois coloque dentro do aplicativo que está desenvolvendo ou parta pra fazer um FOR/WHILE criando duas conexões.

Abraços

 

 

Link to comment
Share on other sites

 

Outra linguagem não vai adiantar, pq a situação que vc precisa é uma query que resolva isso. Se vc conseguir uma query vc vai conseguir em SQLRDD e tb em outras linguagens, mas se não conseguir uma Query vc não vai conseguir em NENHUMA linguagem, pelo menos não da forma que deseja.

Em outras linguagens o q vc vai cosneguir é o mesmo que o SQLRDD já permite, que são criar duas conexões e gravar de uma pra outra, fazendo um While ou FOR em array e jogando as informações uma a uma para o outro banco de dados.

Então meu conselho é: Ou foque em conseguir uma query que faça isso e depois coloque dentro do aplicativo que está desenvolvendo ou parta pra fazer um FOR/WHILE criando duas conexões.

Abraços

 

 

Boa Tarde Emotta

Eu fiz diversos testes e não consegui nenhum retorno positivo, olhei com outros programadores de outras linguagens e a solução também foi a mesma, gravação de registro ou através de abertura de arquivo ou via vetor ( multiplos insert ).
Entrei em contato com o Rafael Culik também e ele me reportou agora que não é possível efetuar join como conexão externa, somente as que estão dentro da mesma conexão e de diferentes schemas.
Então agora é gravar dessa maneira.

Agradeço a compreensão e ajuda de todos

 

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...