Jump to content
Fivewin Brasil

SQLRDD - Copiar tabela para DB diferente ???


william

Recommended Posts

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."

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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

AJbJ

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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

AJbJ

Link to comment
Share on other sites

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

AJbJ

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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

AJbJ

Link to comment
Share on other sites


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."

Link to comment
Share on other sites

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

AJbJ

Editado por - emotta on 21/09/2011 19:32:40

Link to comment
Share on other sites

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.

274082_100000139180259_6365851_q.jpg

Muriaé-MG

FWH 2.6/XHARBOUR/C/C++/JAVA/DELPHI/MYSQL/FIREBIRD

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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."

Link to comment
Share on other sites

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.

logofw.png

"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

Link to comment
Share on other sites

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.

logofw.png

"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

AJbJ

Link to comment
Share on other sites

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

AJbJ

Link to comment
Share on other sites

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.

logofw.png

"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

AJbJ

Editado por - emotta on 22/09/2011 10:51:58

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

AJbJ

Link to comment
Share on other sites

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.

274082_100000139180259_6365851_q.jpg

Muriaé-MG

FWH 2.6/XHARBOUR/C/C++/JAVA/DELPHI/MYSQL/FIREBIRD

Link to comment
Share on other sites

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."

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...