Visual Basic - sobre consulta sql en base de datos ado

Life is soft - evento anual de software empresarial
 
Vista:
sin imagen de perfil

sobre consulta sql en base de datos ado

Publicado por Josbel Gonzalez (32 intervenciones) el 24/06/2009 20:04:30
Buenas a todo amigos, gracias por tomarse su tiempo para leer esta consulta; bien tengo una aplicacion desarrollada en Vb6 con base de datos access conectada por ado; bien en una de los formularios quiero, tipo reporte, mostrar la cantidad de registros de una determinada tabla: por ejemplo cuantos clientes han sido atendidos hasta la fecha, bien el codigo es este

mi modulo, para inicializar la base de datos access

Option Explicit

Public cnn As New ADODB.Connection

Public Sub IniciarConexion()

With cnn
.CursorLocation = adUseClient
.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & "\ServertecBDRECEPCION.mdb" & ";Persist Security Info=False"
End With

End Sub

bien dentro de un formulario llamado reporte tengo esto:

Private Sub Form_Load()

Label2.Caption = TASIGNACION.RecordCount & " CLIENTES ATENDIDOS AL " & Date

End Sub

esto me muestra el total de registros de la tabla tasignacion bien, hasta ahora bien
mi problema esta en cuando quiero mostrar la cantidad de clientes que fueron atendidos en determinada fecha por ejemplo la fecha actual y uso este codigo:

Label3.Caption = cnn.Execute("SELECT COUNT(*) AS CUENTA FROM ASIGNACION WHERE FECHAREGISTRO ='" & Date)

Supuestamente, esto deberia segun mi teoria jajaja mostrarme la cantidad en numero de registros del dia de hoy, por ejemplo; `pero al ejecutarlo me genera un error:

"no coinciden los tipos"

que puedo estar realizando mal? sera que mi consulta no es la correcta?; de verdad les agradesco cualquier ayuda o consejo que puedan prestarme bien recibido sera, gracias antes que nada.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:sobre consulta sql en base de datos ado

Publicado por Jaime Guerrero (361 intervenciones) el 24/06/2009 21:41:23
prueba de la siguiente manera

Label3.Caption = cnn.Execute("SELECT COUNT(*) AS CUENTA FROM ASIGNACION WHERE FECHAREGISTRO =#" & Date & "#")

Access utiliza el # para los comparativos de fechas. Esto lo puedes comproban creando una consulta en la base de datos access, y en vez de ejecutarla marcas el boton sql, y te mostrará la instruccion sql que usa el access.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:sobre consulta sql en base de datos ado

Publicado por Josbel Gonzalez (32 intervenciones) el 25/06/2009 18:26:24
Gracias de verdad por tu ayuda Jaime, probe segun me dijiste y aun mantiene el mismo error cuando lo ejecuto y llamo al formulario de reporte me muestra

"no coinciden los tipos"

y para la ejecucion de la aplicacion.

segun tengo en mis poco conocimientos podria ser por el tipo de campos que estoy manejando si es texto o numerico pero todos me coinciden en que es texto.

que otra alternativa podria manejar?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Usa un recordset

Publicado por Quique (51 intervenciones) el 25/06/2009 19:10:43
Claro que te va a dar error, porque el resultado de tu Execute no se puede asignar a Label como lo estás haciendo, se debe asignar a un recordset (es algo que no notó Jaime).
Debes tener declarada una variable u objeto recordset (supongamos que se llame rst) y haces esto:

Set rst = cnn.Execute("SELECT COUNT(*) AS CUENTA FROM ASIGNACION WHERE FECHAREGISTRO =#" & Date & "#")

después lo asignas al Label, desde el recordset:

Label3.Caption = rst.Fields(0)

Ojalá te sirva
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Usa un recordset

Publicado por jaime guerrero (361 intervenciones) el 25/06/2009 19:27:27
jajajajaja que burrro que soy. no me di cuenta que estava usando la conexcion para pasarle al info al label. solo me percate de la forma como maneja la fecha :P

lo que te dice Quique esta bien (no la he probado, es cuestion que la pruebes :)).

otra forma seria

dim rs as adodb.recordset

cnn.open

set rs=new adodb.recordset

With rs
.CursorLocation = adUseClient
.CursorType = adOpenStatic
.LockType = adLockOptimistic
End With

rs.open "SELECT COUNT(*) AS CUENTA FROM ASIGNACION WHERE FECHAREGISTRO =#" & Date & "#", cnn

if rs.eof =false then
Label3.Caption = rst.Fields(0)
end if

'si ya no vas a realizar ninguna otra accion pones

rs.close
set rs=nothing
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Usa un recordset

Publicado por Josbel Gonzalez (32 intervenciones) el 27/06/2009 17:04:05
Gracias Jaime gracias Quique de verdad me ayudaron mucho me soluciono perfecto realiza la cuenta de registros coincidentes y me muestra el total, y si yo quiero realizar lo mismo pero por persona que atiende? es decir:

Set RST = cnn.Execute("SELECT COUNT(*) FROM ASIGNACION WHERE TECNICOASIG =" & COMBO)

Label5.Caption = RST.Fields(0) & " CLIENTES ATENDIDOS "

esto lo hago en un evento click que luego de seleccionar el nombre del tecnico de atencion pues cuente la cantidad de clientes que atendio dicho tecnico lo intento con ese codigo y me muestra el siguiente error:

"error de sintaxis (falta operador) en la expresion de consulta"

disculpen de verdad espero no estar abusando de la confianza, en que portal web me recomienda para estudiar las instrucciones sql que por que lo que veo me falta mucho por aprender
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Usa un recordset

Publicado por jaime guerrero (361 intervenciones) el 30/06/2009 17:33:55
en cual de las dos lineas te sale el error????
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

RE:Usa un recordset

Publicado por Josbel Gonzalez (32 intervenciones) el 01/07/2009 01:13:17
Justo en la linea de la consulta:

Private Sub BCONSULTA_Click()

Set RST2 = cnn.Execute("SELECT COUNT(*) FROM ASIGNACION WHERE TECNICOASIG =" & COMBO) - en esta linea es que me general el error -

Label5.Caption = RST2.Fields(1) & " CLIENTES ATENDIDOS "

End Sub

y el error menciona esto:

ERROR DE SINTAXIS (FALTA OPERADOR) EN LA EXPRESION DE CONSULTA
'TECNICOASIG=JOSBEL GONZALEZ'.

por decir que en el combo yo seleccione JOSBEL GONZALEZ.

y nada que ver.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Te faltan comillas

Publicado por Quique (1 intervención) el 01/07/2009 16:37:38
Es que si el dato que estás comparando es de tipo cadena te faltó encerrarlo entre comillas simples o apóstrofes:
Set RST2 = cnn.Execute("SELECT COUNT(*) FROM ASIGNACION WHERE TECNICOASIG ='" & COMBO & "'")
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar