Visual Basic - Falla o ignorancia?

Life is soft - evento anual de software empresarial
 
Vista:

Falla o ignorancia?

Publicado por lenilax (165 intervenciones) el 20/06/2002 16:55:35
Hola amigos del foro.
Tengo el siguiente codigo:

Public MiConexion As New ADODB.Connection
Public MyRst As New ADODB.Recordset
With MiConexion
.CursorLocation = adUseServer
.Open "Provider=Microsoft.JET.OLEDB.4.0;Data SOURCE=" & App.Path & "\db0.mdb;Persist Security Info=False"
End With
Set MyRst = New ADODB.Recordset
With MyRst
.CursorLocation = adUseClient
.CursorType = adOpenDynamic
.LockType = adLockReadOnly
End With

INr = "A0049"
Sql = "Select * from Details WHERE Invoice LIKE '%" & INr & "%'"
MyRst.Open Sql, MiConexion, adOpenDynamic, adLockOptimistic, adCmdText
RcCnt = MyRst.RecordCount
While Not MyRst.EOF
X = MyRst!Amount
Y = X + Y
MyRst.MoveNext
Wend

Bueno, el punto es que estoy absolutamente seguro de que en la tabla Details hay al menos un registro que cumple con el criterio de seleccion (Invoice = "A0049") .De hecho he seguido el proceso paso a paso, abriendo la tabla para asegurarme, y efectivamente al momento de ejecutar este codigo hay un registro que cumple con la condicion. Lo extrano y desesperante es que a veces lo encuentra (MyRst.RecordCount = 1) y otras veces sencillamente no lo encuentra (MyRst.RecordCount = 0) .
A primera vista me parece una falla pero creo que hay algo que estoy ignorando. Si alguien lo ve le estare muy agradecido. :-)
Gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Falla o ignorancia?

Publicado por TheMente (36 intervenciones) el 29/06/2002 15:53:00
Si no vas a realizar cambios sobre el recordset MyRst, te recomiendo que lo abras como adOpenStatic y adoLockReadOnly.-
Si necesitas realizar cambios, creo que deberias recorrer el Recordset hasta el ultimo registro, es decir MoveLast y volver al comienzo MoveFirst,
estos trucos me han funcionado (Sobre todo el primero, cada vez que necesito saber los registros devueltos por el recordset lo hago de esa forma).
Salu2
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Falla o ignorancia?

Publicado por Ana Maria (72 intervenciones) el 27/06/2005 17:30:30
Hola, a mi me ocurre algo parecido. Yo intento moverme al primer registro de una tabla con un solo campo que contiene almacenada una serie de fechas y me dice siempre que no existe o que fue eliminado el registro y estoy segura de que la tabla contiene registros porque aunque yo borro el contenido y luego lo relleno con cada ejecución del programa, siemprese rellena de datos y no esta vacía.

Porque ocurre esto por favor.
Ejemplo:

Dim rstFechasMedias As ADODB.Recordset

NomBase = "BDTablas.mdb"
Ruta = "c:\Trabajo\Finanzas\" & NomBase
Conexion = "Provider=Microsoft.Jet.OLEDB.4.0;Persist Security Info=False;Data Source=" & Ruta & ""
Set db = New ADODB.Connection
db.ConnectionString = Conexion
db.Open Conexion

Set rstFechasMedias = New ADODB.Recordset
rstFechasMedias.Open "INSERT INTO FECHASMedias SELECT DISTINCT fecha FROM MCHistorico ORDER BY fecha DESC", Conexion, adOpenStatic, adLockOptimistic
.
.
.
.
rstFechasMedias.MoveFirst '....aqui falla!!!....
.........................................................................................................................................
Tambien intente esto otro y meda el mismo error.

Dim rstFechasMedias As ADODB.Recordset

Set rstFechasMedias = New ADODB.Recordset
rstFechasMedias.Open "SELECT * FROM FECHASMedias", Conexion, adOpenStatic, adLockOptimistic

'BorrarFechasMedias
sqlborra2 = "DELETE FROM FECHASMedias"
db.Execute sqlborra2

'LlenarFechasMedias
sqlFechas = "INSERT INTO FECHASMedias SELECT DISTINCT fecha FROM MCHistorico ORDER BY fecha DESC"
db.Execute sqlFechas
.
.
.
.
rstFechasMedias.MoveFirst '....aqui falla otra vez!!!....
......................................................................................................................................................




Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Falla o ignorancia?

Publicado por Julio Aguilar (69 intervenciones) el 29/06/2005 16:16:21
Mira yo veo bien el codigo solo que yo lo utilizaria asi:

ya que solo vas a recorrrerlo una ves y no vas a cmbiar nada.

Public MiConexion As New ADODB.Connection
Public MyRst As New ADODB.Recordset

MiConexion .Open "Provider=Microsoft.JET.OLEDB.4.0;Data SOURCE=" & App.Path & "\db0.mdb;Persist Security Info=False"


MyRst .CursorLocation = adUseClient

INr = "A0049"
Sql = "Select * from Details WHERE Invoice LIKE '%" & INr & "%'"
MyRst.Open Sql, MiConexion,adOpenForwardOnly,adLockReadOnly
RcCnt = MyRst.RecordCount
While Not MyRst.EOF
X = MyRst!Amount
Y = X + Y
MyRst.MoveNext
Wend
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar