Consulta SQL

15/05/2006 - 22:07 por Fabian | Informe spam
Hola a todos!
Estoy tratando de hacer una consulta "Existe" "No Exixte" o "Verdadero"
"Falso"
En la base de datos tengo un campo NRegistro que NO es el numero de
registro que le asigna la base de access.
Este numero me sirve para encontrar registros, y hacerles cambios a los
campos.
Necesitaria buscar un numero determinado de registro (Reg) y que me devuelva
si existe o no existe, luego asi:
El codigo que escribi ya falla en la consulta. Gracias.
Si no existe el numero entonces
Ir a rutina de carga
Sino
Ir a rutina de actualizacion
Fin

Private Sub Test()
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Reg As Long
Dim Ruta As String
Dim Existe as Boolean
Reg = Hoja1.Cells(ActiveCell.Row, 13)
Ruta = ThisWorkbook.Path

Set Cnn = New ADODB.Connection
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\BaseViajes.mdb"
.Open
End With
Set Rst = New ADODB.Recordset
Rst.Open "SELECT NRegistro FROM Viajes WHERE NRegistro = '" & Reg & "'",
Cnn, , , adCmdText

'El campo NRegistro es Long en la base de datos.

if Rst="" then Existe=False: Else Existe=True

End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
16/05/2006 - 10:45 | Informe spam
hola, Fabian !

comentas que el codigo que usas... 'ya falla en la consulta' [pero no indicas que error obtienes] -?-
prueba despues de abrir la BD, ejecutar la consulta y establecer tu recordset...
a devolver tu variable 'Existe As Boolean' con algo +/- como lo siguiente:

Existe = Rst.RecordCount > 0

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

__ la consulta original __
Estoy tratando de hacer una consulta "Existe" "No Exixte" o "Verdadero" "Falso"
En la base de datos tengo un campo NRegistro que NO es el numero de registro que le asigna la base de access.
Este numero me sirve para encontrar registros, y hacerles cambios a los campos.
Necesitaria buscar un numero determinado de registro (Reg) y que me devuelva si existe o no existe, luego asi:
El codigo que escribi ya falla en la consulta.
Si no existe el numero entonces
Ir a rutina de carga
Sino
Ir a rutina de actualizacion
Fin
Private Sub Test()
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Reg As Long
Dim Ruta As String
Dim Existe as Boolean
Reg = Hoja1.Cells(ActiveCell.Row, 13)
Ruta = ThisWorkbook.Path
Set Cnn = New ADODB.Connection
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\BaseViajes.mdb"
.Open
End With
Set Rst = New ADODB.Recordset
Rst.Open "SELECT NRegistro FROM Viajes WHERE NRegistro = '" & Reg & "'",
Cnn, , , adCmdText
'El campo NRegistro es Long en la base de datos.
if Rst="" then Existe=False: Else Existe=True
End Sub
Respuesta Responder a este mensaje
#2 Fabian
16/05/2006 - 16:59 | Informe spam
Hola Hector!
Gracias por la respuesta.
El error de la consulta ya lo encontré... puse un par de comillas de más.
Con respecto a "Existe = Rst.RecordCount > 0" , te comento que... encuentre
0 registros, o 1 registro el valor sigue siendo -1 (menos uno), puede ser
esto, o estoy produciendo un error que no veo?
Te transcribo el código en cuestión.

Private Sub Test()
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Reg As Long
Dim Ruta As String
Reg = Hoja1.Cells(ActiveCell.Row, 13)
Ruta = ThisWorkbook.Path

Set Cnn = New ADODB.Connection
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\BaseViajes.mdb"
.Open
End With

Set Rst = New ADODB.Recordset
Rst.Open "SELECT Titular FROM Viajes WHERE NRegistro = " & Reg & "", Cnn, ,
, adCmdText

If Rst.RecordCount > 0 Then
'Rutina de actualización
Else
'Rutina de carga
End If
End Sub
Respuesta Responder a este mensaje
#3 Fabian
16/05/2006 - 23:29 | Informe spam
Encontre esto en la ayuda RecordCount(Propiedad)
Cuando trabaja con objetos TableDef vinculados, el valor de la propiedad
RecordCount es siempre -1.
tabla vinculada
Tabla de otra base de datos vinculada a una base de datos Microsoft Jet .
Los datos de las tablas adjuntas permanecen en la base de datos externa,
donde pueden ser manipulados por otras aplicaciones. (También conocida como
tabla vinculada)
Respuesta Responder a este mensaje
#4 Fabian
17/05/2006 - 00:26 | Informe spam
Ya lo resolvi, mejor dicho encontre una consulta similar. Falta el cursor en
la consulta, si pudieras explicarme como funciona? Gracias.
Rst.Open "SELECT Titular FROM Viajes WHERE NRegistro = " & Reg & "", Cnn,
adOpenKeyset, , adCmdText
Respuesta Responder a este mensaje
#5 Héctor Miguel
17/05/2006 - 01:13 | Informe spam
hola, Fabian !

... encontre una consulta similar. Falta el cursor en la consulta, si pudieras explicarme como funciona?
Rst.Open "SELECT Titular FROM Viajes WHERE NRegistro = " & Reg & "", Cnn, adOpenKeyset, , adCmdText



1) la solucion que le provees al codigo tiene su explicacion a la falla en: -> http://tinyurl.com/mgpv8
[desde ahi podras navegar hacia otros 'horizontes' dentro de ADO] :)

2) otra posibilidad, es que pudiera tratarse de 'formas de abrir' un recordset 'por omision' como de tipo 'dynaset' que
NO permiten la 'lectura' de un 'RecorCount' [DAO] hasta que se haya 'leido' el ultimo registro con un 'MoveLast' :)
y [algunas veces] se necesita CERRAR el recordset [y la base de datos] despues de haber 'terminado de trabajar' con el
[p.e.] los recordsets del tipo 'dynaset' pudieran NO ser 'actualizables'... 'bajo ciertas [y variadas] circunstancias' [hay varias] :(
encontraras mas fuentes de informacion, [que es mas que 'extensa'] en el siguiente enlace: -> http://tinyurl.com/ogybc

3) otra alternativa pudiera ser agregar el tipo de cursor al abrir la base de datos previa a la apertura del recordset [p.e.]
<aqui tu conexion>.CursorLocation = adUseClient

la informacion disponible es mucho mas amplia para poder expresar sus -posibles- implicaciones en un solo correo :(

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida