Clipper On Line • Ver Tópico - Conexão MYSQL
Página 1 de 1

Conexão MYSQL

MensagemEnviado: 29 Jan 2018 08: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:

#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

MensagemEnviado: 29 Jan 2018 10: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

MensagemEnviado: 29 Jan 2018 13: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

MensagemEnviado: 29 Jan 2018 18: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

MensagemEnviado: 29 Jan 2018 20: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

MensagemEnviado: 30 Jan 2018 20: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:

// 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:

' 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

MensagemEnviado: 30 Jan 2018 22:47
por Claudio Soto
Claudio Soto escreveu:No utilizo MySQL pero tal vez pueda ser de ayuda:

http://www.vbforums.com/showthread.php? ... pen-closed


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

MensagemEnviado: 30 Jan 2018 23: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/JoseQuintas/blob/master/source/ze_adoclass.prg

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