Página 1 de 1
Conexão MYSQL
Enviado: 29 Jan 2018 09:07
por paulovirt
Caros amigos
Estou em processo de migração, do bom e velho DBF para o Mysql, no meu sistema xharbour.
Já consegui estabelecer a conexão com sucesso e executar as principais tarefas (listar, incluir, editar, excluir, etc...), porém estou esbarrando em algo bem simples: testar se o Mysql está em execução.
Minha conexão acontece dessa forma:
Código: Selecionar todos
#include 'adodb.ch'
public conexao
** MODELO DE CONEXAO LOCAL
oConexao:=CreateObject("ADODB.Connection")
oConexao:open("DRIVER={MySQL ODBC 3.51 Driver};" + ;
"server=localhost" + ;
";database=BANCO_DE_DADOS" + ;
";uid=root" + ;
";pwd=")
oCursor:=CreateObject("ADODB.Recordset")
Conto com a ajuda
Grato!
Paulo
Conexão MYSQL
Enviado: 29 Jan 2018 11:41
por JoséQuintas
Não entendi.
Se abriu a conexão, está tudo ok.
Também não entendi pra que o ADODB.Recordset.
Conexão MYSQL
Enviado: 29 Jan 2018 14:56
por paulovirt
Sim, a conexão está funcionando perfeitamente. Mas gostaria de fazer um tratamento de erro, caso por algum momento o servidor de dados esteja fora. Eu costumo fazer isso quando uso PHP, mas no xharbour não consegui.
Conexão MYSQL
Enviado: 29 Jan 2018 19:01
por Claudio Soto
No utilizo MySQL pero tal vez pueda ser de ayuda:
http://www.vbforums.com/showthread.php? ... pen-closed
Conexão MYSQL
Enviado: 29 Jan 2018 21:59
por JoséQuintas
A intenção é trocar a mensagem de erro do mysql por uma mensagem de erro pessoal.... sei lá... parece perda de tempo.
Mas tratamento de erro no Harbour é BEGIN SEQUENCE/RECOVER/ENDSEQUENCE.
Não sei porque o pessoal costuma usar esse ODBC 3.51.
Ele é problemático, dá erros em comandos que não acontecem com as versões mais novas.
Conexão MYSQL
Enviado: 30 Jan 2018 21:49
por paulovirt
Caro José
Eu uso esse ODBC porque o mais moderno 5.1.8 não funcionou de forma alguma, então usei esta, 3.51.
Essa forma de conexão, usando o adodb.recordset foi a que consegui no xharbour. Se tiver alguma outra mais interessante e puder postar por aqui eu agradeço.
Sobre a mensagem de erro, eu gostaria porque costumo usar quando programo com PHP ou ASP. Como meus clientes usam meu sistema (no momento ainda no bom e velho DBF) ficaria mais fácil entender se por algum motivo o servidor está fora, considerando inclusive a possibilidade de conectar via web.
Em PHP, faço dessa forma:
Código: Selecionar todos
// CONEXAO LOCAL
$conexao = mysql_connect("localhost","root","");
if (!$conexao)
header("Location: erro.htm");
// CONEXAO AO BANCO DE DADOS
$banco = mysql_select_db("banco_de_dados",$conexao);
if (!$banco)
// DIRECIONA A UMA PAGINA HTML DE ERRO
header("Location: erro.htm");
...e em ASP, faço assim:
Código: Selecionar todos
' MODELO DE CONEXAO COM MYSQL LOCALHOST
set conexao=Server.createObject("ADODB.connection")
conexao.Open = "Driver=MySQL ODBC 5.1 Driver; DATABASE=banco_de_dados; SERVER=localhost; UID=root; PASSWORD=;"
set RS = Server.CreateObject("ADODB.Recordset")
RS.open "SELECT * FROM tabela",conexao
RS.close
set RS = nothing
' DIRECIONA PAGINA DE ERRO, CASO NAO OCORRA A CONEXAO
if Err.number <> 0 then
response.Redirect("erroserver.htm")
response.end()
end if
%>
Grato!
Paulo
Conexão MYSQL
Enviado: 30 Jan 2018 23:47
por Claudio Soto
Por lo que aparece en la página sería algo así como:
if oConexao == "NIL o 0

" .or.
oConexao:State != adStateOpen
// error apertura
endif
Conexão MYSQL
Enviado: 31 Jan 2018 00:33
por JoséQuintas
Não sei porque o MySQL fez a cagada de usar software Microsoft para os ODBCs mais novos.
Se não me engano, o ODBC 5.1 exige run-time do MSVC 2010, e o ODBC 5.3 exige run-time do MSVC 2013.
https://github.com/JoseQuintas/JoseQuin ... oclass.prg
Código: Selecionar todos
FUNCTION MySqlConnection( cServer, cDatabase, cUser, cPassword, nPort, nVersion )
LOCAL cnConnection
hb_Default( @nPort, 3306 )
hb_Default( @nVersion, AppODBCMySql() )
cnConnection:= win_OleCreateObject( "ADODB.Connection" )
cnConnection:ConnectionString := "Driver={MySQL ODBC " + iif( nVersion == 3, "3.51", "5.3 ANSI" ) + " Driver};Server=" + cServer + ";" + "Port=" + Ltrim( Str( nPort ) ) + ;
";Stmt=;Database=" + cDatabase + ";User=" + cUser + ";Password=" + cPassword + ";Collation=latin1;" + ;
"AUTO_RECONNECT=1;COMPRESSED_PROTO=0;PAD_SPACE=1" // usando compactação impede certas checagens // Option=131072;
cnConnection:CursorLocation := AD_USE_CLIENT
cnConnection:CommandTimeOut := 600 // seconds
cnConnection:ConnectionTimeOut := 600 // seconds
RETURN cnConnection