Cerrar Base de Access

15/02/2006 - 15:39 por Israel Martínez | Informe spam
Hola foro!

Tengo un problema con el siguiente codigo:

Sub Main()
Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Temp\NewMDB.mdb;" & _
"Jet OLEDB:Engine Type=5")
cat = Nothing
Console.WriteLine("Database Created Successfully")
Console.Read()

File.Delete("C:\Temp\NewMDB.mdb")
Console.WriteLine("Database Deleted")
Console.Read()
End Sub

Cuando el programa intenta eliminar el archivo genera una excepción de que
el archivo esta en uso, mi pregunta es ¿Como cierro el archivo una vez que ya
ha sido creado?

Les agradesco de antemano.

Preguntas similare

Leer las respuestas

#1 Jorge Serrano [MVP VB]
15/02/2006 - 16:01 | Informe spam
Hola,

prueba con esto:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Temp\NewMDB.mdb;" & _
"Jet OLEDB:Engine Type=5")

cat = Nothing

GC.Collect()
GC.WaitForPendingFinalizers()

System.IO.File.Delete("C:\Temp\NewMDB.mdb")

End Sub

Espero que te sirva.

Dinos si te sirvió.

Un saludo,

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Israel Martínez" wrote:

Hola foro!

Tengo un problema con el siguiente codigo:

Sub Main()
Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Temp\NewMDB.mdb;" & _
"Jet OLEDB:Engine Type=5")
cat = Nothing
Console.WriteLine("Database Created Successfully")
Console.Read()

File.Delete("C:\Temp\NewMDB.mdb")
Console.WriteLine("Database Deleted")
Console.Read()
End Sub

Cuando el programa intenta eliminar el archivo genera una excepción de que
el archivo esta en uso, mi pregunta es ¿Como cierro el archivo una vez que ya
ha sido creado?

Les agradesco de antemano.
Respuesta Responder a este mensaje
#2 Israel Martínez
15/02/2006 - 17:26 | Informe spam
Gracias Jorge, pues si, con eso se soluciona el problema, te lo agradesco
mucho.
Ahora, si no es mucha molestia, podrias explicarme que pasa.

"Jorge Serrano [MVP VB]" escribió:

Hola,

prueba con esto:

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
System.EventArgs) Handles Button1.Click
Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=C:\Temp\NewMDB.mdb;" & _
"Jet OLEDB:Engine Type=5")

cat = Nothing

GC.Collect()
GC.WaitForPendingFinalizers()

System.IO.File.Delete("C:\Temp\NewMDB.mdb")

End Sub

Espero que te sirva.

Dinos si te sirvió.

Un saludo,

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Israel Martínez" wrote:

> Hola foro!
>
> Tengo un problema con el siguiente codigo:
>
> Sub Main()
> Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
> cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=C:\Temp\NewMDB.mdb;" & _
> "Jet OLEDB:Engine Type=5")
> cat = Nothing
> Console.WriteLine("Database Created Successfully")
> Console.Read()
>
> File.Delete("C:\Temp\NewMDB.mdb")
> Console.WriteLine("Database Deleted")
> Console.Read()
> End Sub
>
> Cuando el programa intenta eliminar el archivo genera una excepción de que
> el archivo esta en uso, mi pregunta es ¿Como cierro el archivo una vez que ya
> ha sido creado?
>
> Les agradesco de antemano.
Respuesta Responder a este mensaje
#3 Jorge Serrano [MVP VB]
15/02/2006 - 17:51 | Informe spam
Hola Isaías.

Lo que creo que pasa (y puedo cometer algún error en mi apreciación), es que
ADOX es un componente COM y por lo tanto, trabaja como código no manejado.

Al hacer Nothing el objeto, éste no se cierra o libera completamente y
permanece en memoria, por lo que es bueno "forzar" a que libere el objeto
definitivamente.
Esto lo logras con el GarbageCollector de .NET, indicándole o forzándole a
que libere los objetos no utilizados de la memoria (incluido los objetos a
Nothing).

Espero que esto te ayude para este caso y otros futuros.

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Israel Martínez" wrote:

Gracias Jorge, pues si, con eso se soluciona el problema, te lo agradesco
mucho.
Ahora, si no es mucha molestia, podrias explicarme que pasa.

"Jorge Serrano [MVP VB]" escribió:

> Hola,
>
> prueba con esto:
>
> Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
> System.EventArgs) Handles Button1.Click
> Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
> cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
> "Data Source=C:\Temp\NewMDB.mdb;" & _
> "Jet OLEDB:Engine Type=5")
>
> cat = Nothing
>
> GC.Collect()
> GC.WaitForPendingFinalizers()
>
> System.IO.File.Delete("C:\Temp\NewMDB.mdb")
>
> End Sub
>
> Espero que te sirva.
>
> Dinos si te sirvió.
>
> Un saludo,
>
> Jorge Serrano Pérez
> Microsoft MVP VB.NET
> PortalVB.com
> http://www.portalvb.com/
> Weblog de Jorge Serrano
> http://weblogs.golemproject.com/jorge/
>
>
> "Israel Martínez" wrote:
>
> > Hola foro!
> >
> > Tengo un problema con el siguiente codigo:
> >
> > Sub Main()
> > Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
> > cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
> > "Data Source=C:\Temp\NewMDB.mdb;" & _
> > "Jet OLEDB:Engine Type=5")
> > cat = Nothing
> > Console.WriteLine("Database Created Successfully")
> > Console.Read()
> >
> > File.Delete("C:\Temp\NewMDB.mdb")
> > Console.WriteLine("Database Deleted")
> > Console.Read()
> > End Sub
> >
> > Cuando el programa intenta eliminar el archivo genera una excepción de que
> > el archivo esta en uso, mi pregunta es ¿Como cierro el archivo una vez que ya
> > ha sido creado?
> >
> > Les agradesco de antemano.
Respuesta Responder a este mensaje
#4 Israel Martínez
15/02/2006 - 18:26 | Informe spam
De nuevo muchas gracias Jorge, y gracias por compartir tu conocimiento.

"Jorge Serrano [MVP VB]" escribió:

Hola Isaías.

Lo que creo que pasa (y puedo cometer algún error en mi apreciación), es que
ADOX es un componente COM y por lo tanto, trabaja como código no manejado.

Al hacer Nothing el objeto, éste no se cierra o libera completamente y
permanece en memoria, por lo que es bueno "forzar" a que libere el objeto
definitivamente.
Esto lo logras con el GarbageCollector de .NET, indicándole o forzándole a
que libere los objetos no utilizados de la memoria (incluido los objetos a
Nothing).

Espero que esto te ayude para este caso y otros futuros.

Un saludo.

Jorge Serrano Pérez
Microsoft MVP VB.NET
PortalVB.com
http://www.portalvb.com/
Weblog de Jorge Serrano
http://weblogs.golemproject.com/jorge/


"Israel Martínez" wrote:

> Gracias Jorge, pues si, con eso se soluciona el problema, te lo agradesco
> mucho.
> Ahora, si no es mucha molestia, podrias explicarme que pasa.
>
> "Jorge Serrano [MVP VB]" escribió:
>
> > Hola,
> >
> > prueba con esto:
> >
> > Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As
> > System.EventArgs) Handles Button1.Click
> > Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
> > cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
> > "Data Source=C:\Temp\NewMDB.mdb;" & _
> > "Jet OLEDB:Engine Type=5")
> >
> > cat = Nothing
> >
> > GC.Collect()
> > GC.WaitForPendingFinalizers()
> >
> > System.IO.File.Delete("C:\Temp\NewMDB.mdb")
> >
> > End Sub
> >
> > Espero que te sirva.
> >
> > Dinos si te sirvió.
> >
> > Un saludo,
> >
> > Jorge Serrano Pérez
> > Microsoft MVP VB.NET
> > PortalVB.com
> > http://www.portalvb.com/
> > Weblog de Jorge Serrano
> > http://weblogs.golemproject.com/jorge/
> >
> >
> > "Israel Martínez" wrote:
> >
> > > Hola foro!
> > >
> > > Tengo un problema con el siguiente codigo:
> > >
> > > Sub Main()
> > > Dim cat As ADOX.CatalogClass = New ADOX.CatalogClass
> > > cat.Create("Provider=Microsoft.Jet.OLEDB.4.0;" & _
> > > "Data Source=C:\Temp\NewMDB.mdb;" & _
> > > "Jet OLEDB:Engine Type=5")
> > > cat = Nothing
> > > Console.WriteLine("Database Created Successfully")
> > > Console.Read()
> > >
> > > File.Delete("C:\Temp\NewMDB.mdb")
> > > Console.WriteLine("Database Deleted")
> > > Console.Read()
> > > End Sub
> > >
> > > Cuando el programa intenta eliminar el archivo genera una excepción de que
> > > el archivo esta en uso, mi pregunta es ¿Como cierro el archivo una vez que ya
> > > ha sido creado?
> > >
> > > Les agradesco de antemano.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida