recordcount debuelve -1

25/02/2006 - 12:09 por Ch0rY | Informe spam
Hola estoy usando una conexion ODBC para actualizar los datos de una hoja
excel, de esta forma

Set wrkODBC = CreateWorkspace("NuevoWorkspaceODBC", "", "", dbUseODBC)

Set conMiembros = wrkODBC.OpenConnection("conexion1", , ,
"ODBC;DSN=Agrupación;")
Set rstUtilidades = conMiembros.OpenRecordset(SQL)

SQL = "SELECT Miembros.N_Situación, Miembros.DNI, [Nombre] & ' ' &
[Apellido1] & ' ' & [Apellido2] AS NombreCompleto,
Agrupación.F_Incorporación, Agrupación.N_Indicativo, Agrupación.F_Baja "

SQL = SQL & " FROM Miembros INNER JOIN Agrupación ON Miembros.DNI =
Agrupación.DNI"

SQL = SQL & " WHERE (((Miembros.N_Situación) Like 1 Or
(Miembros.N_Situación) = 2) And ((Agrupación.N_Indicativo) Like 0)) Or
(((Agrupación.N_Indicativo) > 2))"

SQL = SQL & " ORDER BY [Nombre] & ' ' & [Apellido1] & ' ' & [Apellido2]"

Set rstMiembros = conMiembros.OpenRecordset(SQL)

LUego compruebo de esta manera si hay registros o no

If rstMiembros.RecordCount > 0 Then

El problema es q la primera vez q ejecuto la consulta SQL funciona
prefectamente, pero si la intento hacer por segunda vez no me debuelve ningun
registro

Cual puede ser el problema?

gracias

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
28/02/2006 - 09:31 | Informe spam
hola, Ch0rY !

1) [me parece que] estas 'exponiendo' [solo] las partes del codigo donde [imagino] 'supones' que reside 'el problema' -?-
2) no comentas [p.e.] si en las 'siguientes llamadas' hay -algunos- 'cambios' en las 'llamadas' al procedimiento/paametros/... -?-
3) pudiera tratarse de 'formas de abrir' un recordset 'por omision' [tratandose de DAO] como de tipo 'dynaset' que [p.e.]
NO permiten la 'lectura' de un 'RecorCount'... hasta que se haya 'leido' el ultimo registro con un 'MoveLast' -?-
4) tampoco comentas si la base que estas leyendo es: FoxPro, dBASE, or Paradox [p.e.] -?-
5) [algunas veces] se necesita CERRAR el recordset [y la base de datos] despues de haber 'terminado de trabajar' con el -?-
6) [p.e.] los recordsets del tipo 'dynaset' pudieran NO ser 'actualizables'... 'bajo ciertas [y variadas] circunstancias' [hay varias] :(
7) en tanto comentas detalles adicionales... revisa si te sirve la informacion [que es mas que 'extensa'] del siguiente enlace:
-> http://tinyurl.com/ogybc

supongo que ya saldran mas detalles -?- los comentas ?
saludos,
hector.
=> ... usando una conexion ODBC para actualizar los datos de una hoja excel, de esta forma
Set wrkODBC = CreateWorkspace("NuevoWorkspaceODBC", "", "", dbUseODBC)
Set conMiembros = wrkODBC.OpenConnection("conexion1", , , "ODBC;DSN=Agrupación;")
Set rstUtilidades = conMiembros.OpenRecordset(SQL)
SQL = "SELECT Miembros.N_Situación, Miembros.DNI, [Nombre] & ' ' & [Apellido1] & ' ' & [Apellido2] AS NombreCompleto, Agrupación.F_Incorporación, Agrupación.N_Indicativo,
Agrupación.F_Baja "
SQL = SQL & " FROM Miembros INNER JOIN Agrupación ON Miembros.DNI = Agrupación.DNI"
SQL = SQL & " WHERE (((Miembros.N_Situación) Like 1 Or (Miembros.N_Situación) = 2) And ((Agrupación.N_Indicativo) Like 0)) Or (((Agrupación.N_Indicativo) > 2))"
SQL = SQL & " ORDER BY [Nombre] & ' ' & [Apellido1] & ' ' & [Apellido2]"
Set rstMiembros = conMiembros.OpenRecordset(SQL)
LUego compruebo de esta manera si hay registros o no
If rstMiembros.RecordCount > 0 Then
El problema es q la primera vez q ejecuto la consulta SQL funciona prefectamente, pero si la intento hacer por segunda vez no me debuelve ningun registro
Cual puede ser el problema?
Respuesta Responder a este mensaje
#2 Ch0rY
01/03/2006 - 16:50 | Informe spam
Hola Hector
* El unico cambio q realizo en los parametros es la sentensia SQL
* La apertura del recordset es tal y como muestro en e codigo

Dim wrkODBC As Workspace
Dim conMiembros As Connection
Dim rstMiembros As Recordset
Dim SQL As String
Set wrkODBC = CreateWorkspace("NuevoWorkspaceODBC", "", "",
dbUseODBC)
Set conMiembros = wrkODBC.OpenConnection("conexion1", , ,
"ODBC;DSN=Agrupación;")
SQL = SQL & " FROM Miembros INNER JOIN Agrupación ON
Miembros.DNI = Agrupación.DNI"
SQL = SQL & " WHERE (((Miembros.N_Situación) Like 1 Or
(Miembros.N_Situación) = 2) And ((Agrupación.N_Indicativo)
Like 0)) Or (((Agrupación.N_Indicativo) > 2))"
SQL = SQL & " ORDER BY [Nombre] & ' ' & [Apellido1] & ' ' &
[Apellido2]"
Set rstMiembros = conMiembros.OpenRecordset(SQL)

* La base de datos es Access
* Y siempre Cierro workspaces, Conecction y recordsets y la vuelvo a
abrir, para evitar problemas como señalas.

* Por lo demas, en el codigo. solo se accede a los datos para leerlos, y
presentarlos en la hoja, nada mas, dentro de un bucle do loop con
stMiembros.movenext

Gracias por responder a esta mi duda.


"Héctor Miguel" wrote in
news::

hola, Ch0rY !

1) [me parece que] estas 'exponiendo' [solo] las partes del codigo donde
[imagino] 'supones' que reside 'el problema' -?- 2) no comentas [p.e.]
si en las 'siguientes llamadas' hay -algunos- 'cambios' en las
'llamadas' al procedimiento/paametros/... -?- 3) pudiera tratarse de
'formas de abrir' un recordset 'por omision' [tratandose de DAO] como de
tipo 'dynaset' que [p.e.]
NO permiten la 'lectura' de un 'RecorCount'... hasta que se haya
'leido' el ultimo registro con un 'MoveLast' -?-
4) tampoco comentas si la base que estas leyendo es: FoxPro, dBASE, or
Paradox [p.e.] -?- 5) [algunas veces] se necesita CERRAR el recordset
[y la base de datos] despues de haber 'terminado de trabajar' con el
-?- 6) [p.e.] los recordsets del tipo 'dynaset' pudieran NO ser
'actualizables'... 'bajo ciertas [y variadas] circunstancias' [hay
varias] :( 7) en tanto comentas detalles adicionales... revisa si te
sirve la informacion [que es mas que 'extensa'] del siguiente enlace:
-> http://tinyurl.com/ogybc

supongo que ya saldran mas detalles -?- los comentas ?
saludos,
hector.
==
Respuesta Responder a este mensaje
#3 Héctor Miguel
02/03/2006 - 08:55 | Informe spam
hola, Ch0rY !

1) el uso 'apropiado' al abrir un recordset [workspaces-ADO] ES: <objeto>.OpenRecordset(source, type, options, lockedits)
si el unico cambio que realizas en las siguientes 'llamadas' es la sentencia sql
el objeto recordset [workspaces-ADO] se esta abriendo con 'otros' parametros 'por omision'
lo que significa que se trata de un recordset de tipo [p.e.] forward-only, read-only, etc. etc. etc.
[a menos que en el 'encadenamiento' inicial estes proveyendo los argumentos 'faltantes'] -?-

2) [hablando de ADO]... no se si te resultaria mas 'conveniente' abrir una copia de la base de datos [en lugar de una 'conexion'] -?-
de -> Set conMiembros = wrkODBC.OpenConnection(...
a -> Set conMiembros = wrkODBC.OpenDataBase(...

3) 'se supone que'... las consultas por ODBC... NO tienen 'soporte' para los 'parametros nombrados' -?-
como los usas en la ultima linea de la construccion de tu cadena SQL...
-> SQL = SQL & " ORDER BY [Nombre] & ' ' & [Apellido1] & ' ' & [Apellido2]"

4) en el siguiente articulo, encontraras [mas que] 'suficiente' informacion al respecto...
-> http://support.microsoft.com/defaul...-us;164481
[te sugiero]... 'dale' una -buena- leida [hay mas detalles de los que puedo 'suponer' que pudieran ser 'aplicables' a tu caso] :))

5) otra -posible- alternativa pudiera ser 'cambiarte'... de DAO... -> a ADO [DAO es mas... 'antiguo'] :D
o... realizar consultas 'parametrizadas'... [directamente] en excel por [menu] datos / obtener datos externos...
podrias consultar informacion al respecto en las siguientes paginas [solo por mencionar algunas]...
-> http://www.rdg.ac.uk/ITS/info/train...cel/query/
-> Andy Wiggins: http://www.bygsoftware.com/Excel/sql.htm
-> Ole P. Erlandsen: http://www.erlandsendata.no/english...connstring
-> Carl Prothman: http://www.carlprothman.net/Default.aspx?tabid‡#OLEDBProviderForSQLServer
-> Dick Kusleika: http://www.dicks-clicks.com/excel/E...m#CreateUI

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.

* El unico cambio q realizo en los parametros es la sentensia SQL
* La apertura del recordset es tal y como muestro en e codigo
Dim wrkODBC As Workspace
Dim conMiembros As Connection
Dim rstMiembros As Recordset
Dim SQL As String
Set wrkODBC = CreateWorkspace("NuevoWorkspaceODBC", "", "", dbUseODBC)
Set conMiembros = wrkODBC.OpenConnection("conexion1", , , "ODBC;DSN=Agrupación;")
SQL = SQL & " FROM Miembros INNER JOIN Agrupación ON Miembros.DNI = Agrupación.DNI"
SQL = SQL & " WHERE (((Miembros.N_Situación) Like 1 Or (Miembros.N_Situación) = 2) And ((Agrupación.N_Indicativo) Like 0)) Or (((Agrupación.N_Indicativo) > 2))"
SQL = SQL & " ORDER BY [Nombre] & ' ' & [Apellido1] & ' ' & [Apellido2]"
Set rstMiembros = conMiembros.OpenRecordset(SQL)
* La base de datos es Access
* Y siempre Cierro workspaces, Conecction y recordsets y la vuelvo a abrir, para evitar problemas como se#alas.
* Por lo demas, en el codigo. solo se accede a los datos para leerlos, y presentarlos en la hoja, nada mas
dentro de un bucle do loop con stMiembros.movenext...
Respuesta Responder a este mensaje
#4 Ch0rY
07/03/2006 - 12:53 | Informe spam
En lugar de usar
if rstMiembros.recordcount
he usado
if not rstMiembros.EOF ...

y va perfecto

Muchas gracias x la ayuda q me has prestado
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida