william Posted September 21, 2011 Report Share Posted September 21, 2011 Boa tarde, usando sqlrdd com mysql , tem como copiar uma tabela de um BD para outro, como o comando abaixo ? CREATE TABLE nova_tabela SELECT * FROM tabela_original onde a "nova_tabela" esta no BD "banco2" e a "tabela_original" esta no BD "banco1" sei que com SQLRDD tem que abrir duas conexoes , uma para cada BD, até aà tudo bem, mas como executar o comando acima ? algum exemplo de como fazer ? Obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
william Posted September 21, 2011 Author Report Share Posted September 21, 2011 Boa tarde, usando sqlrdd com mysql , tem como copiar uma tabela de um BD para outro, como o comando abaixo ? CREATE TABLE nova_tabela SELECT * FROM tabela_original onde a "nova_tabela" esta no BD "banco2" e a "tabela_original" esta no BD "banco1" sei que com SQLRDD tem que abrir duas conexoes , uma para cada BD, até aà tudo bem, mas como executar o comando acima ? algum exemplo de como fazer ? Obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
emotta Posted September 21, 2011 Report Share Posted September 21, 2011 cSelect := "CREATE TABLE nova_tabela SELECT * FROM tabela_original" SR_GetConnection():exec( cSelect ) citação:Boa tarde, usando sqlrdd com mysql , tem como copiar uma tabela de um BD para outro, como o comando abaixo ? CREATE TABLE nova_tabela SELECT * FROM tabela_original onde a "nova_tabela" esta no BD "banco2" e a "tabela_original" esta no BD "banco1" sei que com SQLRDD tem que abrir duas conexoes , uma para cada BD, até aà tudo bem, mas como executar o comando acima ? algum exemplo de como fazer ? Obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Quote Link to comment Share on other sites More sharing options...
william Posted September 21, 2011 Author Report Share Posted September 21, 2011 Eduardo , obrigado pela resposta mas nao funciona. Da forma que vc fez duplica a tabela no MESMO BD. Eu quero que duplique a tabela em BD diferente. William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
emotta Posted September 21, 2011 Report Share Posted September 21, 2011 No caso descubra como fazer isso pelo Query Analyzer (ou equivalente se nao for SQL SERVER). Com a Query testada é só fazer forma como eu expliquei acima. Agora, se pelo Query Analyzer voce não conseguir então não sei outra forma senão jogar pra DBF e depois exportar para o novo banco. abraço, citação:Eduardo , obrigado pela resposta mas nao funciona. Da forma que vc fez duplica a tabela no MESMO BD. Eu quero que duplique a tabela em BD diferente. William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Quote Link to comment Share on other sites More sharing options...
emotta Posted September 21, 2011 Report Share Posted September 21, 2011 Willian, segundo a documentacao do comando COPY TO voce poderá passar o ID de conexão do banco. Então por COPY TO teoricamente é possivel, agora é fazer o teste. Veja a documentacao do comando: COPY TO Exports records from the current work area to a database or an ASCII text file. Syntax COPY TO ; [FIELDS ;] [ ; ] [WHILE ;] [FOR ;] [VIA ] [sDF | DELIMITED [WITH BLANK | TAB | PIPE | ] ] [codePAGE ] ; [CONNECTION ]] Arguments TO This is the name of the target file as a literal character string or a character expression enclosed in parentheses. When the file name is specified without a file extension, .dbf is assumed as default extension, unless the SDF or DELIMITED option is specified. In this case, the default file extension is .txt. FIELDS The names of the fields to export to the external file can be specified as a comma separated list of literal field names or character expressions enclosed in parentheses. When this option is omitted, all fields of the source file are exported. This option defines the number of records to export. It defaults to ALL. The NEXT scope exports the next records, while the RECORD scope exports only one record having the record number . WHILE This is a logical expression indicating to continue exporting records while the condition is true. The COPY TO operation stops as soon as yields .F. (false). FOR This is a logical expression which is evaluated for all records in the current work area. Those records where yields .T. (true) are exported. VIA The VIA option specifies the replaceable database driver (RDD) to use for opening the target file. is a character expression. If it is written as a literal name, it must be enclosed in quotes. When no RDD is specified, the RDD active in the current work area is used to open the external file. If the VIA clause is used, the specified RDD must be linked to the application. Use the REQUEST command to force an RRD be linked. SDF The SDF option specifies the target file as an ASCII file in System Data Format. See file format description below. DELIMITED The DELIMETED option specifies the target file as a delimited ASCII file where field values are separated with a comma and Character values are enclosed with a delimiting character. The default delimiter for Character values is a double quotation mark. DELIMITED WITH BLANK | TAB | PIPE When the delimiter is specified as BLANK, field values in the new created ASCII text file are separated by one space and character fields are not enclosed in delimiters. Alternatively, the delimiting character between field values can be specified as TAB (Chr(9)) or PIPE (Chr(124)). DELIMITED WITH The WITH option specifies the delimiting character to enclose values of Character fields in. can be specified as a literal character or a character expression enclosed in parentheses. can also be specified as an array with two elements: { , }. If this option is used, the array must be enclosed in parentheses. It defines the delimiting characters for field values of type "C" and the delimiters between field values. Important: If the DELIMITED WITH option is used in the COPY TO command, it must be placed as the last option in the command. CODEPAGE This is a character string specifying the code page to use for character strings stored in the new database. It defaults to the return value of HB_SetCodePage(). CONNECTION This option 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 xHarbour Builder SQLRDD. When CONNECTION is used, the COPY TO command copies data to a database on the server. Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Quote Link to comment Share on other sites More sharing options...
william Posted September 21, 2011 Author Report Share Posted September 21, 2011 Eduardo , estou querendo utilizar o comando nativo justamente para aumentar a velocidade da copia. Eu tenho 1 BD local e outro BD em 1 servidor web Eu quero duplicar o meu banco de dados local no BD da web. Se nao achar como fazer nativamente, vou tentar o copy to pra ver se atende... Obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
emotta Posted September 21, 2011 Report Share Posted September 21, 2011 Eu estava achando que era no mesmo banco porem databases diferente. O que voce pode fazer é em cada tabela fazer um DBUSEAREA passando SELECT * na tabela. Com isso é criado a tabela "VIRTUALMENTE" e ai faça um while e vai dando o comando INSERT usando o metodo EXEC do objeto de conexão do seu banco. Acho que é o melhor de performance que pode conseguir. Seria mais ou menos assim: DbUseArea(.t.,"SQLRDD","SELECT CODIGO, DESCRICAO FROM CLIENTES","CLITRB",.F.,.T.) While CLITRB->(!EOF()) oSqlWeb:Exec("INSERT ... ... ... ...") DbSkip() EndDo Tente isso. abraço, citação:Eduardo , estou querendo utilizar o comando nativo justamente para aumentar a velocidade da copia. Eu tenho 1 BD local e outro BD em 1 servidor web Eu quero duplicar o meu banco de dados local no BD da web. Se nao achar como fazer nativamente, vou tentar o copy to pra ver se atende... Obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Quote Link to comment Share on other sites More sharing options...
william Posted September 21, 2011 Author Report Share Posted September 21, 2011 While CLITRB->(!EOF()) oSqlWeb:Exec("INSERT ... ... ... ...") DbSkip() EndDo id=code>id=code>rs... assim eu já faço (LENTO).... eu quero fazer com 1 comando nativo (RAPIDÃO) abraço William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
emotta Posted September 21, 2011 Report Share Posted September 21, 2011 Willian, voce faz como eu passei ou faz um while na tabela aberta sem SELECT e vai dando APPEND BLANK, REPLACE, SKIP, ETC??? De qualquer forma terá trafego de rede. A lentidão é devido ao trafego e não devido a rdd propriamente dita. A quantidade de bytes que vai de um lado pra outro é a mesma. Da forma passada abaixo voce terá apenas 1 requisição no bando de dados original porem o INSERT tem que ser um a um, nao vejo outra maneira. Se voce fizer um WHILE na tabela normal, sem fazer o SELECT, voce terá uma requisição a cada SKIP no banco original. Como são bancos separados o processo é como se voce fizer um backup no banco original e restaurar no banco destino. O trafego voce nao conseguirá diminuir e consequentemente a performance. abraço, citação: While CLITRB->(!EOF()) oSqlWeb:Exec("INSERT ... ... ... ...") DbSkip() EndDo id=code>id=code>rs... assim eu já faço (LENTO).... eu quero fazer com 1 comando nativo (RAPIDÃO) abraço William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Editado por - emotta on 21/09/2011 19:32:40 Quote Link to comment Share on other sites More sharing options...
elitenet Posted September 21, 2011 Report Share Posted September 21, 2011 O que você esta querendo fazer é espelhar seu banco em outro na web. Existem programas proprios para isso na internet, de uma procurada que é melhor que você fazer isso no sistema. Por exemplo, o SQL server tem essa ferramenta nativa, qualquer atualizacao no banco atual e atualizado no outro. Procure na web por banco de dados distribuidos que você vai achar programas gratis que fazem isso para você no MySql. Muriaé-MG FWH 2.6/XHARBOUR/C/C++/JAVA/DELPHI/MYSQL/FIREBIRD Quote Link to comment Share on other sites More sharing options...
william Posted September 21, 2011 Author Report Share Posted September 21, 2011 Eduardo, o que vc diz faz sentido. Vou fazer alguns testes com 1 tabela que tenha 100.000 registros . Vou fazer do jeito que vc menciona e tb utilizando o comando CREATE TABLE nova_tabela SELECT * FROM tabela_original tudo no mesmo BD e verificarei a velocidade das duas formas. Assim que terminar os testes posto o resultado obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
william Posted September 21, 2011 Author Report Share Posted September 21, 2011 citação:O que você esta querendo fazer é espelhar seu banco em outro na web.Existem programas proprios para isso na internet, de uma procurada que é melhor que você fazer isso no sistema. Por exemplo, o SQL server tem essa ferramenta nativa, qualquer atualizacao no banco atual e atualizado no outro. Procure na web por banco de dados distribuidos que você vai achar programas gratis que fazem isso para você no MySql. id=quote>id=quote>Obrigado pela sugestão, é uma saÃda.... William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted September 21, 2011 Report Share Posted September 21, 2011 SQLExecute("CREATE TABLE `bd1`.`tabela` LIKE `bd0`.`tabela`") SQLExecute("INSERT INTO `bd1`.`tabela` SELECT * FROM `bd0`.`tabela`")id=code>id=code>Conectado aos dois Bancos. "Me interessa o futuro porque é o lugar onde vou passar o resto da minha vida." Quote Link to comment Share on other sites More sharing options...
william Posted September 21, 2011 Author Report Share Posted September 21, 2011 citação:SQLExecute("DROP TABLE `bd1`.`tabela`")SQLExecute("CREATE TABLE `bd1`.`tabela` LIKE `bd0`.`tabela`")SQLExecute("INSERT INTO `bd1`.`tabela` SELECT * FROM `bd0`.`tabela`") id=quote>id=quote>Olá Sr. S.A.Oliveira, esse comando sqlexecute é para SQLRDD ? Mas vendo como vc montou o comando SQL, está me dando uma luz.... vou testar... Obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted September 22, 2011 Report Share Posted September 22, 2011 Na realidade testei no Front, depois depois no meu sistema. Comando nativo seria: CREATE TABLE `bd1`.`tabela` LIKE `bd0`.`tabela`; INSERT INTO `bd1`.`tabela` SELECT * FROM `bd0`.`tabela`id=code>id=code>Onde: bd1 = destino, bd0 = origem. Uso a SqlLib. "Me interessa o futuro porque é o lugar onde vou passar o resto da minha vida." Editado por - S.A.Oliveira on 22/09/2011 07:32:26 Quote Link to comment Share on other sites More sharing options...
emotta Posted September 22, 2011 Report Share Posted September 22, 2011 Willian esse SQLEXECUTE acho que não é do SQLRDD mas execute da forma como postei anteriormente: SR_GetConnection():exec( cSelect ) E no cSelect coloque a Query que deseja. abraço, citação:Na realidade testei no Front, depois depois no meu sistema. Comando nativo seria: CREATE TABLE `bd1`.`tabela` LIKE `bd0`.`tabela`; INSERT INTO `bd1`.`tabela` SELECT * FROM `bd0`.`tabela`id=code>id=code>Onde: bd1 = destino, bd0 = origem. Uso a SqlLib. "Me interessa o futuro porque é o lugar onde vou passar o resto da minha vida." Editado por - S.A.Oliveira on 22/09/2011 07:32:26 id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Quote Link to comment Share on other sites More sharing options...
william Posted September 22, 2011 Author Report Share Posted September 22, 2011 ok amigo, vou testar obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Quote Link to comment Share on other sites More sharing options...
emotta Posted September 22, 2011 Report Share Posted September 22, 2011 Mas como voce quer em servidores diferentes uma simples query nao vai funcionar. Funcionaria se fosse no mesmo servidor, porem database diferente. A melhor forma é como foi indicado acima, com ferramentas próprias para espelhamento. Abraço, citação:ok amigo, vou testar obrigado William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Quote Link to comment Share on other sites More sharing options...
SAOliveira Posted September 22, 2011 Report Share Posted September 22, 2011 Da forma como testei, utilizei o BD0 local(meu note), e 0 BD1 no meu servidor linux. "Me interessa o futuro porque é o lugar onde vou passar o resto da minha vida." Quote Link to comment Share on other sites More sharing options...
emotta Posted September 22, 2011 Report Share Posted September 22, 2011 Muito bacana, mas então onde voce define onde fica o BD1 e o BD0? É SQL SERVER? citação:Da forma como testei, utilizei o BD0 local(meu note), e 0 BD1 no meu servidor linux. "Me interessa o futuro porque é o lugar onde vou passar o resto da minha vida." id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Editado por - emotta on 22/09/2011 10:51:58 Quote Link to comment Share on other sites More sharing options...
william Posted September 22, 2011 Author Report Share Posted September 22, 2011 olá Eduardo, creio que os BD's ja estao declarados no proprio comando sql CREATE TABLE `bd1`.`tabela` LIKE `bd2`.`tabela`; veja: bd1.'tabela' usa a tabela no banco de dados 1 bd2.'tabela' usa a tabela no banco de dados 2 William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Editado por - william on 22/09/2011 11:26:14 Quote Link to comment Share on other sites More sharing options...
emotta Posted September 22, 2011 Report Share Posted September 22, 2011 Então Willian, eu ja vi isso funcionando em SQL SERVER mas com os bancos no mesmo servidor, sendo somente database diferente. Agora o banco A em um servidor e o banco B em outro eu nunca vi. Só se tem como criar um DATABASE e "apontar" para outro servidor. Será isso então? citação:olá Eduardo, creio que os BD's ja estao declarados no proprio comando sql CREATE TABLE `bd1`.`tabela` LIKE `bd2`.`tabela`; veja: bd1.'tabela' usa a tabela no banco de dados 1 bd2.'tabela' usa a tabela no banco de dados 2 William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." Editado por - william on 22/09/2011 11:26:14 id=quote>id=quote>Eduardo Motta emotta@gmail.com.br FWH 9.09 (original) - xHARBOUR 1.2.1 (comercial e original) - SQLRDD Quote Link to comment Share on other sites More sharing options...
elitenet Posted September 23, 2011 Report Share Posted September 23, 2011 Eu creio que isso que vocês estão tentando fazer não vai funcionar corretamente. No Sql-Server tem uma ferramenta especifica para isso e mesmo assim de vez em quando ela para dependendo das oscilações da net. Se for banco local na mesma rede da certo, mas um na rede e outro na net vai dar dor de cabeça. Eu ja fiz isso e foi um deus nos acuda. Fui para soluções prontas de replicação e não esquentei mais cabeça com isso. Muriaé-MG FWH 2.6/XHARBOUR/C/C++/JAVA/DELPHI/MYSQL/FIREBIRD Quote Link to comment Share on other sites More sharing options...
william Posted September 23, 2011 Author Report Share Posted September 23, 2011 citação:Eu creio que isso que vocês estão tentando fazer não vai funcionar corretamente. No Sql-Server tem uma ferramenta especifica para isso e mesmo assim de vez em quando ela para dependendo das oscilações da net. Se for banco local na mesma rede da certo, mas um na rede e outro na net vai dar dor de cabeça. Eu ja fiz isso e foi um deus nos acuda. Fui para soluções prontas de replicação e não esquentei mais cabeça com isso. id=quote>id=quote>Funciona sim amigo, eu já faço com dois bancos , para o SQLRDD um banco mysql local ou remoto é a mesma coisa. O meu sistema já atualiza um banco remoto na web , só que usando DO WHILE... Agora o que eu quero saber é como gerar o comando CREATE TABLE nova_tabela SELECT * FROM tabela_original usando a SQLRDD. Deve existir uma forma, só não tive tempo disponÃvel para pesquizar. Pode não ser a melhor maneira de se replicar a tabela, conforme vc diz, mas eu como programador quero saber como fazer isso. William "Eu creio, que de algum modo, que seje relativo em demasia a subjetiva constitucional perante tecnicamente aos que assim ditam o descritivo em si, no parágrafo subconsequente do subconciente doutrinários." 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.