Programación General > Visual Basic 6.0 e inferiores
Error De Tipos
DiabloRojo:
Qué tal amigos del foro?
Soy novatillo en la programación de bases de datos y ADO así que para practicar un poco decidí crearme, en access, una base de datos super simple de una sola tabla. Dicha tabla contiene 3 campos: cedula,nombre y fechanac cuyos tipos son texto, texto y fecha/hora respectivamente. El campo fechanac tiene un formato fecha corta del tipo 19/06/1994.
Para trabajar sobre la base de datos uso una referencia a ADO 2.0 y utilizo los tres objetos disponibles, es decir, un objeto conexion, un objeto command y un objeto recorset.
Ahora bien lo que deseo hacer es que el usuario pueda colocar dos fechas y que se devuelva en el recorset todas las fechas que estén dentro de dicho intervalo. Uso un código similar a este:
--- Código: Text --- 'En la parte de declaracione generalesDim cnnMiCon As ADODB.ConnectionDim cmdCriterio As ADODB.CommandDim rstTabla As ADODB.Recordset''''En el botón de búsquedaPrivate Sub Buscar() Dim inicial As Date Dim final As Date ' If txtFechaInicial.Text <> "" And txtFechaFinal.Text <> "" Then ' Set rstTabla = Nothing Set cmdCriterio = Nothing Set cnnMiCon = Nothing ' inicial = txtFechaInicial.Text final = txtFechaFinal.Text ' Set cnnMiCon = New ADODB.Connection Set cmdCriterio = New ADODB.Command Set rstTabla = New ADODB.Recordset ' cnnMiCon.ConnectionString = "Provider=Microsoft.Jet.OLEDB.3.51;Persist Security Info=False;Data Source=C:\WINDOWS\Escritorio\ProyectoFechas\fechas97_1.mdb" cnnMiCon.Open ' cmdCriterio.CommandText = "SELECT cedula,nombre,fechaNac FROM tabla1 WHERE fechaNac>'" & inicial & "'" And fechaNac < "'" & final & "'" ' rstTabla.Open cmdCriterio.CommandText, cnnMiCon, adOpenDynamic ' rstTabla.MoveFirst txtCedula = rstTabla.Fields("cedula").Value txtNombre = rstTabla.Fields("nombre").Value txtFecha = rstTabla.Fields("fechaNac").Value End IfEnd Sub
Ahora bien, cuando corro el programa introduzco las fechas y pulso el botón buscar obtengo el error 13 "No coinciden los tipos" en la línea:
--- Código: Text --- cmdCriterio.CommandText = "SELECT cedula,nombre,fechaNac FROM tabla1 WHERE fechaNac>'" & inicial & "'" And fechaNac < "'" & final & "'"
Si coloco directamente en el código por ejemplo:
--- Código: Text --- cmdCriterio.CommandText = "SELECT cedula,nombre,fechaNac FROM tabla1 WHERE fechaNac > #1/1/1960# AND fechaNac < #1/1/1991#"
No obtengo ningún error.
Necesito dos cosas:
1.- Estoy implementando bien el código para trabajar con ADO?
2.- Cómo corrijo el error de tipos?
De antemano muchas gracias por la ayuda.
DiabloRojo
Kev:
Para corregir este error deberas validar el ingreso de datos, para esto puedes usar la funcion IsDate()
--- Código: Text --- If IsDate(Text1.Text) Then 'Aca colocas tus instrucciones o la consulta SQLEnd If
IsDate te devuelve un valor Booleano, true o false
Salu2
DiabloRojo:
Qué tal Kev?
Gracias por responder. Hago lo que me dices y me sigue mostrando el mismo error. Incluso he añadido la función CDate() a las líneas:
--- Código: Text --- inicial=CDate(txtFechaInicial.text) final=CDate(txtFechaFinal.text)
Y me muestra el mismo error.
Añadí un control ADODC y un MSHFlexGrid para ver todos los registros y me doy cuenta que a pesar de haber colocado el campo fechanac de tipo fecha/hora en formato dd/mm/yyyy (fecha corta) los registros aparecen con el formato mm/dd/yyyy ¿tendrá esto que ver con la aparición del error?.
Agradezco toda ayuda.
DiabloRojo
cpmario:
El error 13 se debe a que estás intentando hacer una búsqueda de fecha como String, con comillas simples, sustituye las comillas simples por el signo de número como sigue:
--- Código: Text ---cmdCriterio.CommandText = "SELECT cedula,nombre,fechaNac FROM tabla1 WHERE fechaNac>#" & inicial & "#" And fechaNac < "#" & final & "#" El formato de fecha para hacer la búsqueda debe ser mm/dd/yyyy o no funcionará.
:)
---------------------
"Corrector Ortográfico de Notas", freeware, utilidad para programadores.
Programado en VB6, con diccionario propio.
http://consultapractica.aztecaonline.net/index2.html
DiabloRojo:
Qué tal cpmario?
Gracias por contestar. Ya resolví el problema y venía a contestar cuando ví tu respuesta. La solución es la siguiente:
--- Código: Text --- Dim inicial As String Dim final As String inicial= "#" & txtFechaInicial.Text & "#" final= "#" & txtFechafinal & "#" cmdCriterio.CommandText="SELECT cedula,nombre,fechaNac FROM tabla1 WHERE fechaNac> " & inicial & " And fechaNac < " & final
Según entiendo, las variables "inicial" y "final" NO tienen que ser de tipo Date ya que la propiedad CommandText es precisamente una cadena de caracteres (esto explica el error de tipos). Luego cuando se abre el recorset (con Open) ADO se encarga de convertir lo que contenga esta cadena -si es el caso- en una instruccuón SQL.
Bueno, eso era todo. Gracias a todos los que respondieron y a los que se tomaron el tiempo de leer mi duda.
Suerte.
DiabloRojo
Navegación
[#] Página Siguiente
Ir a la versión completa