Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Client/Server  Tratarea unei e...
 Tratarea unei exceptii ridicate de Firebird
 
 12/16/2008 11:59:28 AM
User is offlinecostin_mentor
492 posts
www.accessoft.ro
2nd




Tratarea unei exceptii ridicate de Firebird
 (N/A)
Versiune VFP : 9
Versiune Firebird : 2.1

Am o procedura care-mi trateaza interactiunea cu Firebird (numita mcsqlexec) , daca intampin o eroare (intoarsa de Firebird, nu s-a putut executa comanda SQL) o tratez in procedura eroareaMea .
La un moment dat initiez o tranzactie (am urmatoarea secventa de instructiuni) astfel :

SQLSETPROP(handleConexiune,"Transactions",2) && initiere tranzactie
try
........
mcsqlexec(o_instructiune_sql)
......
mcsqlexec(alta_instructiune_sql)
......
mcsqlexec(alta_instructiune_sql)
catch
sqlrollback(handleConexiune)
endtry
SQLSETPROP(handleConexiune,"Transactions",1) && terminare tranzactie
sqlcommit(handleconexiune)
Problema mea este urmatoarea : daca din Firebird primesc o exceptie(sa presupunem generata de prima comanda mcsqlexec() , am reusit sa o prind si sa o afisez in procedura EroareaMea , dar apoi programul imi continua cu instructiunea imediat urmatoare, nu-mi sare la "catch" cum mi-as dori eu .
Aveti vreo idee de a ajunge la modul de functionare dorit de mine (daca am o exceptie sa nu se mai execute nimic in Firebird , sa renunt la toate modificarile legate de tranzactie) ?

multumesc
 12/16/2008 12:14:37 PM
User is offlineCLASSOFT
231 posts
www.classoft.ro
4th


Re: Tratarea unei exceptii ridicate de Firebird
 (N/A) Modified By CLASSOFT  on 12/16/2008 1:15:39 PM)
Salut, Nu ma pricep a Firebird, insa la SQL Server am avut probleme asemanatoare cu controlul tranzactiilor din fox. SQLSETPROP(handleConexiune,"Transactions",1) nu functiona corect in toate cazurile si riscam sa raman cu serverul 'blocat'. De atunci tranzactiile sunt deschise direct pe server prin TSQL.Avem pana la 50 de utilizatori care acceseaza simultam bazele de date si pot spune ca apar probeleme f.f. rar . Iti recomand sa incerci ceva similar in firebird. In MS SQL Server arata in felul urmator :

sqlexec(nSQLHandle,'BEGIN TRANSACTION') *** comenzile tale

IF sqlexec(nSQLHandle,'if @@trancount > 0 commit') && Finalizez tranzactia
* OK
ELSE sqlexec(nSQLHandle,'Rollback') && Anulez tranzactia

ENDIF

Cristi Birlea

www.classoft.eu
 1/11/2009 12:01:49 AM
User is offlineadrian
48 posts
www.infostarpitesti.ro


Re: Tratarea unei exceptii ridicate de Firebird
 (N/A)

Uite la ce ma gandesc eu:

Local llSuccess As Boolean,lcSir As String,laArray As Variant,lcCommand As String

SQLSetprop(nHandle,"DisconnectRollback",.T.)

SQLSetprop(nHandle,"Transactions",2)

TEXT To lcSir Textmerge Noshow

Insert Into table1 (camp1,camp2) Values (1,1);

Insert Into table2 (camp1,camp2) Values (1,1);

Insert Into table3 (camp1,camp2) Values (1,1)

ENDTEXT

Alines(laArray,lcSir,1,';')

For Each lcCommand In laArray

Try

SQLExec(lcCommand)

Catch To oError

llSuccess=.F.

? oError.Message

Endtry

Endfor

If llSuccess

Sqlcommit(nHandle)

Else

Sqlrollback(nHandle)

Endif

SQLSetprop(nHandle,"Transactions",2)

 1/11/2009 12:04:13 AM
User is offlineadrian
48 posts
www.infostarpitesti.ro


Re: Tratarea unei exceptii ridicate de Firebird
 (N/A)

Local llSuccess As Boolean,lcSir As String,laArray As Variant,lcCommand As String

SQLSetprop(nHandle,"DisconnectRollback",.T.)

SQLSetprop(nHandle,"Transactions",2)

TEXT To lcSir Textmerge Noshow

Insert Into table1 (camp1,camp2) Values (1,1);

Insert Into table2 (camp1,camp2) Values (1,1);

Insert Into table3 (camp1,camp2) Values (1,1)

ENDTEXT

Alines(laArray,lcSir,1,';')

For Each lcCommand In laArray

Try

SQLExec(lcCommand)

Catch To oError

llSuccess=.F.

? oError.Message

Exit

Endtry

Endfor

If llSuccess

Sqlcommit(nHandle)

Else

Sqlrollback(nHandle)

Endif

SQLSetprop(nHandle,"Transactions",2)

 1/12/2009 11:11:36 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Tratarea unei exceptii ridicate de Firebird
 (N/A)
E simplu
In mcSQLExec pui o secventa de genul ...


if 0 > Sqlexec( iHandle, cSQL )
Aerror( aSQLError )
cMsg = [Eroare procesare SQL :] + Transform( aSQLError[1,1] ) + Chr(13) ;
+ aSQLError[1,3]
error cMsg

endif


care va genera un User Defined Error si va determina saltul la blocul CATCH

 8/13/2011 2:02:33 AM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Tratarea unei exceptii ridicate de Firebird
 (N/A)
"SQLSETPROP(handleConexiune,"Transactions",1) && terminare tranzactie
sqlcommit(handleconexiune)"

De ce mai trebuie SQLSETPROP(handleConexiune,"Transactions",1)? Nu este de ajuns sqlcommit(handleconexiune)? sau sqldisconect(0) cu DisconnectRollback pe default?
Eu asa folosesc si nu am avut niciodata probleme cu Firebird.
 8/13/2011 2:10:26 PM
User is offlineLAU
240 posts
www.zof.ro
4th


Re: Tratarea unei exceptii ridicate de Firebird
 (N/A)
Hai ca raspund tot eu :)
Ba da este de ajuns insa daca faci o interogare a BD si ai SQLSETPROP(handleConexiune,"Transactions",2) fara SqlCommit(handleConexiune), astepti degeaba rezultatul.
  Visual FoxPro  Client/Server  Tratarea unei e...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement