erro em compilação

Projeto HwGui - Biblioteca visual para Harbour/xHarbour

Moderador: Moderadores

cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro em compilação

Mensagem por cjp »

Desculpe, mas não te entendi.
Postei o código acima. Tem algo errado nele?
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

cjp escreveu:Desculpe, mas não te entendi.
Postei o código acima. Tem algo errado nele?
Assim fica difícil.

Vai do seu jeito tradicional:

O fonte que postou funciona ?
Então copia pro outro que também vai funcionar.
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/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro em compilação

Mensagem por cjp »

Mas não foi isso que eu fiz? Eu copiei do Harbour, que funciona. Mas no HwGui não está funcionando, e não entendo o porquê.
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

cjp escreveu:Mas não foi isso que eu fiz? Eu copiei do Harbour, que funciona. Mas no HwGui não está funcionando, e não entendo o porquê.
Provavelmente porque faltou copiar a criação da variável, que é o que estou mencionando desde o começo, sobre o conteúdo da variável.

Faltou ? não faltou ? Como é que alguém pode saber ? Só você mesmo aí olhando o seu fonte.

Fonte esse sendo compilado dentro da pasta do harbour, correndo o risco de estragar a ferramenta de trabalho, e nada mais funcionar depois.
Isso deu pra ver.
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/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro em compilação

Mensagem por cjp »

No meu fonte no Harbour também não tem inicialização da variável, só o que postei mesmo.
Deveria ter? Creio que sim. Mas como funciona no Harbour sem e não funciona na HwGui sem?
Como devo inicializar esta variável?
Inacio de Carvalho Neto
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

erro em compilação

Mensagem por ivanil »

cjp escreveu:No meu fonte no Harbour também não tem inicialização da variável, só o que postei mesmo.
Deveria ter? Creio que sim. Mas como funciona no Harbour sem e não funciona na HwGui sem?
Como devo inicializar esta variável?
Ola Inacio,

No meu ponto de vista, você precisa dar um passo para trás para entender o conceito,

O hwgui é uma biblioteca gráfica, não tem nada a ver com acesso a dados, a própria hwgui so funciona com a associação de harbour/xharbour, você poderia simplesmente mandar imprimir a variável que o Quintas mencionou a qual pode ter dado erro na abertura do bd e retornado nil por "n" fatores , enfim realmente não ha como entender o que se passa no seu código.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

ivanil escreveu: enfim realmente não ha como entender o que se passa no seu código.
Entender o problema é fácil, entender o Inácio que é difícil.

Tem um fonte que cria conexão
Tem um fonte que usa conexão

Ele copiou o fonte que usa conexão pra testar na hwgui.

No harbour funciona, na hwgui não.
alguma dúvida porque não funciona ?

Considerando um lado "justificável", talvez tenha faltado PUBLIC, e não o fonte inteiro.

Se testar hwgui começa assim, sei não.... melhor entender primeiro o que usa, antes de partir para o que não usa.

Por outro lado.... aproveite que vai reescrever fontes, pra entender melhor como as coisas funcionam.
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/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro em compilação

Mensagem por cjp »

No meu ponto de vista, você precisa dar um passo para trás para entender o conceito,

O hwgui é uma biblioteca gráfica, não tem nada a ver com acesso a dados, a própria hwgui so funciona com a associação de harbour/xharbour, você poderia simplesmente mandar imprimir a variável que o Quintas mencionou a qual pode ter dado erro na abertura do bd e retornado nil por "n" fatores , enfim realmente não ha como entender o que se passa no seu código.
Esta parte eu entendi. E por isso não estou entendendo o que está acontecendo, pois o fonte do Hwgui está exatamente igual ao do Harbour, sendo que neste funciona, naquele não.


Entender o problema é fácil, entender o Inácio que é difícil.

Tem um fonte que cria conexão
Tem um fonte que usa conexão

Ele copiou o fonte que usa conexão pra testar na hwgui.

No harbour funciona, na hwgui não.
alguma dúvida porque não funciona ?

Considerando um lado "justificável", talvez tenha faltado PUBLIC, e não o fonte inteiro.

Se testar hwgui começa assim, sei não.... melhor entender primeiro o que usa, antes de partir para o que não usa.

Por outro lado.... aproveite que vai reescrever fontes, pra entender melhor como as coisas funcionam.
Imagino que para vc que é muito bom nisso seja fácil pra entender o problema, pra mim não está fácil. Sim, tenho dúvida do porquê não funciona.

Só para deixar claro, não estou misturando os fontes. Fiz um fonte de teste apenas para o hwgui, copiando essa parte da conexão do fonte anterior, do Harbour.

Pra deixar claro, vou postar ele inteiro aqui:

Código: Selecionar todos

#include "hwgui.ch"
Function Main
   Local oDlg, oFont, oFontSay, oFontC
   Local nRecs :=0
   Local nTp :=0, oSAY1, oSAY2
   private nInicio :=0

   public conexaoado

   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
   PREPARE FONT oFontSay NAME "MS Sans Serif" WIDTH 0 HEIGHT -13 WEIGHT 700
   PREPARE FONT oFontC NAME "Georgia" WIDTH 0 HEIGHT -15

   INIT DIALOG oDlg TITLE "Teste de SQL" AT 100, 100 SIZE 340, 300 FONT oFont

   exqado("insert into ativ(data,hora,acao,detalhes) values('2023-08-03','"+time()+"','Testesql34','Testesql34:automático')",3)
   
   @ 20,12 SAY oSAY1 CAPTION "Escolha:" SIZE 260, 24 ;
         FONT oFontSay COLOR 8404992 

   @ 20,50 BUTTON "Cadastra teste manualmente" SIZE 180,28 ;
      ON CLICK {||cadastrateste()}

   IF ++nRecs == 100
      hwg_processmessage() ; nRecs := 0
   EndIf

   @ 20,150 SAY oSAY2 CAPTION str(nTp) SIZE 180, 28
   
   @ 20, 250 LINE LENGTH 300
   @ 120,258 BUTTON "Close" SIZE 100,30 ON CLICK {||oDlg:Close()}

   ACTIVATE DIALOG oDlg
  
Return Nil
      
function cadastrateste
         Local oDlg, oFont, oSAY1
         
         PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
					
         INIT DIALOG oDlg TITLE "Cadastra manualmente" AT 280, 210 SIZE 250, 250 FONT oFont
		 
		 exqado("insert into ativ(data,hora,acao,detalhes) values('2023-03-08','"+time()+"','Testesql34','Testesql34:manual')",3)
       
         @ 10,40 SAY oSAY1 CAPTION "Teste cadastrado" SIZE 360, 36
       
         @  10,190  BUTTON "Ok" SIZE 100, 32 ON CLICK {||oDlg:Close()}
       
         ACTIVATE DIALOG oDlg

return Nil     

function exqado(cQuery,nServidor)
		 local sair :="N"
		 local exq
		 private cUsuar, cSenha
		 private nVzexq :=0
		 private cMessage :=""

		 
		 // --------------------------------------conexão----------------------------------
         if empty(nServidor) .or. nServidor=NIL
            nServidor=3
		 endif

		 do while .t.
			nVzexq++
			
			if nVzexq>2
			   return .f.
			endif

			if nVzexq>1
			   Vez=0
			   cSair="N"
		       do while cSair#"S"
                  bError := ErrorBlock( {|e| Break(e) } )
                  begin sequence
                        conexaoado=ConexaoMySQL(nServidor)
                        conexaoado:open()
						cSair="S"
                  recover using e
	                      Vez++
			              if Vez>3
			                 ?"Não abriu a conexão; tente novamente mais tarde"
					         inkey(1)
				             cSair="E"
			              else
					         loop
					      endif
                  endsequence
                  ErrorBlock( bError )
			
	              if cSair="E"
	                 return .f.
	              endif
			   enddo
	  
			endif
			
		          // -------------------------------------------executando a query--------------------------------------
				  exq=conexaoado:execute(cQuery)
			   exit
	     enddo
		 
		 
		                //------------------encerrando a conexão------------------------
		 if nVzexq>1
		    conexaoado:Close()
		 endif
return .t.


FUNCTION Mariadb_StringConexao()
         LOCAL cTxt := ""

		 if nVzexq<5
            cTxt += "Driver={MariaDB ODBC 3.1 Driver}"
	     ELSE
            cTxt += "Driver={MySQL ODBC 3.51 Driver}"
         ENDIF
RETURN cTxt
  
FUNCTION ConexaoMySQL(nProvedor)
         LOCAL oCn := win_OleCreateObject("ADODB.Connection")
         Local cServer :="mysql.xxx.com.br"
		 Local cDatabase :="xxx"
		 Local cUser :="xxx"
		 Local cPassword :="xxx"
		 
         oCn:ConnectionString := "DRIVER={MariaDB ODBC 3.1 Driver};TCPIP=1;SERVER=" + ;
          cServer + ";Database=" + cDatabase + ";UID=" + cUser + ";PWD=" + cPassword + ";PORT=3306"
		  
         oCn:CursorLocation   := 3
RETURN oCn
De fato, antes estava faltando a declaração da variável, que acresci agora (mas o erro continua); reiterando que no Harbour também não tinha essa declaração, mas funcionava (e ainda funciona).

Agradeço toda ajuda.
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

Vai fazer fonte assim lá na casa do Carvalho.... literalmente...
Duvido que isso funcione em algum lugar.

Como foi dito desde o começo, usar variável vazia não funciona.

É só remover lixo do fonte.
Remova o lixo do fonte que não serve pra nada: nVZEXQ
Contador que não conta é inútil.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

Sei lá porque insert no teste, mas porque complicar ?

Código: Selecionar todos

#include "hwgui.ch"

MEMVAR cnSQL

FUNCTION Main

   LOCAL oDlg, oFont, oFontSay
   LOCAL nTp :=0, oSAY1, oSAY2
   PUBLIC cnSQL

   cnSQL := ConexaoMySQL()

   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13
   PREPARE FONT oFontSay NAME "MS Sans Serif" WIDTH 0 HEIGHT -13 WEIGHT 700

   INIT DIALOG oDlg TITLE "Teste de SQL" AT 100, 100 SIZE 340, 300 FONT oFont

   cnSQL:Execute("insert into ativ(data,hora,acao,detalhes) values('2023-08-03','"+Time()+"','Testesql34','Testesql34:automático')")

   @ 20,12 SAY oSAY1 CAPTION "Escolha:" SIZE 260, 24 ;
      FONT oFontSay COLOR 8404992

   @ 20,50 BUTTON "Cadastra teste manualmente" SIZE 180,28 ;
      ON CLICK {||cadastrateste()}

   @ 20,150 SAY oSAY2 CAPTION Str(nTp) SIZE 180, 28

   @ 20, 250 LINE LENGTH 300
   @ 120,258 BUTTON "Close" SIZE 100,30 ON CLICK {||oDlg:Close()}

   ACTIVATE DIALOG oDlg
   cnSQL:Close()

   RETURN Nil

FUNCTION cadastrateste

   LOCAL oDlg, oFont, oSAY1

   PREPARE FONT oFont NAME "MS Sans Serif" WIDTH 0 HEIGHT -13

   INIT DIALOG oDlg TITLE "Cadastra manualmente" AT 280, 210 SIZE 250, 250 FONT oFont

   cnSQL:Execute("insert into ativ(data,hora,acao,detalhes) values('2023-03-08','"+Time()+"','Testesql34','Testesql34:manual')")

   @ 10,40 SAY oSAY1 CAPTION "Teste cadastrado" SIZE 360, 36

   @  10,190  BUTTON "Ok" SIZE 100, 32 ON CLICK {||oDlg:Close()}

   ACTIVATE DIALOG oDlg

   RETURN Nil

FUNCTION ConexaoMySQL()

   LOCAL cnSQL := win_OleCreateObject("ADODB.Connection")
   LOCAL cServer :="mysql.xxx.com.br"
   LOCAL cDatabase :="xxx"
   LOCAL cUser :="xxx"
   LOCAL cPassword :="xxx"

   cnSQL:ConnectionString := "DRIVER={MariaDB ODBC 3.1 Driver};TCPIP=1;SERVER=" + ;
      cServer + ";Database=" + cDatabase + ";UID=" + cUser + ";PWD=" + cPassword + ";PORT=3306"

   cnSQL:CursorLocation   := 3

   RETURN cnSQL
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/
ivanil
Usuário Nível 3
Usuário Nível 3
Mensagens: 166
Registrado em: 11 Set 2004 15:13
Localização: Florianópolis/SC

erro em compilação

Mensagem por ivanil »

Olá Inácio;

Sem levar o mérito da lógica em si de seu código; perceba que você esta mesclando comandos console com gráfico, teoricamente seu sistema deve ir para o back ou travar, mas siga o código do Quintas, acho que faltou abrir a conexão, mas é um bom começo.

Grande abraço.
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

ivanil escreveu:acho que faltou abrir a conexão.
Não.
Levei um tempo pra entender o erro, tive até que usar o debug.

Criou um contador de 1 a 2 (inútil)
Usava a conexão com o contador em 1, com variável vazia.
E só iria colocar conteúdo com o contador em 2, após dar o erro.

Com certeza é fonte copiado e mexido de qualquer jeito, pode ver que tem teste de resposta pra pergunta nenhuma também.
E com certeza NUNCA funcionaria como estava, não tem como ele dizer que "no harbour" funciona.
O alinhamento errado dá indícios de fonte apagado.
conexao.png
Nota: tive que omitir linhas na visualização pra caber na tela a parte que interessa.
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
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

Inácio

Como deu pra ver, seu fonte estava muito ruim.

Ao invés de partir agora pra LIB gráfica, pode ser mais interessante primeiro procurar organizar os fontes.
A gente aprende com isso também.
Mas procure SE COBRAR, pra não complicar o que não precisa ser complicado.

Variável é tudo.
Não é pra largar variáveis de qualquer jeito no fonte.
Toda variável tem um começo, e tem um uso.
Variável local começa no início da rotina, e vai embora no final.
Compilação -w3 -es2 ajuda muito nisso.

Variável private e public, são variáveis que não se sabe de onde vém e pra onde vão, e o compilador não pode ajudar a conferir.
Acaba sendo fácil ter variáveis inúteis, ou variáveis sem conteúdo.

Se não organizar os fontes primeiro, vai ter problemas como o que acabou de acontecer.

Mas não se trata apenas de organizar, mas de organizar pra entender o que faz e porque faz.
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/
cjp
Usuário Nível 6
Usuário Nível 6
Mensagens: 1563
Registrado em: 19 Nov 2010 22:29
Localização: paraná
Contato:

erro em compilação

Mensagem por cjp »

O contador está no original no Harbour, e tem uma função. Ao copiar, esqueci de retirá-lo. Desculpe.
Entendi agora que faltava abrir a conexão (no teu exemplo também faltou), coloquei e funcionou. Obrigado.
Inacio de Carvalho Neto
Avatar do usuário
JoséQuintas
Administrador
Administrador
Mensagens: 20267
Registrado em: 26 Fev 2007 11:59
Localização: São Paulo-SP

erro em compilação

Mensagem por JoséQuintas »

cjp escreveu:Entendi agora que faltava abrir a conexão (no teu exemplo também faltou)
Então ainda não entendeu.
Não faltava ABRIR
Faltava o conteúdo da variável.
Estava usando uma variável VAZIA.

Também daria erro se não tivesse aberto a conexão, mas aí seria outro erro.
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