SQL no funciona

06/09/2008 - 06:20 por Fabian | Informe spam
Hola a todos... Alguien me podria decir que hice mal en la primera
consulta, falla en la linea donde señalo. La segunda hace lo mismo.
y funciona bien. Quiero aprender el metodo de la primera, que fue
posteado hace unos dias. Gracias.

Sub TraerNumeroFactura()
Dim Cnn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim strSQL As String
Dim Ruta As String
Ruta = ThisWorkbook.Path
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\Base.mdb"
.Open
End With
strSQL = "SELECT MAX(NFactura) FROM Ventas"
Rst.Open Source:=strSQL, ActiveConnection:=Cnn,
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Cells(3, 22).Value = Rst!NFactura '>>>>FALLA EN ESTA LINEA
Cnn.Close
Set Cnn = Nothing
Set Rst = Nothing
End Sub

Sub TraerNumeroFactura()
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Ruta As String
Ruta = ThisWorkbook.Path
Set Cnn = New ADODB.Connection
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\Base.mdb"
.Open
End With
Set Rst = New ADODB.Recordset
Rst.Open "SELECT MAX(NFactura) FROM Ventas", Cnn, , , adCmdText
Hoja1.Cells(3, 22).CopyFromRecordset Rst
Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing
End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
07/09/2008 - 00:22 | Informe spam
hola, Fabian !

... que hice mal en la primera consulta, falla en la linea donde senalo.
La segunda hace lo mismo... y funciona bien
Quiero aprender el metodo de la primera, que fue posteado hace unos dias...



1) observa que en la primera forma, la cadena de consulta ya obtiene un "unico" registro de "la tabla":
-> strSQL = "SELECT MAX(NFactura) FROM Ventas"

2) este valor (unico) es asignado al objeto RecordSet, mismo que YA NO TIENE la misma "estructura" que la tabla:
-> Rst.Open Source:=strSQL, ActiveConnection:=Cnn... (etc. etc. etc.)

3) luego, el objeto (Rst) no contiene (los varios) campos entre los cuales puedas seleccionar alguno "en especifico"
(como cuando asignas varios campos/registros usando clausulas como "where", etc. etc. ec.)

-> cambia la instruccion de "devolucion" del Rst a la celda...
de: -> Cells(3, 22).Value = Rst!NFactura '>>>>FALLA EN ESTA LINEA
a: -> Cells(3, 22).Value = Rst.GetRows

saludos,
hector.

__ los codigos expuestos __
Sub TraerNumeroFactura()
Dim Cnn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim strSQL As String
Dim Ruta As String
Ruta = ThisWorkbook.Path
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\Base.mdb"
.Open
End With
strSQL = "SELECT MAX(NFactura) FROM Ventas"
Rst.Open Source:=strSQL, ActiveConnection:=Cnn, CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Cells(3, 22).Value = Rst!NFactura '>>>>FALLA EN ESTA LINEA
Cnn.Close
Set Cnn = Nothing
Set Rst = Nothing
End Sub

Sub TraerNumeroFactura()
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Ruta As String
Ruta = ThisWorkbook.Path
Set Cnn = New ADODB.Connection
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\Base.mdb"
.Open
End With
Set Rst = New ADODB.Recordset
Rst.Open "SELECT MAX(NFactura) FROM Ventas", Cnn, , , adCmdText
Hoja1.Cells(3, 22).CopyFromRecordset Rst
Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing
End Sub
Respuesta Responder a este mensaje
#2 Fabian
07/09/2008 - 08:40 | Informe spam
Bueno con tu ayuda y un poco de paciencia logré lo que queria.
Aunque en este caso estoy usando un solo campo del registro, tengo
otros, en los que me va a ser muy util llevar todos los campos a celdas
no continuas.
Tienes idea cuantos anidados soportan las consultas SQL...?
Saludos.Gracias.

Sub TraerNumeroFactura()
Dim Cnn As New ADODB.Connection
Dim Rst As New ADODB.Recordset
Dim strSQL As String
Dim Ruta As String
Ruta = ThisWorkbook.Path
With Cnn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.ConnectionString = "Data Source=" & Ruta & "\Base.mdb"
.Open
End With
strSQL = "SELECT * FROM Ventas WHERE NFactura=(SELECT
MAX(NFactura)FROM Ventas)"
Rst.Open Source:=strSQL, ActiveConnection:=Cnn,
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
Application.EnableEvents = False
Hoja1.Unprotect ""
Cells(3, 22).Value = Rst!NFactura
Application.EnableEvents = True
Hoja1.Protect ""
Cnn.Close
Set Cnn = Nothing
Set Rst = Nothing
End Sub
Respuesta Responder a este mensaje
#3 Héctor Miguel
07/09/2008 - 21:48 | Informe spam
hola, Fabian !

Aunque en este caso estoy usando un solo campo del registro
tengo otros, en los que me va a ser muy util llevar todos los campos a celdas no continuas.
Tienes idea cuantos anidados soportan las consultas SQL...?



no se a que te refieres con "anidados" -?-
si te refieres al numero de campos/columnas en la base de datos a la que consultas (seguramente)...
dependera del tipo de base de datos (p.e. una tabla de access admite hasta 255 campos, aun en la version 2007)

saludos,
hector.
Respuesta Responder a este mensaje
#4 Fabian
08/09/2008 - 03:01 | Informe spam
Héctor Miguel wrote:
hola, Fabian !

Aunque en este caso estoy usando un solo campo del registro
tengo otros, en los que me va a ser muy util llevar todos los campos a celdas no continuas.
Tienes idea cuantos anidados soportan las consultas SQL...?



no se a que te refieres con "anidados" -?-
si te refieres al numero de campos/columnas en la base de datos a la que consultas (seguramente)...
dependera del tipo de base de datos (p.e. una tabla de access admite hasta 255 campos, aun en la version 2007)

saludos,
hector.




Un select dentro de otro select! como la consulta que esta en el post.
Respuesta Responder a este mensaje
#5 Héctor Miguel
08/09/2008 - 04:01 | Informe spam
hola, Fabian !

Un select dentro de otro select! como la consulta que esta en el post.



puedes exponer un ejemplo mas concreto de como seria tu consulta de un select "dentro" de otro select ?
que no pudieras resolver utilizando un solo select combinado con "where", "and", etc. etc. etc. -?-

saludos,
hector.

__ OP __
Aunque en este caso estoy usando un solo campo del registro
tengo otros, en los que me va a ser muy util llevar todos los campos a celdas no continuas.
Tienes idea cuantos anidados soportan las consultas SQL...?



no se a que te refieres con "anidados" -?-
si te refieres al numero de campos/columnas en la base de datos a la que consultas (seguramente)...
dependera del tipo de base de datos (p.e. una tabla de access admite hasta 255 campos, aun en la version 2007)
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida