Demora en consulta
Publicado por Carlos T. (7 intervenciones) el 15/05/2013 16:21:15
He buscado por internet y en muchos foros, y no consigo respuesta, mi problema no es de deficiencia del código (creo yo), porque la consulta se realiza, pero se demora mucho.
+++++++++++++++++++++ como lo tenía la primera vez ++++++++++++++++++++++++++++++++
Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open dsnfox
Set myset = New ADODB.Recordset
sql = "SELECT MAX (noexam.examen) maxima FROM examen;"
myset.Open sql, db, adOpenDynamic, adLockOptimistic
If Not myset.EOF Then
newid = CLng(myset!maxima)
reg.noexam(i) = newid + 1
Else
MsgBox "La base examen.dbf devuelve EOF"
End If
myset.Close
Set myset = Nothing
********************************* como lo puse la segunda vez ****************************************
Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open dsnfox
Set myset = New ADODB.Recordset
sql = "SELECT noexam FROM examen;"
' sql = "SELECT * FROM examen;"
myset.Open sql, db, adOpenDynamic, adLockOptimistic
If Not myset.EOF Then
myset.MoveLast
newid = CLng(myset!noexam)
reg.noexam(i) = newid + 1
Else
MsgBox "La base examen.dbf devuelve EOF"
End If
myset.Close
Set myset = Nothing
En codigo de abrir la tabla utilicé adOpenKeyset y adOpenStatic, combinado con adLockReadOnly y tampoco funciona.
Todo lo hace perfecto si la base de datos (que es VFP 9.0) está en la misma máquina donde está el ejecutable y de las 2 maneras, pero todo cambia cuando se realiza desde otra máquina en la red, hace la busqueda pero se demora entre 2 y 5 min, si ven solo necesito el código del último registro y sumarle uno para obtener un nuevo registro, suena tonto pero el progrma corre en win2000, no me pregunten por qué (creo que mi jefe no quiere comprar las licencias de win7 aunque yo mismo lo probe en win7 y winXP), chequee que los ODBC están correctos, y cuando instalo el VFP 9.0 los instala por defecto.
He utilizado estos string conecction
Provider=vfpoledb;Data Source=\\BaseDatos\bd.dbc.dbc;Collating Sequence=machine;
Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=\\BaseDatos\bd.dbc.dbc;Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO;
DSN=Visual FoxPro Database;UID=;SourceDB=\\BaseDatos\bd.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Sí;Collate=Machine;Null=No;Deleted=No;
Tambien utilice Exclusive=Sí para los 2 últimos casos, tambien use en vez de el nombre de la maquina usé la dirección IP.
Anteriormente ya había comentado esto en el foro, y no me respondieron; http://www.lawebdelprogramador.com/foros/Visual_Basic/1376946-Conexion_a_base_de_datos_de_VFP_9.0_lenta.html
Antes que nada, muchas gracias y disculpen las molestias
NOTA: todo esto es realizado en VB 6.0
+++++++++++++++++++++ como lo tenía la primera vez ++++++++++++++++++++++++++++++++
Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open dsnfox
Set myset = New ADODB.Recordset
sql = "SELECT MAX (noexam.examen) maxima FROM examen;"
myset.Open sql, db, adOpenDynamic, adLockOptimistic
If Not myset.EOF Then
newid = CLng(myset!maxima)
reg.noexam(i) = newid + 1
Else
MsgBox "La base examen.dbf devuelve EOF"
End If
myset.Close
Set myset = Nothing
********************************* como lo puse la segunda vez ****************************************
Set db = New ADODB.Connection
db.CursorLocation = adUseClient
db.Open dsnfox
Set myset = New ADODB.Recordset
sql = "SELECT noexam FROM examen;"
' sql = "SELECT * FROM examen;"
myset.Open sql, db, adOpenDynamic, adLockOptimistic
If Not myset.EOF Then
myset.MoveLast
newid = CLng(myset!noexam)
reg.noexam(i) = newid + 1
Else
MsgBox "La base examen.dbf devuelve EOF"
End If
myset.Close
Set myset = Nothing
En codigo de abrir la tabla utilicé adOpenKeyset y adOpenStatic, combinado con adLockReadOnly y tampoco funciona.
Todo lo hace perfecto si la base de datos (que es VFP 9.0) está en la misma máquina donde está el ejecutable y de las 2 maneras, pero todo cambia cuando se realiza desde otra máquina en la red, hace la busqueda pero se demora entre 2 y 5 min, si ven solo necesito el código del último registro y sumarle uno para obtener un nuevo registro, suena tonto pero el progrma corre en win2000, no me pregunten por qué (creo que mi jefe no quiere comprar las licencias de win7 aunque yo mismo lo probe en win7 y winXP), chequee que los ODBC están correctos, y cuando instalo el VFP 9.0 los instala por defecto.
He utilizado estos string conecction
Provider=vfpoledb;Data Source=\\BaseDatos\bd.dbc.dbc;Collating Sequence=machine;
Driver={Microsoft Visual FoxPro Driver};SourceType=DBC;SourceDB=\\BaseDatos\bd.dbc.dbc;Exclusive=No;NULL=NO;Collate=Machine;BACKGROUNDFETCH=NO;DELETED=NO;
DSN=Visual FoxPro Database;UID=;SourceDB=\\BaseDatos\bd.dbc;SourceType=DBC;Exclusive=No;BackgroundFetch=Sí;Collate=Machine;Null=No;Deleted=No;
Tambien utilice Exclusive=Sí para los 2 últimos casos, tambien use en vez de el nombre de la maquina usé la dirección IP.
Anteriormente ya había comentado esto en el foro, y no me respondieron; http://www.lawebdelprogramador.com/foros/Visual_Basic/1376946-Conexion_a_base_de_datos_de_VFP_9.0_lenta.html
Antes que nada, muchas gracias y disculpen las molestias
NOTA: todo esto es realizado en VB 6.0
Valora esta pregunta


0