Problema con tablas dbf y visual basic 6

Me gustaría no tener que molestarte pero llevo días dándole vueltas a un problema y no encuentro la solución. Tengo un problema con unas tablas dbf, quiero acceder a ellas a a través de visual basic 6, pero no logro dar con la solución. Hasta ahora yo había trabajado en vb6 con access y me funcionaba de bien, pero no se cual es el código para abrir y recorrer las tablas dbf.
Agradecería que me echases una mano con el tema.

2 respuestas

Respuesta
1
Claro! Recuerda que en los dbf, marcas para borrar y luego tienes que hacer PACK para eliminarlos físicamente de la Tabla o archivo .dbf.
Seguro que no la tengo abierta, lo que no se es si hay alguna propiedad en la estructura de la tabla que indique que no se puede modificar, pero la abro con foxpro y si que me deja modificarla.
Si quieres te mando los archivos, que ocupan muy poco, por si tu ves algo raro, o por si me esta fallando el visual basic.
Si deses borrar toda la tabla debes hacer algo como esto:
--------------
Dim CONSULTA As String
CONSULTA = "DELETE FROM ARTICULO WHERE CCODFAM = 'ABB'"
FES1. Open CONSULTA, RES1, adOpenDynamic, adLockOptimistic
--------------
No necesitas hacer el FES1. Close , pues la sentencia DELETE lo hace automaticamente.
Como lo tienes planteado en el código que enviaste se borra el registro activo o actual y de esa manera te tocaría recorrer todo el recordset y darle .delete para eliminar todos los registros de la tabla, mientras que como te coloque en este mensaje, se hace de una vez y es más rapido.
Gracias, ya he conseguido abrir la tabla y visualizar los datos, pero ahora no me deja borrarlos. El código que utilizo es:
Public RES1 As New ADODB.Connection
Public FES1 As New ADODB.Recordset
Private Sub Command1_Click()
With RES1
.ConnectionString = "Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\abb;"
.ConnectionTimeout = 10
End With
RES1.Open
Dim CONSULTA As String
CONSULTA = "SELECT CREF FROM ARTICULO WHERE CCODFAM = 'ABB'"
FES1.Open CONSULTA, RES1, adOpenDynamic, adLockBatchOptimistic
FES1.Delete
FES1.Update
FES1.Close
RES1.Close
End Sub
No me da ningún error pero los datos siguen estado ahí.
¿Sabes por qué no me borra?
En la función de eliminar si lo tengo cambiado y me da el mismo mensaje.
En la de añadir lo he cambiado y me da el siguiente error:
No se puede actualizar, base de datos u objeto de solo lectura.
He mirado todos los atributos del fichero y no esta marcada la opción de solo lectura y no tengo abierta en ese momento la tabla.
Cambiaste en la cadena de conexión esto: ¿AdLockOptimistic?
Prueba entonces con "DELETE * FROM..."
En primer lugar agradecerte la prontitud de tus contestaciones.
Me siguie sin funcionar y me da el mismo error. Además he probado a añadir en la tabla con:
fes1. Addnew
fes1.fields(0) = valor
...
fes1.update
Y tampoco me añade.
No si que me falla.
Espero tu respuesta, gracias.
Un saludo.
Este es el código que utilizo ahora, con el driver de foxpro como me has dicho:
With RES1
.ConnectionString = "Driver={Microsoft Visual FoxPro Driver};SourceType=DBF;SourceDB=c:\abb;Exclusive=No;Collate=Machine;NULL=NO;DELETED=YES;BACKGROUNDFETCH=YES"
.ConnectionTimeout = 10
End With
RES1.Open
RES1.Execute ("delete from articulo")
No me borra los datos, pero si entro a verlos a foxpro los tengo todos marcados, igual que si los borras en foxpro, supongo que me faltará algún comando para borrar los registros seleccionados.
¿Sabes cómo lo debo hacer?
Saludos
He probado tu código y me da el siguiente error:
ERROR '-2147467259 (80004005)
Microsoft controlador odbc dbase
No se pudo eliminar nada en las tablas especificadas
Si ejecuto una consulta con esta condición, si me devuelve datos.
CONSULTA = "select * FROM ARTICULO WHERE CCODFAM = 'ABB'"
Espero tu respuesta.
Gracias por ayuda.
Probablemente debes tener abierta la tabla .dbf en algún programa, fox, dbase, excel, u otro. Revisa que no la tengas abierta.
Trata de probar con el driver de Foxpro a ve r como te va
Pasate por www.connectionstrings.com allí encuentras la cadena de conexión para poder conectarte a este tipo de archivos.
¿Y con que líneas de comando indico esto en visual basic?
Creo que en el .Open le envías el PACK nombredeTabla.
Respuesta
1
Vinculamos el fichero indicado.
Set miTd = miDb.CreateTableDef("TmpDBF")
miTd.Connect = "dBASE III;DATABASE=" & sRutaDBF
miTd.SourceTableName = cNombreDBF
miDb.TableDefs.Append miTd
Set oRs = miDb.OpenRecordSet("TmpDBF")
.....
' Cierro la base de datos.
miDb.TableDefs.Delete "TmpDBF"
MiDb. TableDefs. Refresh

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas