O que destruir de uma classe ao encerrar a classe?
Enviado: 04 Mar 2022 19:56
Existe a necessidade de destruir alguma coisa na classe ao encerrar a classe?
Ou isso é só pra componentes GUI?
Ou isso é só pra componentes GUI?
Em homenagem a Paulo Cesar Toledo
https://pctoledo.org/
Código: Selecionar todos
rs := conexao:Execute( cSQL )
Código: Selecionar todos
cnSQL := win_OleCreateObject( "ADODB.Connection" )
Código: Selecionar todos
FUNCTION ExcelConnection( cFileName, cVersion )
LOCAL oConexao
DO CASE
CASE ValType( cVersion ) == "C"
CASE ".xlsx" $ Lower( cFileName ); cVersion := "12.0 Xml" // XLSX
//CASE "t00" $ Lower( cFileName ) ; cVersion := "5.0" // 95
OTHERWISE ; cVersion := "8.0" // 97/2000/XP
ENDCASE
oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := ;
[Provider=Microsoft.ACE.OLEDB.12.0;Data Source=] + cFileName + ;
[;Extended Properties="Excel ] + cVersion + [;HDR=YES";]
RETURN oConexao
Código: Selecionar todos
FUNCTION MySQLConnection( cServer, cDatabase, cUser, cPassword, nPort )
LOCAL cnConnection, cString
hb_Default( @nPort, 3306 )
cString := iif( win_OsIs10(), "Provider=MSDASQL;", "" )
IF IsOdbcVelho()
cString += "Driver={MySQL ODBC 3.51 Driver};"
ELSE
cString += "Driver={MySQL ODBC 5.3 ANSI Driver};"
ENDIF
cString += "Server=" + cServer + ";" + ;
"Port=3307;" + ;
"Stmt=;" + ;
"Database=" + cDatabase + ";" + ;
"User=" + cUser + ";" + ;
"Password=" + cPassword + ";" + ;
"Collation=latin1_swedish_ci;" + ;
; // "SCHEMANOERROR=1;" + ;
"AUTO_RECONNECT=1;" + ;
"COMPRESSED_PROTO=0"
// "PAD_SPACE=1;" + ; // omitido 2022.02.17
cnConnection := win_OleCreateObject( "ADODB.Connection" )
cnConnection:ConnectionString := cString
cnConnection:CursorLocation := AD_USE_CLIENT
cnConnection:CommandTimeOut := 600 // seconds
cnConnection:ConnectionTimeOut := 600 // seconds
RETURN cnConnection
Código: Selecionar todos
FUNCTION ADSConnection( cPath )
LOCAL oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := "Provider=Advantage OLE DB Provider;" + ;
"Mode=Share Deny None;" + ;
"Show Deleted Records in DBF Tables with Advantage=False;" + ;
"Data Source=" + cPath + ";Advantage Server Type=ADS_Local_Server;" + ;
"TableType=ADS_CDX;Security Mode=ADS_IGNORERIGHTS;" + ;
"Lock Mode=Compatible;" + ;
"Use NULL values in DBF Tables with Advantage=True;" + ;
"Exclusive=No;Deleted=No;"
oConexao:CursorLocation := AD_USE_CLIENT
oConexao:CommandTimeOut := 20
RETURN oConexao
Código: Selecionar todos
FUNCTION SQLiteConnection( cFileName )
LOCAL oConexao := win_OleCreateObject( "ADODB.Connection" )
oConexao:ConnectionString := iif( win_OsIs10(), "Provider=MSDASQL;", "" ) + ;
"Driver={SQLite3 ODBC Driver};Database=" + cFileName + ";"
oConexao:CursorLocation := AD_USE_CLIENT
oConexao:CommandTimeOut := 20
RETURN oConexao
José pelo codigo fonte que li aqui, o Harbour já tenta liberar a memória automaticamente quando a variavel criada com win_OleCreateObject() é destruida.cnSQL := win_OleCreateObject( "ADODB.Connection" )
....
Basicamente criar a conexão, configurar, e usar o tempo todo, com cnSQL:Execute( "comando" )
Achei que estava perguntando por outro motivo.vailton escreveu:José pelo codigo fonte que li aqui, o Harbour já tenta liberar a memória automaticamente quando a variavel criada com win_OleCreateObject() é destruida.
Código: Selecionar todos
oConexao := CreateObject( "ADODB.Connection" )
oConexao:ConnectionString := [Provider=Microsoft.ACE.OLEDB.12.0;Data Source=] + mArq_ + [;Extended Properties="Excel 12.0 Xml; HDR=Yes";] //IMEX=1";]
oConexao:Open()
rs := oConexao:Execute( "SELECT * FROM [report1$]" )
...
...
Do While ...
...
...
rs:MoveNext()
Enddo
rs:Close()
oConexao:Close()
oConexao := NIL
oRs := NIL
SETCURSOR(cur_atual)
DbCloseAll()
END SEQUENCE
O Sr. tem planejado atualizar a xDevStudio 0.70, pois sou usuário dela faz muito tempo.vailton escreveu:Sim, entendo. É uma opção, eu prefiro a outra que é como você fez: escrutinar o código e torná-lo melhor, mais robusto e maduro.