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  sqlrollback nu ...
 sqlrollback nu functioneaza
 
 11/28/2011 1:41:54 PM
User is offlinecrisoftdesign
9 posts


sqlrollback nu functioneaza
 (N/A)
Lucrez in VFP 9 cu o baza de date sql, cu ajutorul vederilor externe pt care am setat SendUpdates=.t. Problema apare cand vreau sa actualizez mai multe tabele intr-o tranzactie ( am setat tranzactie manuala), iar daca o actualizare pe una din tabele esueaza (la TableUpdate()), vreau sa fac sqlrollback(). Pe tabele pe care TableUpdate() a esuat, nu se face actualizare in sql, dar pe tabelele pe care am facut anterior TableUpdate(), modificarile raman in sql. Unde gresesc!?? DBSETPROP('view1','View','SendUpdates',.T.) DBSETPROP('view2','View','SendUpdates',.T.) my_conn=sqlconnection(my_odbc,my_user,my_pass) SQLSETPROP(my_conn,"Transactions",2) begin transaction ** modific view1 ** modific view2 if tableupdate('view1')=.t. if tableupdate('view2')=.t. sqlcommit(my_conn) end transaction else && AICI APARE EROAREA ROLLBACK SQLROLLBACK(my_conn) endif else rollback sqlrollback(my_conn) endif
 11/28/2011 1:45:51 PM
User is offlinecrisoftdesign
9 posts


Re: sqlrollback nu functioneaza
 (N/A)
[QUOTE]crisoftdesign wrote
Lucrez in VFP 9 cu o baza de date sql, cu ajutorul vederilor externe pt care am setat SendUpdates=.t. Problema apare cand vreau sa actualizez mai multe tabele intr-o tranzactie ( am setat tranzactie manuala), iar daca o actualizare pe una din tabele esueaza (la TableUpdate()), vreau sa fac sqlrollback(). Pe tabele pe care TableUpdate() a esuat, nu se face actualizare in sql, dar pe tabelele pe care am facut anterior TableUpdate(), modificarile raman in sql. Unde gresesc!??
DBSETPROP('view1','View','SendUpdates',.T.)
DBSETPROP('view2','View','SendUpdates',.T.)
my_conn=sqlconnection(my_odbc,my_user,my_pass)
SQLSETPROP(my_conn,"Transactions",2)
begin transaction
** modific view1
** modific view2
if tableupdate('view1')=.t.
if tableupdate('view2')=.t.
sqlcommit(my_conn)
end transaction
else && AICI APARE EROAREA
ROLLBACK
SQLROLLBACK(my_conn)
endif
else
rollback
sqlrollback(my_conn)
endif
 11/28/2011 2:48:42 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: sqlrollback nu functioneaza
 (N/A)
Nu tii tranzactia deschisa cat timp faci modificarile in cursoare. Tranzactia se deschide strict inainte de salvare.
Pune toate cursoarele in table buffering.
Tranzactia SQL se deschide si se inchide in interiorul tranzactiei VFP - vezi ordinea la sqlrollback si rollback
Setarea tipului de tranzactie sql deschide automat o tranzactie.

Ordinea corecta ar fi urmatoarea:

my_conn=sqlconnection(my_odbc,my_user,my_pass)  && asta e conexiunea prin care deschzi view-urile

CURSORSETPROP("Buffering",5,'view1')
CURSORSETPROP('Buffering',5, 'view2')

** modific view1
** modific view2

CURSORSETPROP("SendUpdates",.t.,'view1')
CURSORSETPROP('SendUpdates',.T., 'view2')

begin transaction
SQLSETPROP(my_conn,"Transactions",2)

if tableupdate('view1')=.t.
    if tableupdate('view2')=.t.
        sqlcommit(my_conn)
        end transaction
     else
       
SQLROLLBACK(my_conn)
       
ROLLBACK
    endif
else
   
sqlrollback(my_conn)
   
rollback
endif

SQLSETPROP(my_conn,"Transactions",1)


Vezi mai multe in articolul acesta:
http://msdn.microsoft.com/en-us/library/ms947432


Daniel Buduru
 11/28/2011 3:22:41 PM
User is offlinecrisoftdesign
9 posts


Re: sqlrollback nu functioneaza
 (N/A)
Multumesc pentru promptitudine.
Am refacut codul cu sugestiile date, dar problema persista in sensul ca actualizarea in tabelele sql se face la tableupdate, nu la sqlcommit.
 11/28/2011 4:10:30 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: sqlrollback nu functioneaza
 (N/A)
Ce server sql este?
Verifica daca se seteaza manual transaction pe server. Arata ca si cand ar functiona in automatic transactions.


Daniel Buduru
 11/28/2011 4:29:46 PM
User is offlinecrisoftdesign
9 posts


Re: sqlrollback nu functioneaza
 (N/A)
SQL server 2008 R2 (express)
 11/28/2011 4:43:12 PM
User is offlineDaniel Buduru
2335 posts
1st




Re: sqlrollback nu functioneaza
 (N/A) Modified By Daniel Buduru  on 11/28/2011 6:33:37 PM)
Verifica valoarea returnata de SQLSETPROP(my_conn,"Transactions",2) .
IF SQLSETPROP(my_conn,"Transactions",2) <1
     AERROR(ae)
* ae[1] contine codul erorii, ae[2] mesajul de eroare.
    suspend
endif
Inainte de primul tableupdate, verifica dace pe server s-a deschis tranzactia
SQLEXEC(my_conn,'Select @@Trancount as trancount, @@options as options','crsresult')
if crsresult.trancount<>1 or bitand(crsresult.options,2)<>0
  * serverul este pe implicit transactions, nu pe automatic  manual
endif

Ar trebui sa testezi rezultatul fiecarei comenzi sqlexec, intrucat serverul nu ridica o eroare in vfp.


Daniel Buduru
  Visual FoxPro  Client/Server  sqlrollback nu ...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement