* 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 ENDIFEm 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 ENDIFInternamente, 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).