339 lines
10 KiB
Plaintext
339 lines
10 KiB
Plaintext
Define Class DBAccessController As Custom
|
|
|
|
cServer = Null
|
|
cSchema = Null
|
|
cParola = Null
|
|
oExecutor = Null
|
|
oConn = Null
|
|
nHandle = Null
|
|
nSucces = 0
|
|
lAfiseazaEroare = .T.
|
|
***********************************************************************
|
|
Procedure Init
|
|
If Type('goConn') = 'O'
|
|
This.oConn = goConn
|
|
Else
|
|
This.oConn = Createobject("oConn")
|
|
Public goConn
|
|
goConn = This.oConn
|
|
Endif
|
|
If Type('goExecutor') = 'O'
|
|
This.oExecutor = goExecutor
|
|
Else
|
|
This.oExecutor = Createobject("oExecutor")
|
|
Public goExecutor
|
|
goExecutor = This.oExecutor
|
|
Endif
|
|
If Type('gnHandle') = 'N'
|
|
This.nHandle = gnHandle
|
|
Else
|
|
This.nHandle = -1
|
|
Public gnHandle
|
|
gnHandle = -1
|
|
Endif
|
|
Endproc
|
|
***********************************************************************
|
|
PROCEDURE conecteaza
|
|
Lparameters tcSchema,tcParola
|
|
This.cSchema = tcSchema
|
|
This.cParola = tcParola
|
|
This.nHandle = This.oConn.Connect(This.cServer,This.cSchema,This.cParola)
|
|
ENDPROC
|
|
***********************************************************************
|
|
PROCEDURE deconecteaza
|
|
This.oConn.Disconnect(This.nHandle)
|
|
This.cSchema = Null
|
|
This.cParola = Null
|
|
This.nHandle = -1
|
|
ENDPROC
|
|
***********************************************************************
|
|
Procedure setServer
|
|
Lparameters tcServer
|
|
This.cServer = tcServer
|
|
Endproc
|
|
***********************************************************************
|
|
Procedure setSchemaParola
|
|
Lparameters tcSchema,tcParola
|
|
If This.nHandle <> -1
|
|
This.oConn.Disconnect(This.nHandle)
|
|
Endif
|
|
This.conecteaza(tcSchema,tcParola)
|
|
Endproc
|
|
***********************************************************************
|
|
Procedure copiaza_structura_cursor
|
|
Lparameters tcSursa,tcDestinatie
|
|
LOCAL lnIndex
|
|
If !Empty(tcSursa) And !Empty(tcDestinatie)
|
|
If Used(tcSursa)
|
|
Dimension laStructura(1,18)
|
|
If Used(tcDestinatie)
|
|
Use In (tcDestinatie)
|
|
Endif
|
|
Afields(laStructura,tcSursa)
|
|
*!* lnIndex = ALEN(laStructura,1)+1
|
|
*!* DIMENSION laStructura(lnIndex,18)
|
|
*!* laStructura[lnIndex,1] = "RN"
|
|
*!* laStructura[lnIndex,2] = "N"
|
|
*!* laStructura[lnIndex,3] = 10
|
|
*!* laStructura[lnIndex,4] = 0
|
|
*!* laStructura[lnIndex,5] = .F.
|
|
*!* laStructura[lnIndex,6] = laStructura[lnIndex-1,6]
|
|
*!* laStructura[lnIndex,7] = []
|
|
*!* laStructura[lnIndex,8] = []
|
|
*!* laStructura[lnIndex,9] = []
|
|
*!* laStructura[lnIndex,10] = laStructura[lnIndex-1,10]
|
|
*!* laStructura[lnIndex,11] = laStructura[lnIndex-1,11]
|
|
*!* laStructura[lnIndex,12] = laStructura[lnIndex-1,12]
|
|
*!* laStructura[lnIndex,13] = []
|
|
*!* laStructura[lnIndex,14] = []
|
|
*!* laStructura[lnIndex,15] = []
|
|
*!* laStructura[lnIndex,16] = []
|
|
*!* laStructura[lnIndex,17] = 1
|
|
*!* laStructura[lnIndex,18] = 1
|
|
Create Cursor (tcDestinatie) From Array laStructura
|
|
Release laStructura
|
|
Else
|
|
amessagebox("Eroare interna 2 - copiaza structura cursor",16,"Eroare")
|
|
Endif
|
|
Else
|
|
amessagebox("Eroare interna 1 - copiaza structura cursor",16,"Eroare")
|
|
Endif
|
|
Endproc
|
|
***********************************************************************
|
|
Function apeleaza_sql_hash
|
|
Lparameters toHash,tcNumeCursor
|
|
LOCAL lcSql
|
|
lcSql = [select ] + toHash.getValue('cColumns') + ;
|
|
[ from ] + toHash.getValue('cTables') + ;
|
|
IIF(!Empty(toHash.getValue('cWhere')),[ where ] + toHash.getValue('cWhere'),[]) + ;
|
|
IIF(!Empty(toHash.getValue('cGroupBy')),[ group by ] + toHash.getValue('cGroupBy'),[]) + ;
|
|
IIF(!Empty(toHash.getValue('cOrderBy')),[ order by ] + toHash.getValue('cOrderBy'),[])
|
|
RETURN This.apeleaza_sql(lcSql,tcNumeCursor)
|
|
endfunc
|
|
***********************************************************************
|
|
Function apeleaza_sql
|
|
Lparameters tcSql,tcNumeCursor
|
|
Local lcNumeCursor,lcAlias,llSucces
|
|
llSucces = .F.
|
|
lcAlias = Alias()
|
|
lcNumeCursor = [codbctemp]
|
|
If Used(lcNumeCursor)
|
|
Use In (lcNumeCursor)
|
|
Endif
|
|
This.nSucces = This.oExecutor.oExecute(tcSql,lcNumeCursor)
|
|
llSucces = This.verificaSucces()
|
|
If llSucces
|
|
If !Used(tcNumeCursor)
|
|
This.copiaza_structura_cursor(lcNumeCursor,tcNumeCursor)
|
|
Endif
|
|
Select (tcNumeCursor)
|
|
Zap In (tcNumeCursor)
|
|
Append From Dbf(lcNumeCursor)
|
|
Go Top
|
|
If Used(lcNumeCursor)
|
|
Use In (lcNumeCursor)
|
|
Endif
|
|
If !Empty(lcAlias)
|
|
Select (lcAlias)
|
|
Endif
|
|
Endif
|
|
Return llSucces
|
|
Endfunc
|
|
***********************************************************************
|
|
Function apeleaza_procedura
|
|
Lparameters tcApelProcedura,tcNumeCursor
|
|
Local lcNumeCursor,lcAlias,llSucces,lcDeclaratie
|
|
llSucces = .F.
|
|
lcAlias = Alias()
|
|
If !Empty(tcNumeCursor)
|
|
lcNumeCursor = [codbctemp]
|
|
lcSql = [{call ] + tcApelProcedura + [}]
|
|
If Used(lcNumeCursor)
|
|
Use In (lcNumeCursor)
|
|
Endif
|
|
Else
|
|
lcSql = [begin ] + tcApelProcedura + [; end;]
|
|
Endif
|
|
|
|
This.nSucces = This.oExecutor.oExecute(lcSql,lcNumeCursor)
|
|
|
|
llSucces = This.verificaSucces()
|
|
If llSucces And !Empty(tcNumeCursor)
|
|
If !Used(tcNumeCursor)
|
|
This.copiaza_structura_cursor(lcNumeCursor,tcNumeCursor)
|
|
Endif
|
|
Select (tcNumeCursor)
|
|
Zap In (tcNumeCursor)
|
|
Append From Dbf(lcNumeCursor)
|
|
Go Top
|
|
If Used(lcNumeCursor)
|
|
Use In (lcNumeCursor)
|
|
Endif
|
|
Endif
|
|
If !Empty(lcAlias)
|
|
Select (lcAlias)
|
|
Endif
|
|
Return llSucces
|
|
Endfunc
|
|
***********************************************************************
|
|
Function apeleaza_procedura_o
|
|
Lparameters tcApelProcedura,tcSirTip
|
|
Local lcNumeCursor,lcAlias,llSucces,lcNumeVariabila,lnParametri, lcTip
|
|
Dimension laSir[1]
|
|
llSucces = .F.
|
|
lcAlias = Alias()
|
|
lnParametri = Getwordcount(tcSirTip,[|])
|
|
Dimension laSir[lnParametri]
|
|
For i = 1 To lnParametri
|
|
lcTip = Getwordnum(tcSirTip,i,[|])
|
|
lcNumeVariabila = [p] + lcTip + [Parametru] + Alltrim(Str(i))
|
|
lcDeclaratie = [Private ] + lcNumeVariabila
|
|
&lcDeclaratie
|
|
DO case
|
|
CASE UPPER(lcTip) = 'N'
|
|
lcDeclaratie = lcNumeVariabila + [ = 0]
|
|
CASE UPPER(lcTip) = 'C'
|
|
lcDeclaratie = lcNumeVariabila + [ = '']
|
|
Otherwise
|
|
lcDeclaratie = lcNumeVariabila + [ = Null]
|
|
endcase
|
|
&lcDeclaratie
|
|
tcApelProcedura = Strtran(tcApelProcedura,[@p]+Padl(Alltrim(Str(i)),2,[0]),[@]+lcNumeVariabila)
|
|
Endfor
|
|
lcSql = [{call ] + tcApelProcedura + [}]
|
|
This.nSucces = This.oExecutor.oExecute(lcSql)
|
|
llSucces = This.verificaSucces()
|
|
If llSucces
|
|
For i = 1 To lnParametri
|
|
lcNumeVariabila = [p] + Getwordnum(tcSirTip,i,[|]) + [Parametru] + Alltrim(Str(i))
|
|
loVariabila = &lcNumeVariabila
|
|
laSir[i] = loVariabila
|
|
lcDeclaratie = [Release ] + lcNumeVariabila
|
|
&lcDeclaratie
|
|
Endfor
|
|
ELSE
|
|
For i = 1 To lnParametri
|
|
laSir[i] = Null
|
|
Endfor
|
|
Endif
|
|
If !Empty(lcAlias)
|
|
Select (lcAlias)
|
|
Endif
|
|
Return laSir
|
|
Endfunc
|
|
***********************************************************************
|
|
Function apeleaza_functie
|
|
Lparameters tcApelFunctie,tcTip
|
|
Local lcCursor,luReturn
|
|
lcCursor = [crstaf010101]
|
|
lcSql = [select ] + tcApelFunctie + [ as valoare from dual]
|
|
This.nSucces = This.oExecutor.oExecute(lcSql,lcCursor)
|
|
If This.verificaSucces()
|
|
Select (lcCursor)
|
|
luReturn = valoare
|
|
If Used(lcCursor)
|
|
Use In (lcCursor)
|
|
Endif
|
|
Do Case
|
|
Case Isnull(luReturn)
|
|
Return Null
|
|
Case Type('luReturn') <> tcTip
|
|
Return Val(luReturn)
|
|
Otherwise
|
|
Return luReturn
|
|
Endcase
|
|
Else
|
|
Return Null
|
|
Endif
|
|
Endfunc
|
|
***********************************************************************
|
|
Function getEroare
|
|
Return Iif(Between(This.oExecutor.nEroare,20000,21000),This.oExecutor.cEroare,[])
|
|
Endfunc
|
|
***********************************************************************
|
|
Function getSucces
|
|
Return This.nSucces
|
|
Endfunc
|
|
***********************************************************************
|
|
Function getSchema
|
|
Return This.cSchema
|
|
Endfunc
|
|
***********************************************************************
|
|
Procedure setAfiseazaEroare
|
|
Lparameters tlAfiseazaEroare
|
|
This.lAfiseazaEroare = tlAfiseazaEroare
|
|
Endproc
|
|
***********************************************************************
|
|
Procedure getAfiseazaEroare
|
|
Return This.lAfiseazaEroare
|
|
Endproc
|
|
***********************************************************************
|
|
Function verificaSucces
|
|
Local llReturn
|
|
llReturn = .T.
|
|
If This.nSucces < 0
|
|
IF This.lAfiseazaEroare OR (!BETWEEN(This.oExecutor.nEroare,20000,21000))
|
|
amessagebox(This.oExecutor.cEroare,16,"Eroare")
|
|
ENDIF
|
|
llReturn = .F.
|
|
Endif
|
|
Return llReturn
|
|
Endfunc
|
|
***********************************************************************
|
|
Function setTranzactieManuala
|
|
Local lnSucces
|
|
lnSucces = SQLSetprop(This.nHandle,"Transactions",2)
|
|
If lnSucces < 0
|
|
If This.lAfiseazaEroare
|
|
amessagebox("Programul nu a reusit sa treaca pe tranzactie manuala! Reintrati in program si incercati din nou!",16,"Eroare")
|
|
Endif
|
|
llReturn = .F.
|
|
Else
|
|
llReturn = .T.
|
|
Endif
|
|
Return llReturn
|
|
Endfunc
|
|
***********************************************************************
|
|
Function setTranzactieAutomata
|
|
Local lnSucces,llReturn
|
|
lnSucces = SQLSetprop(This.nHandle,"Transactions",1)
|
|
If lnSucces < 0
|
|
If This.lAfiseazaEroare
|
|
amessagebox("Programul nu a reusit sa treaca pe tranzactie automata! Iesiti din program si intrati din nou!",16,"Eroare")
|
|
Endif
|
|
llReturn = .F.
|
|
Else
|
|
llReturn = .T.
|
|
Endif
|
|
Return llReturn
|
|
Endfunc
|
|
***********************************************************************
|
|
Function confirmaOperatii
|
|
Local lnSucces,llReturn
|
|
lnSucces = Sqlcommit(This.nHandle)
|
|
If lnSucces < 0
|
|
If This.lAfiseazaEroare
|
|
amessagebox("Eroare la COMMIT!",16,"Eroare")
|
|
Endif
|
|
llReturn = .F.
|
|
Else
|
|
llReturn = .T.
|
|
Endif
|
|
Return llReturn
|
|
Endfunc
|
|
***********************************************************************
|
|
Function revocaOperatii
|
|
Local lnSucces,llReturn
|
|
lnSucces = Sqlrollback(This.nHandle)
|
|
If lnSucces < 0
|
|
If This.lAfiseazaEroare
|
|
amessagebox("Eroare la ROLLBACK!",16,"Eroare")
|
|
Endif
|
|
llReturn = .F.
|
|
Else
|
|
llReturn = .T.
|
|
Endif
|
|
Return llReturn
|
|
Endfunc
|
|
***********************************************************************
|
|
Enddefine |