Hola Francisco
Si usaras cursor adapter, sólo para la conexión y las transacciones te preocuparías por el origen de datos, en todo lo demás se usa una sola instrucción.
En el load de la clase formulario abm:
With This
If Type( "_Screen.oApp" ) = "O"
If Pemstatus( _Screen.oApp, "AccesMode", 5 )
.AccesMode = _Screen.oApp.AccesMode
.MyDatabase = _Screen.oApp.MyDatabase
Endif
Endif
If Upper( .AccesMode ) == "DBF"
.oCaMainTable = Createobject( [MiCursorAdapter], "NATIVE", .MyDatabase )
Else
.oCaMainTable = Createobject( [MiCursorAdapter], "ODBC", Filetostr( "Datos\Conexion.cnx" ) )
Endif
.crsAlias = "crs" + .MainTable
.oCaMainTable.CrearCursor( .MainTable, .crsAlias, .KeyField, .T., .T. )
.nConexion = .oCaMainTable.DataSource
Endwith
Si no usarás dbfs entonces es más simple aún:
With This
.oCaMainTable = Createobject( [MiCursorAdapter], "ODBC", Filetostr( "Datos\Conexion.cnx" ) )
.crsAlias = "crs" + .MainTable
.oCaMainTable.CrearCursor( .MainTable, .crsAlias, .KeyField, .T., .T. )
.nConexion = .oCaMainTable.DataSource
Endwith
El archivo de texto "Conexion.cnx" contiene el string de conexión, para Sql Server 2005 Express tiene:
Driver={SQL Server};Server=LocalHost\sqlexpress;Database=VheDat;Trusted_Connection=yes;
En el método grabar:
If Upper( .cOrigenDatos ) == "DBF"
Begin Transaction
Else
SQLExec( .nConexion, 'BEGIN TRANSACTION' )
SQLSetprop( .nConexion, 'Transactions', 2 )
Endif
Aquí es donde hay diferencias entre algunos SGBD.
Saludos,
Víctor.