Acceso a base de datos VFP desde VB con ADO

Tengo problemas para acceder a una base de datos que uso y esta en VFP 6.0, estoy desarrollando un aplicativo en VB 6.0, y me dicen que ADO es la mejor forma de acceder a la BD.
En este momento me conecto con la BD por ODBC, y en los intentos de trabajo, me hace consultas simples, (Select * from...) pero no hace operaciones de Update, delete, insert. Admito que casi no conozco el manejo de los objetos de ADO, Puede que este haciendo algo incorrecto. Ayudenme...

1 respuesta

Respuesta
1
Te expongo un ejemplo, lo combine para que valga la pena, espero te sirva:
Option Explicit
Private Sub MSFlexGrid1_Click()
End Sub
Private Sub Command1_Click()
Dim cnFox As ADODB.Connection, cnExcel As ADODB.Connection
Dim rsFox As ADODB.Recordset, rsExcel As ADODB.Recordset
Dim i As Long
'supongo que los dos ficheros estan en el mismo directorio que el programa
Screen.MousePointer = 11
'abro la base de datos de excel
Set cnExcel = New ADODB.Connection
cnExcel.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\Libro1.xls;Persist Security Info=False; Extended Properties=Excel 8.0;"
cnExcel.Open
'cargo un recordset con los datos
Set rsExcel = New ADODB.Recordset
rsExcel.Open "select * from [hoja1$]", cnExcel, adOpenForwardOnly, adLockReadOnly
'abro la base de datos de fox
Set cnFox = New ADODB.Connection
cnFox.ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=" & App.Path & "\;SourceType=DBF;Exclusive=No;BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;"
cnFox.Open
'abro el recordset de fox
Set rsFox = New ADODB.Recordset
rsFox.CursorLocation = adUseClient
'me aseguro de que esté vacío, para ahorrar tiempo
rsFox.Open "select * from mercbi where idsector = ''", cnFox, adOpenKeyset, adLockOptimistic
'recorro la tabla de excel
While Not rsExcel.EOF
rsFox.AddNew
'copio los campos que tienen el mismo nombre
For i = 0 To rsExcel.Fields.Count - 1
rsFox(rsExcel(i).Name) = rsExcel(i)
Next i
'como estos campos no me los mandaste en el mensaje no
'los metí en la hoja excel y les damos valores "manualmente"
rsFox("Activo") = 1
rsFox("feccreacio") = Now()
rsFox("fecactuali") = Now()
rsFox("tipobien") = 1
rsFox.Update
rsExcel.MoveNext
Wend
'cierror el recordset de excel
rsExcel.Close
Set rsExcel = Nothing
'cierro el recordset de fox
rsFox.Close
Set rsFox = Nothing
'cierro excel
cnExcel.Close
Set cnExcel = Nothing
'cierror fox
cnFox.Close
Set cnFox = Nothing
Screen.MousePointer = 0
End Sub
Private Sub Form_Load()
'Provider=MSDASQL.1;Persist Security Info=False;Extended Properties=Driver={Microsoft Visual FoxPro Driver};UID=;SourceDB=\\Servidor\RutaArchivosDBF\;SourceType=DBF;Exclusive=No;
'BackgroundFetch=Yes;Collate=Machine;Null=Yes;Deleted=Yes;
End Sub
Exactamenmte, necesito el funcionamiento de los objetos Ado connection, command y recordset, como y cuando usarlos, que parámetros agregarle a los comandos, y si hay alguna restricción a la hora de escribir o modificar la base de datos, así como las rutinas de error que genera, para manejo de integridad referencial.
Checate estos link's
http://www.foxbrasil.com.br/apostilasespanhol/cap19al22.pdf
http://www.microsoft.com/latam/vfoxpro/recursos/tecfaq.asp
http://www.pablin.com.ar/computer/cursos/vfoxpro/index.htm
Además por lo que refieres veo que no te has dado una vueltecita por la ayuda, allí tienes todas las respuestas a tantas dudas
Por ejemplo:
MoveAbsolute (Método)
Mueve el cursor a un índice específico dentro de u n objeto Recordset.
Sintaxis
object.moveAbsolute(nIndex)
Parámetros
object
Un objeto de secuencia de comandos Recordset.
NIndex
Un entero que especifica un índice absoluto de base 1.
Comentarios
Devuelve True si el movimiento es correcto y False si no lo es.
Use moveAbsolute para especificar el índice absoluto al que ha de moverse el cursor dentro de un objeto Recordset.
Para mover el cursor a una posición relativa, utilice el método move. Otros métodos de movimiento del cursor son moveFirst, moveLast, movePrevious y moveNext.
Ejemplo
El siguiente ejemplo mueve el cursor al cuarto registro.
myRS.moveAbsolute(4);
Si no tienes la ayuda, puedes consultarla en línea en los canales de microsoft en la dirección siguiente:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/fox7help/html/tocLanguage_Reference_A_Z.asp
Personalmente te recomiendo que sigas con el ODBC, es más rápido que ADO, pero solo es mi opinión, que quizás muchos no compartan.
Ok, ¿cuál es el problema exactamente?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas