Jump to content
Fivewin Brasil

SQLRDD


macs

Recommended Posts

Olá Jorge, eu já estou logado ao banco de dados com database padrão, test no caso do MySql. Mas gostaria de poder criar o banco de dados direto pelo sistema. Para isso eu precisaria primeiro saber se ele existe. Ok, eu posso tentar logar ao banco utilizando o database que eu quero criar, caso dê erro, eu crio. Mas um comando que me retorne o resultado em um array é extremamente importante. E já que não tem na Lib o comando pra checar ou criar o database, acho que deve ter pelo ao menos um que me retorne o resultado de um comando sql em um array, e é este que também estou precisando.

Link to comment
Share on other sites

Encontrei isso para retornar informação pra um array.

   LOCAL nErr    := 0
   LOCAL aReturn := {}
   LOCAL aDados  := {}

   WITH OBJECT SR_GetConnection()

      nErr := :oSql:execute( cComm )

      :oSql:iniFields(.f.)

      sr_showVector( :oSql:aFields )

      WHILE ( :oSql:Fetch( @aReturn ) == SQL_SUCCESS )

         aAdd( aDados, aReturn[1] )

      ENDDO

   END
 

RETURN aDados

Link to comment
Share on other sites

 

Olá Jorge, eu já estou logado ao banco de dados com database padrão, test no caso do MySql. Mas gostaria de poder criar o banco de dados direto pelo sistema. Para isso eu precisaria primeiro saber se ele existe. Ok, eu posso tentar logar ao banco utilizando o database que eu quero criar, caso dê erro, eu crio. Mas um comando que me retorne o resultado em um array é extremamente importante. E já que não tem na Lib o comando pra checar ou criar o database, acho que deve ter pelo ao menos um que me retorne o resultado de um comando sql em um array, e é este que também estou precisando.

Desculpe, na ânsia de te ajudar, não li atentamente seu post.  No caso o Sputnik te deu o caminho das pedras, se vc já tem o nome do BD, basta verificar se ele existe ao conectar e pode criar programa.

Ser caso as tabelas estiverem em DBF, pode fazer a criação do BD e a importação direta via programa, são rotinas simples.

 

[]s,

Link to comment
Share on other sites

Existe sim e é bem simples.

// para checar se tablela existe
cTable := "CLIENTES"
If Sr_File(cFile)
   // tabela existe
Else
   // table anão existe
EndIf


// para listar todas as tabelas criadas no SQL
aTables := SR_ListCreatedTables() 
For nI := 1 to Len(aTables)
   cTable := aTables[nI]
   MsgStop(cTable)
Next

 

Link to comment
Share on other sites

Li errado.... entendi que fosse tabela.. em todo caso fica ai para auxiliar alguem se precisar

Pra verificar se existe o database eu desconheço, infelizmente, pelo SQLRDD acredito que não da pois ele precisa do database na conexão mas vou olhar no help e qualquer coisa posto aqui se encontrar

 

Link to comment
Share on other sites

Faço assim 

 

******************************************************************************
FUNCTION CONECTAR(cConnTipo,cConnBase,cConnName,cConnPass,cConnUsrs,nConx,cCPorta)
******************************************************************************
  
  LOCAL cConString1 := ''

   cConString1    := "MySQL=" + lower(ALLTRIM(cConnName)) + ";" + ;
                   "UID="   + lower(ALLTRIM(cConnUsrs)) + ";" + ;
                        "pwd="   + lower(ALLTRIM(cConnPass)) + ";" + ;
                        "dtb="   + alltrim(LOWER(cConnBase))       + ;
                        ";PRT="  + alltrim(cCPorta)
   
   nConx         := SR_AddConnection( CONNECT_MYSQL, cConString1 )
   
   IF nConx < 0
   
      cConString1 := "MySQL=" + lower(ALLTRIM(cConnName)) + ";" + ;
                       "UID="   + lower(ALLTRIM(cConnUsrs)) + ";" + ;
                            "pwd="   + lower(ALLTRIM(cConnPass)) + ";" + ; 
                            "dtb=mysql"                                + ;
                            ";PRT="  + alltrim(cCPorta)
         
       nConx := SR_AddConnection( CONNECT_MYSQL, cConString1 )
       
       IF nConx < 0
       
           MsgInfo("Erro de Conexão. Veja o Arquivo Sqlerror.log para mais Detalhes.", "Atenção, Erro")
           RETURN (.F.)
           
       ELSE
       
           oSql := SR_GetConnection() 
           
           MsgRun("Criando o Database...","Aguarde...",{|| oSql:exec("CREATE DATABASE "+alltrim(LOWER(cConnBase))) })
           
            MsgWait( "Novo DataBase Criado "+alltrim(LOWER(cConnBase)), "OK",2 )
            
            SR_EndConnection( nConx )  
            
           cConString1 := "MySQL=" + lower(ALLTRIM(cConnName)) + ";" + ;
                           "UID="   + lower(ALLTRIM(cConnUsrs)) + ";" + ;
                                "pwd="   + lower(ALLTRIM(cConnPass)) + ";" + ;
                                "dtb="   + alltrim(LOWER(cConnBase))       + ;
                                ";PRT="  + alltrim(cCPorta)
           
           nConx := SR_AddConnection( CONNECT_MYSQL, cConString1 )
           
        ENDIF                    
      
   ENDIF    
    
              
RETURN NIL
 

Link to comment
Share on other sites

Olá Márcio,

ao contrário das informações do colega acima e do suporte técnico que recebeu no outro grupo, com SQLRDD:

  • é possível conectar no server sem informar o banco de dados.
  • e principalmente, obter o array com os nomes dos bancos de dados (SHOW DATABASES)
  • obs: Não use Sr_File() para checar se uma tabela existe, há uma função mais adequada.

Por favor, consulte a documentação do SQLRDD

Não sou usuário do SQLRDD, mas baixei agora a versão demo, criei e executei um teste com sucesso.


Sugestão geral: Sempre adicione informações básicas, neste caso: Tipo do banco de dados e versão (ex: MySQL/6.0.3), etc

[],
Eric
www.idlagam.com

 

Olá Pessoal,

Gostaria de saber se o SqlRdd possui algum comando para verificar se existe um Database Ex: Sr_DatabaseExist() ?

Ou qual comando que eu possa executar para retornar um array? Ex: oSql:Exec( "SHOW DATABASES" )

Desde já agradeço!

 

 

Li errado.... entendi que fosse tabela.. em todo caso fica ai para auxiliar alguem se precisar

Pra verificar se existe o database eu desconheço, infelizmente, pelo SQLRDD acredito que não da pois ele precisa do database na conexão mas vou olhar no help e qualquer coisa posto aqui se encontrar

 

Link to comment
Share on other sites

 

Olá Márcio,

ao contrário das informações do colega acima e do suporte técnico que recebeu no outro grupo, com SQLRDD:

  • é possível conectar no server sem informar o banco de dados.
  • e principalmente, obter o array com os nomes dos bancos de dados (SHOW DATABASES)
  • obs: Não use Sr_File() para checar se uma tabela existe, há uma função mais adequada.

Por favor, consulte a documentação do SQLRDD

Não sou usuário do SQLRDD, mas baixei agora a versão demo, criei e executei um teste com sucesso.


Sugestão geral: Sempre adicione informações básicas, neste caso: Tipo do banco de dados e versão (ex: MySQL/6.0.3), etc

[],
Eric
www.idlagam.com

 

Pessoal, me perdoem a manifestação, mas acho que esta foi a melhor resposta que obtivemos sobre o assunto, não nego que as vezes respondo bobagens, mas, jamais responder desta forma, parece resposta de suporte de grandes empresas, onde as respostas são: Vc leu o manual? Vc desligou e esperou alguns segundos antes de religar o equipamento e etc...

Sinto muito amigo, mas esta  não ajudou em nada, na minha maneira de pensar é o famoso "SE VIRA", "LEIA O MANUAL" e etc..., pense vc tendo uma resposta desta aqui no grupo.

Por favor, consulte a documentação do SQLRDD

Não sou usuário do SQLRDD, mas baixei agora a versão demo, criei e executei um teste com sucesso.

Seja mais acessível, poste aqui a sua solução para o amigo Macs e talvez os demais possa usufruir do seu conhecimento.

 

[]s,

 

Link to comment
Share on other sites

Realmente é possivel conectar sem database. Fiz um exemplo para retornar os DATABASES em SQL SERVER. Para outros bancos basta mudar o SELECT na funcao RETDATABASES

Se você já tiver conectado basta usar a funcao RETDATABASES caso ainda não esteja conectando use a funcao TESTSQL para adaptar ao seu caso.

Espero que ajude a quem precisa, como não tenho outros banco de dados (fora SQL SERVER) não pude testar mas está bem fácil para adpatar.

#include "sqlrdd.ch"

Function TestSql()
Local cDNS
Local nConn
Local cUserSQL := "sa"
Local cPassSQL := "SENHA_SQL"
Local cDriver  := "SQL Server Native Client 10.0"
Local cServerDB := "SERVIDORSQL"
Local nConAnt   := SR_GetActiveConnection()
Local aDataBases

fErase("sqlerror.log")
cDNS := "uid="+cUserSQL+";pwd="+Alltrim(cPassSQL)+";Driver="+cDriver+";UseProcForPrepare=Yes;Trusted_Connection=No;AnsiNPW=Yes;server="+cServerDB+";"
msgstop(cDNS)
nConn := SR_AddConnection( CONNECT_ODBC, cDNS )
If nConn>0   
   MsgStop("sucesso")
   SR_SetActiveConnection( nConn )
   
   aDataBases := RetDataBases()

   MsgStop(Sr_ShowVector( aDataBases))

   
   SR_EndConnection(nConn)
   
   SR_SetActiveConnection( nConAnt )
Else
   cErro := MemoRead("sqlerror.log")
   MsgStop(cErro)
EndIf

Return


// funcao que retorna os DATABASES do SQL SERVER
Function RetDataBases()
Local aSql := {}
Local cSelect := "select name,database_id from sys.databases"

Sr_GetConnection():Exec(cSelect,,.t.,@aSql)

Return aSql

 

Link to comment
Share on other sites

 

Realmente é possivel conectar sem database. Fiz um exemplo para retornar os DATABASES em SQL SERVER. Para outros bancos basta mudar o SELECT na funcao RETDATABASES

Se você já tiver conectado basta usar a funcao RETDATABASES caso ainda não esteja conectando use a funcao TESTSQL para adaptar ao seu caso.

Espero que ajude a quem precisa, como não tenho outros banco de dados (fora SQL SERVER) não pude testar mas está bem fácil para adpatar.


#include "sqlrdd.ch"

Function TestSql()
Local cDNS
Local nConn
Local cUserSQL := "sa"
Local cPassSQL := "SENHA_SQL"
Local cDriver  := "SQL Server Native Client 10.0"
Local cServerDB := "SERVIDORSQL"
Local nConAnt   := SR_GetActiveConnection()
Local aDataBases

fErase("sqlerror.log")
cDNS := "uid="+cUserSQL+";pwd="+Alltrim(cPassSQL)+";Driver="+cDriver+";UseProcForPrepare=Yes;Trusted_Connection=No;AnsiNPW=Yes;server="+cServerDB+";"
msgstop(cDNS)
nConn := SR_AddConnection( CONNECT_ODBC, cDNS )
If nConn>0   
   MsgStop("sucesso")
   SR_SetActiveConnection( nConn )
   
   aDataBases := RetDataBases()

   MsgStop(Sr_ShowVector( aDataBases))

   
   SR_EndConnection(nConn)
   
   SR_SetActiveConnection( nConAnt )
Else
   cErro := MemoRead("sqlerror.log")
   MsgStop(cErro)
EndIf

Return


// funcao que retorna os DATABASES do SQL SERVER
Function RetDataBases()
Local aSql := {}
Local cSelect := "select name,database_id from sys.databases"

Sr_GetConnection():Exec(cSelect,,.t.,@aSql)

Return aSql

Parabéns, isso sim é resposta. A famosa frase: Mata a cobra e mostra o porrete. A comunidade agradece.

[]s,

 

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