Hi,
I have a problem with a MySQL connection because after a while the connection to database crashes. I think the problem is my xbasic class because an UX Alpha component, that use the embedded Alpha connection it's still working. I need to know what I am doing wrong.
The last modification was to close the connection every time after an execute query if I have no open transaction.
I have a problem with a MySQL connection because after a while the connection to database crashes. I think the problem is my xbasic class because an UX Alpha component, that use the embedded Alpha connection it's still working. I need to know what I am doing wrong.
The last modification was to close the connection every time after an execute query if I have no open transaction.
Code:
'Date Created: 30-Oct-2014 02:06:29 PM 'Last Updated: 23-Jan-2015 03:13:26 PM 'Created By : Catalin 'Updated By : Catalin define class MySQLDB::SQL dim private mysqlconn as SQL::Connection dim private resul as L dim private conexiune as c = "::Name::reabilitare" dim protected Tranzactie as L function public MySQLDB(open = .f.) debug(1) if open DeschideConexiune() end if end function function public DeschideConexiune as L() debug(1) if mysqlconn.IsOpen = .f. then DeschideConexiune = mysqlconn.Open(conexiune) else errorout("Baza de date este deja deschisa.") DeschideConexiune = .t. end if end function function public InchideConexiune() InchideConexiune = mysqlconn.Close() end function function public BeginTransaction as L() debug(1) BeginTransaction = mysqlconn.BeginTransaction() Tranzactie = .t. end function function public CommitTransaction() mysqlconn.CommitTransaction() Tranzactie = .f. end function function public RollbackTransaction() debug(1) mysqlconn.RollbackTransaction() Tranzactie = .f. end function function public ExecuteSQL as L(query as c, retry as n, args as sql::arguments = null_value()) dim resul as L = .f. dim q as n debug(1) if DeschideConexiune() = .t. then for q = 0 to retry 'errorout("Intento " + str(q) + ":" + query) if args = null_value() resul = mysqlconn.execute(query) else resul = mysqlconn.execute(query, args) end if if resul exit for else errorout(mysqlconn.CallResult.text) end if next q end if if Tranzactie = .f. then InchideConexiune() end if ExecuteSQL = resul end function function public GetString as c(query as c) dim resul as C = "" dim rs as sql::resultset errorout("Query="+query) if DeschideConexiune() = .t. then if mysqlconn.execute(query) = .T. then rs = mysqlconn.resultset if rs.NextRow() then resul = rs.data(1) end if delete rs mysqlconn.freeResult() else errorout(mysqlconn.CallResult.text) end if end if if Tranzactie = .f. then InchideConexiune() end if GetString = resul end function function public GetNumeric as n(query as c) dim num as n = val(GetString(query)) if num > 0 GetNumeric = num else GetNumeric = -1 end if end function function public GetArray as a(query AS C) dim rs as sql::resultset dim q as N dim result as C result = "" debug(1) if DeschideConexiune() = .t. then if mysqlconn.execute(query) = .T. then rs = mysqlconn.resultset while rs.NextRow() result = result + js_escape(rs.data(1)) + "," end while delete rs mysqlconn.freeResult() end if end if if Tranzactie = .f. then InchideConexiune() end if GetArray = result end function FUNCTION GetDataSet AS C(query AS C, args as sql::arguments = null_value()) dim rs as sql::resultset dim q as N dim result as C dim resul as L = .f. result = "" debug(1) if DeschideConexiune() = .t. then if args = null_value() resul = mysqlconn.execute(query) else resul = mysqlconn.execute(query, args) end if if resul then rs = mysqlconn.resultset while rs.NextRow() for q = 1 to rs.ColumnCount if q = rs.ColumnCount then result = result + js_escape(rs.data(q)) + crlf() else result = result + js_escape(rs.data(q)) + chr(1) end if next q end while delete rs mysqlconn.freeResult() else errorout(mysqlconn.CallResult.text) end if end if if Tranzactie = .f. then InchideConexiune() end if GetDataSet = result mysqlconn.Close() END FUNCTION end class