erro em compilação
Enviado: 07 Ago 2023 01:09
Desculpe, mas não te entendi.
Postei o código acima. Tem algo errado nele?
Postei o código acima. Tem algo errado nele?
Assim fica difícil.cjp escreveu:Desculpe, mas não te entendi.
Postei o código acima. Tem algo errado nele?
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.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ê.
Ola Inacio,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?
Entender o problema é fácil, entender o Inácio que é difícil.ivanil escreveu: 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.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.
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.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.
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 oCnCó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
Não.ivanil escreveu:acho que faltou abrir a conexão.
Então ainda não entendeu.cjp escreveu:Entendi agora que faltava abrir a conexão (no teu exemplo também faltou)