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

#6 Fabian
08/09/2008 - 04:14 | Informe spam
Perdon me equivoque! era una consulta dentro de un WHERE (un select
dentro de un where.
Respuesta Responder a este mensaje
#7 Héctor Miguel
08/09/2008 - 04:22 | Informe spam
hola, Fabian !

Perdon me equivoque! era una consulta dentro de un WHERE (un select dentro de un where.



(creo que) sigue siendo +/- lo mismo (te cambio tambien la re/pregunta)...

puedes exponer un ejemplo mas concreto de como seria tu consulta "dentro" de otra consultta ?
que no pudieras resolver con una sola consulta combinada con "where", "and", etc. etc. etc. -?-

saludos,
hector.
Respuesta Responder a este mensaje
#8 Fabian
08/09/2008 - 10:40 | Informe spam
strSQL = "SELECT * FROM Ventas WHERE NFactura=(SELECT MAX(NFactura)FROM
Ventas)"
Como hice esto se me ocurrio que podia haber mas,.. y algo encontre,
pero a mi todavia no se me ocurrio nada Disculpame por no ser claro
con la pregunta...
http://www.aulaclic.es/sql/t_5_1.htm


Aprovecho para consultarte otro codigo gracias


Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Ruta As String
Dim Inicio As Long
Dim Final As Long
Dim Fila As Long
Hoja2.Range("a3:g65536").Clear

Ruta = ThisWorkbook.Path
Inicio = Cells(1, 4)
Final = Cells(1, 6)

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 1,Fecha,Nombre,Subtotal,IVA,Total " & _
"FROM Ventas " & _
"WHERE CLng([Fecha]) " & _
"BETWEEN '" & Inicio & "' AND '" & Final & "'", Cnn, , , adCmdText
Cells(3, 1).CopyFromRecordset Rst
Rst.Close: Set Rst = Nothing
Set Rst = New ADODB.Recordset
Rst.Open "SELECT SUM(Subtotal),SUM(IVA),SUM(Total),COUNT(NFactura) AS
Fila " & _
"FROM Ventas " & _
"WHERE CLng([Fecha]) " & _
"BETWEEN '" & Inicio & "' AND '" & Final & "'", Cnn, , , adCmdText
Fila = Rst.Fields("Fila").Value
Cells(Fila + 3, 4).CopyFromRecordset Rst
Cells(Fila + 3, 7).ClearContents
Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing
End Sub

Esta consulta funciona, pero quiero saber si se pueden ubicar los
totales al final del listado sin hacer la segunda consulta.O sea si hay
forma de obtener el mismo resultado con una sola consulta. Gracias.
Respuesta Responder a este mensaje
#9 Héctor Miguel
08/09/2008 - 19:39 | Informe spam
hola, Fabian !

strSQL = "SELECT * FROM Ventas WHERE NFactura=(SELECT MAX(NFactura)FROM Ventas)"
Como hice esto se me ocurrio que podia haber mas,.. y algo encontre, pero a mi todavia no se me ocurrio nada...
http://www.aulaclic.es/sql/t_5_1.htm



bueno... esta parte ya sabes de donde obtener la informacion necesaria (gracias por compartirla) :D

Aprovecho para consultarte otro codigo
Esta consulta funciona, pero quiero saber si se pueden ubicar los totales al final del listado
sin hacer la segunda consulta.O sea si hay forma de obtener el mismo resultado con una sola consulta.



no estoy seguro de que sea necesario repetir una segunda vez la misma consulta (solo) para obtener totales -?-

si necesitas conocer el numero de registros de una consulta previo al volcado de sus datos...
puedes contar el numero de registros con las propiedades:
<variableRecordSet>.RecordCount (el numero de registros devueltos por la consulta)
<variableRecordSet>.Fields.Count (el numero de campos/columnas de la consulta)

o sea, una vez obtenido el primer recordset, puedes asignar a la variable: -> Fila = Rst.RecordCount
y despues, simplemente "sumas" los datos ya volcados a la hoja de calculo

si cualquier duda (o informacion adicional)... comentas ?
saludos,
hector.

__ el codigo expuesto __
Dim Cnn As ADODB.Connection
Dim Rst As ADODB.Recordset
Dim Ruta As String
Dim Inicio As Long
Dim Final As Long
Dim Fila As Long
Hoja2.Range("a3:g65536").Clear
Ruta = ThisWorkbook.Path
Inicio = Cells(1, 4)
Final = Cells(1, 6)
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 1,Fecha,Nombre,Subtotal,IVA,Total " & _
"FROM Ventas " & _
"WHERE CLng([Fecha]) " & _
"BETWEEN '" & Inicio & "' AND '" & Final & "'", Cnn, , , adCmdText
Cells(3, 1).CopyFromRecordset Rst
Rst.Close: Set Rst = Nothing
Set Rst = New ADODB.Recordset
Rst.Open "SELECT SUM(Subtotal),SUM(IVA),SUM(Total),COUNT(NFactura) AS Fila " & _
"FROM Ventas " & _
"WHERE CLng([Fecha]) " & _
"BETWEEN '" & Inicio & "' AND '" & Final & "'", Cnn, , , adCmdText
Fila = Rst.Fields("Fila").Value
Cells(Fila + 3, 4).CopyFromRecordset Rst
Cells(Fila + 3, 7).ClearContents
Rst.Close: Set Rst = Nothing
Cnn.Close: Set Cnn = Nothing
End Sub
Respuesta Responder a este mensaje
#10 Fabian
09/09/2008 - 00:51 | Informe spam
Creo que llegue a la perfeccion! ja!
Me tope con un problemita... el recordcount no superaba el -1 hice
una busqueda con google y encontre no menos de diez consultas similares,
hasta que alguien que no tocaba de oido tenia la respuesta correcta!
Gracias a todos los que estudian!

http://tinyurl.com/5t53g7
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente AnteriorRespuesta Tengo una respuesta
Search Busqueda sugerida