Suma con sql

12/04/2006 - 00:17 por Fabian | Informe spam
Hola a todos!
Auxilio, una manito con este codigo, solo necesito en label1 la suma del
campo importe de la base de access. El codigo lo ejecuto desde excel, los
registros no es necesario que los vea, gracias por adelantado.

Private Sub ConsultarImporte() 'SQL ADO
Dim Ruta As String
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Fecha As Date
Ruta = ThisWorkbook.Path
Fecha = Hoja1.[d2]
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 SUM(Importe) AS Total FROM Viajes WHERE [FECHA VIAJE] >= '"
& Fecha & "'", cnn, , , adCmdText
userform1.label1 = rst.Source
rst.Close
cnn.Close
End Sub

Preguntas similare

Leer las respuestas

#1 Héctor Miguel
12/04/2006 - 09:52 | Informe spam
hola, Fabian !

... solo necesito en label1 la suma del campo importe de la base de access.
El codigo lo ejecuto desde excel, los registros no es necesario que los vea [...]



[solo] comentarios acerca de [posibles] situaciones 'de error' en el codigo que expones...

1) la asignacion del valor en el label1 del formulario [al final de cuentas] tienes que establecerla +/- como sigue:
Userform1.Label1 = rst.Fields("Total").Value

2) ANTES... si la tabla que estas consultando en la '.mdb' se llama 'Viajes'... [probablemente]...
sera necesario 'completar' su referencia en la fucion suma de la instruccion 'select' [+/- como sigue]...
rst.Open "SELECT SUM(Viajes.Importe) AS Total FROM .. etc.

3) ANTES... si la variable 'Fecha' la estas 'tomando/asignando/...' DIRECTAMENTE de la celda 'D2' de la 'Hoja1' <= CodeName
a) considera que VBA ES US-Centric [por lo tanto]... las fechas SON en formato mm/dd/aaaa
b) podria haber 'incompatibilidades' con el formato [orden] de fechas de la configuracion regional del equipo donde se ejecute la macro -?-
c) [tambien] es necesario 'conocer' [+/- exactamente] 'como' y cual es el tipo de datos [y orden de fechas] del campo [FECHA VIAJE] en la .mdb
es decir... como 'espera' dicho campo [en la base de datos]... que le 'preguntes' las fechas para efectuar el 'filtrado' :))
[p.e. "dd/mm/aaaa hh:mm:ss am/pm" ?... es campo de fechas ?... es campo de texto ?... ???]

es probable que intervengan otros -posibles- 'factores'... asi que...
comentas [si hubiera] algun detalle adicional ?
saludos,
hector.

___ el codigo expuesto ___
Private Sub ConsultarImporte() 'SQL ADO
Dim Ruta As String
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Fecha As Date
Ruta = ThisWorkbook.Path
Fecha = Hoja1.[d2]
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 SUM(Importe) AS Total FROM Viajes WHERE [FECHA VIAJE] >= '" & Fecha & "'", cnn, , , adCmdText
userform1.label1 = rst.Source
rst.Close
cnn.Close
End Sub
Respuesta Responder a este mensaje
#2 Fabian
12/04/2006 - 21:52 | Informe spam
Gracias por la solucion!
El codigo funciona perfecto sin la clausula where, no soy capaz de hacer
coincidir los tipos de datos, ese es el error que obtengo, no pude hallar
la forma de cambiar el formato de fecha, cientos de pruebas hice, asi que
auxilio otra vez! Te paso todos los datos:
Access en Vista Hoja Datos dd/mm/yyyy - Vista Diseño Fecha/Hora
Ahora la fecha en cuestion esta en la hoja de codigo, no en la planilla.

Private Sub ConsultarImporte() 'SQL ADO
Dim Ruta As String
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Fecha As Date
Ruta = ThisWorkbook.Path
Fecha = Date$
Fecha = "12/31/2005 00:00:00 am"
Fecha = Format(Fecha, "mm/dd/yyyy 00:00:00 am/pm")
Load UserForm1
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 SUM(Viajes.Importe) AS Total FROM Viajes WHERE
Viajes.[Fecha Viaje] >'" & Fecha & "'", cnn, , , adCmdText
UserForm1.Label1 = rst.Fields("Total").Value
UserForm1.Show
rst.Close
cnn.Close
End Sub
Respuesta Responder a este mensaje
#3 Héctor Miguel
13/04/2006 - 02:27 | Informe spam
hola, Fabian !

El codigo funciona perfecto sin la clausula where, no soy capaz de hacer coincidir los tipos de datos
ese es el error que obtengo, no pude hallar la forma de cambiar el formato de fecha, cientos de pruebas hice
asi que auxilio otra vez! Te paso todos los datos:
Access en Vista Hoja Datos dd/mm/yyyy - Vista Dise#o Fecha/Hora
Ahora la fecha en cuestion esta en la hoja de codigo, no en la planilla. [...]



1) asumo [por los formatos que presenta acces en sus vistas] que en la BBDD se trata de 'datos fecha' ;)
2) [como te comentaba] 'trabajar' con fechas [en vb] presenta algunas 'visicitudes' [como las configuraciones regionales] :-((
3) [hasta donde se]... la 'mejor' forma de -tratar de- 'evitar errores' [hablando de fechas en vba] es 'convertirlas' a un tipo de datos Long ;)
4) [por lo anterior]... no funcionara [de manera 'transparente'] si 'juegas' con otro tipo de datos [me explico]...
a) declaras la variable [Fecha] como un tipo de datos 'Date' [PERO]...
b) la 'asignas' como un tipo de datos 'String':
Fecha = Date$
Fecha = "12/31/2005 00:00:00 am"
Fecha = Format(Fecha, "mm/dd/yyyy 00:00:00 am/pm")



[finalmente] suponiendo que [de nuevo] EN la celda 'D2' de la 'Hoja1' <= CodeName pones un dato-fecha...
prueba con las siguientes adaptaciones a los codigos expuestos ;)

si cualquier duda [o informacion adicional]... comentas ?
saludos,
hector.
=Sub ConsultarImporte() 'SQL ADO
Dim Ruta As String, cnn As ADODB.Connection, rst As ADODB.Recordset, Fecha As Long
Ruta = ThisWorkbook.Path
Fecha = CLng(Hoja1.[d2])
Load UserForm1
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 Sum(Viajes.Importe) As Total From Viajes Where CLng(Viajes.[Fecha Viaje]) >'" & Fecha & "'", cnn, , , adCmdText
UserForm1.Label1 = rst.Fields("Total").Value
UserForm1.Show
rst.Close: Set rst = Nothing
cnn.Close: Set cnn = Nothing
End Sub

___ el codigo modificado expuesto ___
Private Sub ConsultarImporte() 'SQL ADO
Dim Ruta As String
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim Fecha As Date
Ruta = ThisWorkbook.Path
Fecha = Date$
Fecha = "12/31/2005 00:00:00 am"
Fecha = Format(Fecha, "mm/dd/yyyy 00:00:00 am/pm")
Load UserForm1
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 SUM(Viajes.Importe) AS Total FROM Viajes WHERE Viajes.[Fecha Viaje] >'" & Fecha & "'", cnn, , , adCmdText
UserForm1.Label1 = rst.Fields("Total").Value
UserForm1.Show
rst.Close
cnn.Close
End Sub
Respuesta Responder a este mensaje
#4 Fabian
13/04/2006 - 04:21 | Informe spam
Gracias, funciona perfecto, no tenia presente que podia cambiar el tipo de
datos en la busqueda.
Con respecto al cambio de datos de Fecha, la intencion no era esa.
Tengo presente que un signo $ determina un dato string en una variable.
La intencion era cambiar el orden de dia y mes. Evidentemente solo es para
la fecha del dia.
Fecha=Date$ devuelve 04/12/2006
Fecha=Date devuelve 12/04/2006
Gracias otra vez, sos un maestro!!!
Saludos!!!
Respuesta Responder a este mensaje
#5 Fabian
14/04/2006 - 18:42 | Informe spam
Una consulta mas, se puede volcar la consulta en un ListBox, DBlist o
DataList?
Saludos! y gracias.
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida