Retornar a Conexão do banco de Dados

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

Retornar a Conexão do banco de Dados

Mensagem por paulovirt »

Amigos...

Pensei na possibilidade do firewall. A princípio desativei para testar mas ficou na mesma. Esse banco local do Mysql está funcionando normalmente para conexões via PHP e via ODBC pelo ASP, em ambiente web.
A impressão mesmo é que algo está bloqueando o acesso... #-)
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Retornar a Conexão do banco de Dados

Mensagem por Vlademiro »

Amigo, vc disse que testou o firewall e disse que por ODBC acessa normalmente, mas o site está na mesma máquina do servidor de banco de dados ?

Se a resposta for sim, então vc tem que fazer o teste acessando de outra máquina para testar se o servidor de banco de dados está disponível. Use algum cliente de SQL conhecido como o HeidiSQL.


Vou dar outro chute : Pode ser também que a sua aplicação tenha sido compilada em 32 bits e o driver ODBC é de 64 bits.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar a Conexão do banco de Dados

Mensagem por JoséQuintas »

Tem essa meleca também: O Windows 64 bits se comporta como 2 Windows diferentes, 32 e 64 bits.
Nem sempre o que instala pra um fica disponível para o outro.
Até por isso tem duas pastas "arquivos de programas", pasta "system32" pra 64 bits e "syswow64" pra 32 bits (é isso mesmo, parece invertido), etc.
A Microsoft sempre gostou de complicar.
É o jeito dela bloquear, sem dizer que bloqueou.
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Avatar do usuário
Vlademiro
Usuário Nível 4
Usuário Nível 4
Mensagens: 752
Registrado em: 11 Jul 2005 02:46

Retornar a Conexão do banco de Dados

Mensagem por Vlademiro »

Outra coisa, seria interessante vc testar o acesso nativo do harbour aos banco de dados, assim vc não fica dependendo de outras libs. O Harbour possui classes que possibilitam acesso nativo ao PostgreSQL e ao MySQL.

Dê uma olhada nos exemplos que tem no contrib nas pastas hbpgsql e hbmysql. Lá tá muito bem detalhado. E a unica coisa que vc irá precisar para distribuir a sua aplicação são as dlls na mesma pasta do sistema, assim vc não precisa configurar ODBC ou se certificar de que a máquina cliente terá os drivers de ODBC instalados. O ODBC, na minha opinião, tem esse ponto negativo. O ponto positivo do ODBC é vc poder acessar a vários banco de dados sem mudanças significativas no seu código.

Eu, como não tenho planos de usar outro banco além do MySQL e o PostgreSQL acesso nativamente mesmo, isso até me possibilita migrar para LINUX ou, quem sabe, no futuro criar aplicações para Android. No ODBC vc fica meio preso ao windows além de ter que configurar as estações manualmente.

Caso vc se interesse, as dlls que vc irá precisar são (32 bits caso sua app seja 32 bits) :

MySQL -> libmysql.dll

PostgreSQL -> intl.dll, libeay32.dll e libpq.dll

Se vc se interessar tem mais documentação aqui :
https://www.youtube.com/user/hmglights
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

Retornar a Conexão do banco de Dados

Mensagem por paulovirt »

Amigos Vlademiro e José

Minha aplicação é 32 bits. Vlademiro, eu tenho essa DLL e fiz alguns testes. Carreguei-a e tentei alguns comandos, mas por conta própria, já que não tinha documentação sobre ela.
Mas ontem encontrei uns materiais aqui no meu PC sobre ODBC. Aventurei e eis que EURECA! Funcionou perfeitamente!

Compilei, usando apenas as libs mysql.lib e odbc.lib, mais nada. O código simples segue abaixo, caso alguém precise ou tenha interesse. Desde já agradeço a vocês. :))

Código: Selecionar todos

Function main()

#include "mysql.ch"
#include 'adodb.ch'


                CNN:=CreateObject("ADODB.Connection")
                CNN:Open("DRIVER={MySQL ODBC 3.51 Driver};" + ;
                            "server=localhost" + ;
                            ";database=nome_do_banco_de_dados" + ;
                            ";uid=nome_do_usuario" + ;
                            ";pwd=senha_do_banco")

** EXEMPLO DE USO COM O COMANDO INSERT

CNOME:="Fulano de Tal"
CEMAIL:="fulano@detal.com"

         oCursor := CreateObject("ADODB.Recordset")
         cSql := "insert into nome_da_tabela(nome_usuario,email_usuario) VALUES ('"+CNOME+"','"+CEMAIL+""')"
         CNN:Execute(cSQL)


*** EXEMPLO DE USO COM O COMANDO SELECT

       	  oCursor:=CreateObject("ADODB.Recordset")
       	  oCursor:Open("select * from nome_da_tabela where nome_usuario='"+cnome+"'",CNN,2,3)
       	  if oCursor:Eof()
          	 Return
          endif
	   	  cnomeX        := oCursor:Fields['email_usuario']:value


************************

@ 10,01 say cnomeX
INKEY(0)


Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

Retornar a Conexão do banco de Dados

Mensagem por paulovirt »

Código: Selecionar todos

Function main()

#include "mysql.ch"
#include 'adodb.ch'

                CNN:=CreateObject("ADODB.Connection")
                CNN:Open("DRIVER={MySQL ODBC 3.51 Driver};" + ;
                            "server=localhost" + ;
                            ";database=nome_do_banco_de_dados" + ;
                            ";uid=nome_do_usuario" + ;
                            ";pwd=senha_do_banco")

*** EXEMPLO DE USO COM O COMANDO SELECT

            oCursor:=CreateObject("ADODB.Recordset")
            oCursor:Open("select * from nome_da_tabela where nome_usuario='"+cnome+"'",CNN,2,3)
            if oCursor:Eof()
              Return
          endif
           cnomeX        := oCursor:Fields['email_usuario']:value

dbedit(????)
Amigos

Em um exemplo como este, é possível utilizar o DBEDIT para listar os dados da tabela??
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Retornar a Conexão do banco de Dados

Mensagem por asimoes »

Direto no Dbedit, não.

Você vai ter que criar uma tabela temporária (dbf)
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

Retornar a Conexão do banco de Dados

Mensagem por paulovirt »

Hum, imaginei asimoes

E como eu poderia usar algo, do tipo COPY TO, para criar a tabela temporária?

Caso não fosse usar o Dbedit, o que poderia usar no lugar?
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Retornar a Conexão do banco de Dados

Mensagem por asimoes »

Exemplo de tabela temporária:

Código: Selecionar todos

      aStru:={}
      aAdd(aStru, {"C1", "C", 57, 0})
      aAdd(aStru, {"C2", "C", 57, 0})
      aAdd(aStru, {"C3", "C", 57, 0})
      DbCreate("mem:etiquetas", aStru, "DBFCDX", .T., "etiquetas")
No final, eliminar a tabela:

DbDrop("mem:etiquetas")

Antes:

Tem que linkar : hbmemio.hbc

E fazer o request

REQUEST HB_MEMIO
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
asimoes
Colaborador
Colaborador
Mensagens: 4919
Registrado em: 26 Abr 2007 16:48
Localização: RIO DE JANEIRO-RJ

Retornar a Conexão do banco de Dados

Mensagem por asimoes »

Se não for usar dbf, pode usar Achoice, depende muito da quantidade de registros que vai retornar da consulta.
►Harbour 3.x | Minigui xx-x | HwGui◄
Pense nas possibilidades abstraia as dificuldades.
Não corrigir nossas falhas é o mesmo que cometer novos erros.
A imaginação é mais importante que o conhecimento. (Albert Einstein)
Avatar do usuário
paulovirt
Usuário Nível 2
Usuário Nível 2
Mensagens: 69
Registrado em: 29 Jan 2007 10:00
Contato:

Retornar a Conexão do banco de Dados

Mensagem por paulovirt »

Olá

Criei um metodozinho aqui que deu certo. Não é o ideal, mas no momento poderá atender minha necessidade de migração para o Mysql. No futuro (a media que o tempo me permitir) converterei esse sistema para PHP. Mas pra manter a funcionalidade e ir fazendo aos poucos, vou primeiro jogar no Mysql. Segue abaixo o que fiz:

Código: Selecionar todos

oCursor:=CreateObject("ADODB.Recordset")
ocursor:Open("select * from usuarios",CNN,2,3)

Private astru
astru:= {{"email", "C", 30, 0},{"nome", "C", 30, 0}}
dbcreate("temp.dbf", astru)

use temp

 DO WHILE .NOT. ocursor:Eof()

append blank
replace email with ocursor:Fields( "EMAIL_USUARIO" ):Value
replace nome with ocursor:Fields( "NOME_USUARIO" ):Value
ocursor:MoveNext()
ENDDO
close data

ocursor:Close()

Obrigado pela força! :))
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

Retornar a Conexão do banco de Dados

Mensagem por JoséQuintas »

Depende como configurou a conexão.

Código: Selecionar todos

LOCAL oRs, aStru

oRs := cnn:Execute( "select * from usuarios" )

aStru := { ;
   { "email", "C", 30, 0 }, ;
   { "nome", "C", 30, 0 } }

dbcreate( "temp", astru )

USE temp
DO WHILE .NOT. oRs:Eof()
   APPEND BLANK
   REPLACE ;
      email WITH oRs:Fields( "EMAIL_USUARIO" ):Value, ;
      nome WITH oRs:Fields( "NOME_USUARIO" ):Value
   oRs:MoveNext()
ENDDO
USE

oRs:Close()
José M. C. Quintas
Harbour 3.2, mingw, gtwvg mt, fivewin 25.04, multithread, dbfcdx, MySQL, ADOClass, PDFClass, SefazClass, (hwgui mt), (hmg3), (hmg extended), (oohg), PNotepad, ASP, stored procedure, stored function, Linux (Flagship/harbour 3.2)
"The world is full of kings and queens, who blind our eyes and steal our dreams Its Heaven and Hell"

https://github.com/JoseQuintas/
Responder