Página 2 de 3

erro em compilação

Enviado: 07 Ago 2023 01:09
por cjp
Desculpe, mas não te entendi.
Postei o código acima. Tem algo errado nele?

erro em compilação

Enviado: 07 Ago 2023 10:44
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.

erro em compilação

Enviado: 07 Ago 2023 11:19
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ê.

erro em compilação

Enviado: 07 Ago 2023 12:20
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.

erro em compilação

Enviado: 08 Ago 2023 00:19
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?

erro em compilação

Enviado: 08 Ago 2023 09:47
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.

erro em compilação

Enviado: 08 Ago 2023 11:39
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.

erro em compilação

Enviado: 09 Ago 2023 00:23
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.

erro em compilação

Enviado: 09 Ago 2023 05:30
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.

erro em compilação

Enviado: 09 Ago 2023 05:58
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

erro em compilação

Enviado: 09 Ago 2023 09:19
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.

erro em compilação

Enviado: 09 Ago 2023 11:42
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.

erro em compilação

Enviado: 09 Ago 2023 16:41
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.

erro em compilação

Enviado: 10 Ago 2023 01:12
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.

erro em compilação

Enviado: 10 Ago 2023 09:00
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.