Programación General > Visual Basic 6.0 e inferiores

 Error De Tipos

(1/2) > >>

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

[0] Índice de Mensajes

[#] Página Siguiente

Ir a la versión completa