Problema con ADO
Saludos.
Tengo un problema persistente en una aplicaci贸n en el momento de volver a generar 铆ndices en las tablas.
Estoy trabajando con VB 6.0 y tablas FOXPRO
Para la conexi贸n utilizo :
Public Function AbrirConexion_I(ByRef cnn As ADODB.Connection)
With cnn
.ConnectionString = "DRIVER={Microsoft Visual FoxPro Driver};" & _
"SERVER=;" & _
"SOURCETYPE=DBF;" & _
"SOURCEDB=" & RutaFichero & ";" & _
"UID=;" & _
"PWD=;" & _
"OPTION=" & 1 + 2 + 8 + 32 + 2048 + 163841
.Open
End With
End Function
Para el recordset :
Public Sub AbrirRecorset_F(ByRef rst As ADODB.Recordset, ssql As String)
With rst
.ActiveConnection = frmMenus.mCnn_F
.CursorLocation = adUseServer
.CursorType = adOpenStatic
.LockType = adLockPessimistic
.Open ssql
End With
End Sub
(donde ssql es la cadena "SELECT * FROM TABLA WHERE ... ORDER BY ... ")
Para re-indexar las tablas utilizo DAO, ya que no he encontrado forma alguna de hacerlo con ADO :
Set mDbs_Index = OpenDatabase(RutaFichero, False, False, "Foxpro 2.6;")
脫
Set mDbs_Index = OpenDatabase(RutaFichero, True, False, "Foxpro 2.6;")
1) primero elimino el indice existente
mDbs_Index.Execute "DROP INDEX " & Nombre_Indice_Tabla & " ON " & Tabla_Actual
2) luego lo genero de nuevo
mDbs_Index.Execute "CREATE INDEX " & Nombre_Indice_Tabla & " ON " _
& Tabla_Actual & " (" & Nombre_Indice_Tabla & ");"
El caso es que cuando la aplicaci贸n no ha abierto ning煤n recordset la creaci贸n de indices se efectua correctamente, pero cuando en alg煤n momento la aplicaci贸n ha abierto alg煤n recodset, se produce un error 3051 en tiempo ejecuci贸n. "el motor de base de datos est谩 siendo utilizado por otro usuario o no tiene permisos"
He probado utilizar otro cursores y tipos como
adLockReadOnly
adLockOptimistic
por entender que la tabla se pudiera abrir de modo exclusivo.
Tambi茅n todos los tipos de cursores
adOpenForwardOnly
adOpenKeySet, etc.
Tambi茅n a la hora de cerrar el recordset libero de la memoria el mismo utilizando:
Public Sub CerrarRecorset(ByRef rst As ADODB.Recordset)
rst.Close
Set rst = Nothing
End Sub
y siempre la misma historia, si arranco la aplicaci贸n y voy directamente a indexar todo Ok en caso contrario el jodido error.
Cierto es que en muchas p谩ginas se indica que cada entorno con sus tablas y que es imposible funcionar con VB y FOXPRO.
Pues bien, mi aplicaci贸n funciona correctamente exceptuando este punto y a la altura en que est谩 me vuelvo loco de pensar que tenga que empezar de nuevo.
Ah! me dejaba, estoy funcionando con MDAC 2.81 Y en XP, tambi茅n lo he probado en W98 se y W2000 y lo mismo de lo mismo.
Se puede reindexar de otra forma ?
Agradezco de antemano cualquier ayuda o indicaci贸n que se me pueda ofrecer.
Felicidades por el funcionamiento del foro.
Tengo un problema persistente en una aplicaci贸n en el momento de volver a generar 铆ndices en las tablas.
Estoy trabajando con VB 6.0 y tablas FOXPRO
Para la conexi贸n utilizo :
Public Function AbrirConexion_I(ByRef cnn As ADODB.Connection)
With cnn
.ConnectionString = "DRIVER={Microsoft Visual FoxPro Driver};" & _
"SERVER=;" & _
"SOURCETYPE=DBF;" & _
"SOURCEDB=" & RutaFichero & ";" & _
"UID=;" & _
"PWD=;" & _
"OPTION=" & 1 + 2 + 8 + 32 + 2048 + 163841
.Open
End With
End Function
Para el recordset :
Public Sub AbrirRecorset_F(ByRef rst As ADODB.Recordset, ssql As String)
With rst
.ActiveConnection = frmMenus.mCnn_F
.CursorLocation = adUseServer
.CursorType = adOpenStatic
.LockType = adLockPessimistic
.Open ssql
End With
End Sub
(donde ssql es la cadena "SELECT * FROM TABLA WHERE ... ORDER BY ... ")
Para re-indexar las tablas utilizo DAO, ya que no he encontrado forma alguna de hacerlo con ADO :
Set mDbs_Index = OpenDatabase(RutaFichero, False, False, "Foxpro 2.6;")
脫
Set mDbs_Index = OpenDatabase(RutaFichero, True, False, "Foxpro 2.6;")
1) primero elimino el indice existente
mDbs_Index.Execute "DROP INDEX " & Nombre_Indice_Tabla & " ON " & Tabla_Actual
2) luego lo genero de nuevo
mDbs_Index.Execute "CREATE INDEX " & Nombre_Indice_Tabla & " ON " _
& Tabla_Actual & " (" & Nombre_Indice_Tabla & ");"
El caso es que cuando la aplicaci贸n no ha abierto ning煤n recordset la creaci贸n de indices se efectua correctamente, pero cuando en alg煤n momento la aplicaci贸n ha abierto alg煤n recodset, se produce un error 3051 en tiempo ejecuci贸n. "el motor de base de datos est谩 siendo utilizado por otro usuario o no tiene permisos"
He probado utilizar otro cursores y tipos como
adLockReadOnly
adLockOptimistic
por entender que la tabla se pudiera abrir de modo exclusivo.
Tambi茅n todos los tipos de cursores
adOpenForwardOnly
adOpenKeySet, etc.
Tambi茅n a la hora de cerrar el recordset libero de la memoria el mismo utilizando:
Public Sub CerrarRecorset(ByRef rst As ADODB.Recordset)
rst.Close
Set rst = Nothing
End Sub
y siempre la misma historia, si arranco la aplicaci贸n y voy directamente a indexar todo Ok en caso contrario el jodido error.
Cierto es que en muchas p谩ginas se indica que cada entorno con sus tablas y que es imposible funcionar con VB y FOXPRO.
Pues bien, mi aplicaci贸n funciona correctamente exceptuando este punto y a la altura en que est谩 me vuelvo loco de pensar que tenga que empezar de nuevo.
Ah! me dejaba, estoy funcionando con MDAC 2.81 Y en XP, tambi茅n lo he probado en W98 se y W2000 y lo mismo de lo mismo.
Se puede reindexar de otra forma ?
Agradezco de antemano cualquier ayuda o indicaci贸n que se me pueda ofrecer.
Felicidades por el funcionamiento del foro.