Copiar archivos y borrar registros de .dbf en Basic 6

Estoy desarrollando una aplicación en Visual Basic 6.0 y estoy manipulando ciertas tablas con extensión ".dbf" (ejemplo: FoxPro) como parte de la progración, ya que necesito obtener datos de estas tablas y agregarlas a mi base de datos de sql server 2000.
Los procesos que sigo son estos:
1. Son 12 tablas llamadas TranXX (Tran01.dbf, Tran02.dbf, Tran03.dbf, ...) A estas tablas utilizo APIs en Visual Basic para copiarlas uno por uno a otra carpeta, pero con algunas de esas tablas no puedo copiarlas, porque me sale el mensaje: "Permiso denegado".
¿A qué se debe este error y cómo puedo solucionarlo?
2. Necesito eliminar estos regisros de cada tabla dbf. Utilizo, en visual basic, las sentencias de sql y las elimino uno por uno, ejm: "delete from Tran01"... "delete from Tran02"..., y así sucesivamente. Pero me doy cuenta que los registros siguen en sus respectivas tablas, y sólo se encuentran marcadas (eliminación lógica), pero no se eliminaron físicamente. Quisiera utilizar los comandos de FoxPro como el Zap o Pack, pero estoy utilizando visual basic.
¿Cómo puedo hacer para borrar dichos registros desde visual basic?

4 respuestas

Respuesta
1
Ufff, tengo 33 años, y hace 17 o 18 años atrás (cuando tenía 15 años de edad) usaba dBase y usaba DBF y demás. Me haz echo sentir viejo :D
Primero, si deseas pasar esos DBF a SQL, este último tiene asistentes de migración de datos, deberías usarlos, y hasta te diría que poco a poco dejes de usar DBF diles como base de datos.
La respuesta a la pregunta 1 es, el acceso al archivo es denegado por que está abierto o usado por alguna aplicación, servicio o cuales fuere y no puedes borrarlo, fíjate que nadie lo use para moverlo o borrarlo.
Sobre la respuesta a la pregunta 2, desde VB nunca abrí un DBF, pero si puedes ejecutar comandos como si de la linea de FoxPro o dBase se tratase con el comando EXECUTE de ADO en VB6, algo así:
Código:
Dim cnnADODB As New ADODB.Connection
cnnADODB.Provider = "Microsoft.Jet.OLEDB.4.0" 
cnnADODB.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=c:\folder;Extended Properties=dBASE IV;User ID=Admin;Password=;"
CnnADODB. Execute("ZAP") ' o PACK
No se si funcionará pero es una idea, obviamente deberás cambiar la Cadena de conexión por la correcta para tu archivo DBF.
También puedes intentar como tu lo estás haciendo, pasándole el ZAP como comando de igual manera que como un SELECT.
Más sobre las cadenas de conexión a un DBF:
http://www.connectionstrings.com/dbf-foxpro
Si te fui de ayuda, por favor valora y cierra la pregunta, así de esa manera, puedo ayudar a más personas.
Si tienes dudas me lo haces saber.
Respuesta
Palteado man, no se manejar FoxPro, ni SQL server.
Para la parte de eliminar, puede usar un bucle para eliminar, por ejemplo
for P = 0 to 12
rc.delete
next
solo si trabajas bajas con DAO.
Lamento no savver mucho del tema de foxpro, como soy antiguos no lo uso,
lo lamento
Respuesta
Si te sale que la tabal esta utilizada es porque eta abierta en modo exclusivo por otra aplicación cuando vayas a abriri la tabla debes asegurarte que otra aplicación no la este suando cuando usas el programa de VB6
2. Usa el pack, para eliminar los registros físicamente.
Respuesta
Disculpala demora pero ahora estoy en problemas por una casa que compre y no tengo tiempo hsata estoy postenado preguntas sobre hipotecas a algunos expertos aquí
Sorry no puedo responderte ahora...

Añade tu respuesta

Haz clic para o
El autor de la pregunta ya no la sigue por lo que es posible que no reciba tu respuesta.

Más respuestas relacionadas