Level Extreme platform
Subscription
Corporate profile
Products & Services
Support
Legal
Français
SQLServer
Message
From
04/07/2006 22:25:07
Peter Wagner
Point Informática Ltda.
Limeira, Brazil
 
 
To
04/07/2006 17:26:51
General information
Forum:
Visual FoxPro
Category:
Other
Title:
Environment versions
Visual FoxPro:
VFP 8 SP1
OS:
Windows XP SP2
Network:
Windows 2003 Server
Database:
MS SQL Server
Miscellaneous
Thread ID:
01133680
Message ID:
01133712
Views:
11
Claudio,
eu uso o VFP 8.0 e basicamente faço o mesmo, e dá tudo certo.
* Define o tipo de transação  p/ controle pelo VFP e não do Servidor, sendo nID o numero da conexão
= SQLSETPROP(nID, 'TRANSACTIONS', 2) && MANUAL
* em caso de uso de CA, uso um código como este, onde tabela é o alias da tabela que estou atualizando
XRETORNO = TABLEUPDATE(1,.T.,tabela)	&& Salva CA_PAI (passar como parametro a tabela a salvar)
IF XRETORNO 
 WAIT WINDOW "Dados Salvados" TIMEOUT 1
ELSE
= SQLROLLBACK(nID) 
* aqui coloco a mensagem de erro
ENDIF
Em caso de uso de comandos T-SQL
= SQLSETPROP(nID, 'TRANSACTIONS', 2) && MANUAL
* em caso de uso de CA, uso um código como este, onde tabela é o alias da tabela que estou atualizando
XRETORNO = SQLEXEC(nID, 'INSERT INTO tabelaX (CAMPO1, CAMPO2) values (1, 2)')
IF XRETORNO >=0
 = SQLCOMMIT(nID)
 WAIT WINDOW "Dados Salvados" TIMEOUT 1
ELSE
= SQLROLLBACK(nID) 
* aqui coloco a mensagem de erro
ENDIF
Internamente, quando o vc da o comando = SQLSETPROP(nID, 'TRANSACTIONS', 2) , o VFP acrescenta um BEGIN TRANSACTION no SQL Server, adicionando uma camada a mais, e esta camada só pode ser finalizada com 2 comandos, SQLCOMMIT(nID) ou SQLROLLBACK(nID).
O SQL Server pode desfazer toda a operação tambem em caso de queda da conexão, ou pode deixar a operação pendurada mantendo o bloqueio do Registro/Pagina/Tabela da operação que esta sendo executada, mas isto não deve estar no seu escopo pelo problema apresentado.

Vc pode fazer o teste no Query Analizer, bastando susbtituir = SQLSETPROP(nID, 'TRANSACTIONS', 2) por BEGIN TRANSACTION, e enquanto vc não der um COMMIT TRANSACTION ou der um ROLLBACK TRANSACTION a operação não tera sido concluida no servidor.

[ ]'s
Peter


>Considerem a seguninte situação:
>
>ObjConexao = SQLSTRINGCONNECT(StrxConexao)
>= SQLSETPROP(ObjConexao, 'Transactions', 2)
>= SQLEXEC(ObjConexao, 'insert into tabela (teste, teste1) values (1, 2)')
>
> se emitir
> = SQLRollback(ObjConexao)
> && aqui beleza, o comando é revertido.
>
>mas se um erro ocorrer ou a conexão for interrompida as atualizações feitas até aquele ponto são salvas, parece que o VFP80 SP1 esta emitindo...
> = SQLCommit(ObjConexao)
>
>isso é assim mesmo?
>Gostaria que "SQLRollback(ObjConexao)" fosse emitido quando a conexão termina e não "SQLCommit(ObjConexao)".
>
> alguém pode me ajudar?
>
> Obrigado
>
> Claudio
Previous
Next
Reply
Map
View

Click here to load this message in the networking platform