macs Posted January 30, 2019 Report Share Posted January 30, 2019 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! Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted January 30, 2019 Report Share Posted January 30, 2019 Amigo, na lib eu não sei se tem, mas vc pode fazer "select * from pg_database;", mas pra isso, vc deve logar o server e um bd qqr de seu conhecimento ou então, usar o psql -U <usuario> e senha e depois listar os bds pelo comando /l. Espero ter ajudado Quote Link to comment Share on other sites More sharing options...
macs Posted January 31, 2019 Author Report Share Posted January 31, 2019 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. Quote Link to comment Share on other sites More sharing options...
macs Posted January 31, 2019 Author Report Share Posted January 31, 2019 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 Quote Link to comment Share on other sites More sharing options...
macs Posted January 31, 2019 Author Report Share Posted January 31, 2019 Erro SR_MYSQL/0 - Fim de Tempo para Bloqueio Alguém sabe porque dá este erro? Quote Link to comment Share on other sites More sharing options...
kapiaba Posted January 31, 2019 Report Share Posted January 31, 2019 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted January 31, 2019 Report Share Posted January 31, 2019 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, Quote Link to comment Share on other sites More sharing options...
emotta Posted January 31, 2019 Report Share Posted January 31, 2019 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 Quote Link to comment Share on other sites More sharing options...
emotta Posted January 31, 2019 Report Share Posted January 31, 2019 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 Quote Link to comment Share on other sites More sharing options...
joaosolution Posted February 1, 2019 Report Share Posted February 1, 2019 Bom dia Esse comando lista os bancos de dados. SELECT name, database_id, create_date FROM sys.databases ; Att João Bosco Quote Link to comment Share on other sites More sharing options...
coutinho.amauri Posted February 1, 2019 Report Share Posted February 1, 2019 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 Quote Link to comment Share on other sites More sharing options...
macs Posted February 1, 2019 Author Report Share Posted February 1, 2019 Valeu... agradeço pela dica! Quote Link to comment Share on other sites More sharing options...
Eric.Developer Posted February 3, 2019 Report Share Posted February 3, 2019 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 [], Ericwww.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 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted February 3, 2019 Report Share Posted February 3, 2019 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 [], Ericwww.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, Quote Link to comment Share on other sites More sharing options...
emotta Posted February 4, 2019 Report Share Posted February 4, 2019 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 Quote Link to comment Share on other sites More sharing options...
Jorge Andrade Posted February 4, 2019 Report Share Posted February 4, 2019 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, kapiaba 1 Quote Link to comment Share on other sites More sharing options...
macs Posted February 4, 2019 Author Report Share Posted February 4, 2019 Valeu pessoal, obrigado pela ajuda! kapiaba 1 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.