Página 2 de 3

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 01:27
por alxsts
Olá!
cjp escreveu:De fato, o que vc diz faz sentido: eu devo ter acrescido alguma coisa para usar o SQLMIX no Harbour velho, e precisarei fazer o mesmo neste novo. O único problema é que eu não lembro o que foi. Vou tentar achar.
Deves ter feito alguma coisa errada...

Adaptei um exemplo postado pelo Itamar no tópico MYSQL SQLMIX, conectando e criando base e tabela via SQL. Compilei com meu Harbour 3.20 Nightly e funcionou normalmente, usando MariaDB 10:
Capturar.JPG
Informe a versão deste Harbour que você acabou de instalar.

Verifique seu código. Creio que o problma esteja nele e não no Harbour.

Código: Selecionar todos

// Compilar: hbmk2 teste sddodbc.hbc

#require "rddsql"
#require "sddodbc"

#include "dbinfo.ch"
#include "simpleio.ch"
REQUEST SQLMIX, SDDODBC

PROCEDURE Main()

   LOCAL nConnection, nI, aI

   #if defined( __HBSCRIPT__HBSHELL )
      rddRegister( "SQLBASE" )
      rddRegister( "SQLMIX" )
   #endif

   SetMode( 43,80 )
   CLS

   Set( _SET_DATEFORMAT, "yyyy-mm-dd" )

   rddSetDefault( "SQLMIX" )
   nConnection := rddInfo( RDDI_CONNECT, { "ODBC", "DRIVER={MariaDB ODBC 3.1 Driver};TCPIP=1;SERVER=localhost;Database=test;UID=root;PWD=root;PORT=3306" } )
                                                
   IF nConnection == 0
      ? "Could not connect to server", rddInfo( RDDI_ERRORNO ), rddInfo( RDDI_ERROR )
      RETURN
   ENDIF
   // nConnection
   RddInfo( RDDI_EXECUTE, "CREATE DATABASE IF NOT EXISTS `basedados`" )
   RddInfo( RDDI_EXECUTE, "USE `basedados`" )
   RddInfo( RDDI_EXECUTE, "DROP TABLE country" )
   RddInfo( RDDI_EXECUTE, "CREATE TABLE country (CODE char(3), NAME char(50), RESIDENTS int(11))" )
   RddInfo( RDDI_EXECUTE, "INSERT INTO country values ('LTU', 'Lithuania', 3369600), " + ;
                                                     "('USA', 'United States of America', 305397000), " + ;
                                                     "('POR', 'Portugal', 10617600), " + ;
                                                     "('POL', 'Poland', 38115967), " + ;
                                                     "('AUS', 'Australia', 21446187), " + ;
                                                     "('BRA', 'Brazil', 205000000), " + ;
                                                     "('FRA', 'France', 64473140), " + ;
                                                     "('RUS', 'Russia', 141900000)" )

   dbUseArea( .T., , "SELECT * FROM country ORDER BY name", "country" )
   
   DispOutAt( 09, 30, Version() )
   Browse(10, 20, 22, 60)

   dbCloseAll()

   RETURN

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 01:30
por alxsts
Olá!

Complementando:
faça um teste com o código acima. Altere apenas a string de conexão, colocando a que você usa para conectar ao teu BD. Compile com o teu Harbour novo e informe se funcionou.

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 08:28
por JoséQuintas
alxsts escreveu:Deves ter feito alguma coisa errada...
O SQLMIX, como o próprio nome diz, é um mix.
Pelo jeito, nessa opção de ODBC dispensa bibliotecas adicionais.

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 10:15
por cjp
Realmente eu devo estar fazendo algo errado.
Primeiro, notei a falta do arquivo sddodbc.hbc na pasta do novo Harbour. Copiei o arquivo da pasta do velho para o novo, mas mesmo assim o meu sistema não funcionou.
Daí compilei o teu exemplo no novo Harbour, e funcionou.
Então, fica evidente que tem algum erro no meu sistema. O problema é que, no velho Harbour, ele funciona, mas no novo não!
A versão que apareceu ao executar o teu exemplo foi a Harbour 3.2.0dev (r2104281802).

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 10:52
por JoséQuintas
cjp escreveu:Daí compilei o teu exemplo no novo Harbour, e funcionou.
SQLMIX é uma mistura de tudo, sendo que talvez existam 3 formas de usar MySQL.
Talvez nos seus fontes esteja usando uma forma diferente.
Tem também o detalhe da string ODBC.
Se sua string usa MySQL, mas essa usa MariaDB, com certeza cada rotina precisa de um ODBC diferente instalado.
Comece conferindo a string de conexão que está usando.

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 13:06
por cjp
Acho que a string está igual. Veja:

Código: Selecionar todos

            ODBC_MARIADB=Mariadb_StringConexao() 
			
                    nConnection := RDDINFO( 1001, { "ODBC", "Server=;" + ODBC_MARIADB + ";dsn=;User=;pwd=;database=inaciocarvalho;" } )

FUNCTION Mariadb_StringConexao()
         LOCAL cTxt := ""
            cTxt += "Driver={MariaDB ODBC 3.1 Driver}"
		 
RETURN cTxt
  

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 13:38
por Itamar M. Lins Jr.
Olá!

32 é diferente de 64.
Precisa instalar o(s) pacote(s) para 64. MariaDb e/ou MySQL.

Saudações,
Itamar M. Lins Jr.

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 13:44
por alxsts
Olá!

Cuidado: você postou as credenciais de logon no teu provedor de BD. Qualquer um pode entrar lá e sabotar o teu BD...

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 17:24
por JoséQuintas
Aqui eu tenho um fonte só pras senhas.
Fiz isso justamente porque de vez em quando postava com informações, ou, por engano, alterava pra postar e salvava, perdendo as informações.
Com fonte separado, mesmo que poste os outros fontes completos, as senhas não vão estar lá.

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 20:31
por cjp
De fato eu vacilei em publicar senha aqui, foi esquecimento. Obrigado.
32 é diferente de 64.
Precisa instalar o(s) pacote(s) para 64. MariaDb e/ou MySQL.
Poderia me indicar qual o pacote mais indicado para instalar?

Por curiosidade, como vc verificou que eu não tenho o pacote para 64? No código que eu postei não vi nada que indicasse.

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 20:34
por JoséQuintas
cjp escreveu:Poderia me indicar qual o pacote mais indicado para instalar?
Por curiosidade, como vc verificou que eu não tenho o pacote para 64? No código que eu postei não vi nada que indicasse.
Na prática depende do aplicativo em Harbour.
Se o aplicativo é 32 bits, precisa do ODBC 32 bits, não importa se o Windows for 64 bits.

Se compilou o teste do mesmo jeito que compilou o aplicativo, o que precisa já está instalado, porque significa que os dois são 32 bits, ou os dois são 64 bits.

Instalação e configuração do Harbour - Win64

Enviado: 02 Jun 2021 20:41
por JoséQuintas
Pra forçar 32 bits: SET HB_COMPILER=mingw ou bcc ou msvc
Pra forçar 64 bits: SET HB_COMPILER=mingw64 ou bcc64 ou msvc64

Só vai compilar se existirem compilador e LIBs compatíveis, senão, vai dar erro no que não tiver instalado.
Opcionalmente o parâmetro -comp: hbmk2 xxx.hbp -comp=mingw

Só mexa nisso se precisar tirar alguma dúvida, e volte à forma de sempre depois.

Instalação e configuração do Harbour - Win64

Enviado: 03 Jun 2021 07:32
por Itamar M. Lins Jr.
Olá!
No código que eu postei não vi nada que indicasse.
Pq funciona com o antigo. Não poderia funcionar caso fosse 64.

E aqui é "titulo do post" configuração para 64.

Saudações,
Itamar M. Lins Jr.

Instalação e configuração do Harbour - Win64

Enviado: 03 Jun 2021 08:22
por JoséQuintas
Pensando bem.... Vamos recapitular.

Compila normalmente, não dá erro, apenas não faz o browse.

Lembro de algum comentário sobre bug no SQLMIX de ter que posicionar registro.
Coloque teste sobre LastRec(), Eof(), pra tentar descobrir qual é a situação do resultado.
Se for o caso, coloque um GOTO TOP, pra ver se tem a ver com o tal bug.

Vai ter que ser por exclusão:
Acho que se a string estivesse errada, haveria mensagem de erro.
Acho que se faltasse alguma coisa, também haveria mensagem de erro.
Sobra verificar qual é o resultado do comando, ou se está posicionado em fim de arquivo.

Lembrando que há pouco tempo tive aquela diferença, que em determinada situação o retorno era diferente do normal.
De repente, aí aconteceu parecido ao fazer o teste do retorno.

Instalação e configuração do Harbour - Win64

Enviado: 03 Jun 2021 08:43
por Itamar M. Lins Jr.
Olá!
Não penso que seja esse o problema. Simplesmente funciona com antigo e a diferença é a extração da lib.
A SQLMIX(RDDSQL) extrai da DLL a LIB. Precisa saber se é 32 ou 64.
O Bug ocorre nas funções lastrec() e reccount() não é atualizado o numerador, fui eu que achei e postei no forum de usuários o problema.
Precisa ir para o final alias->(DbGoBottom()) para atualizar o contador antes de um [t]browse qualquer.

Saudações,
Itamar M. Lins Jr.