Domingo 22 de Diciembre de 2024, 13:36
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Error De Tipos
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Error De Tipos (Leído 4043 veces)
DiabloRojo
Miembro MUY activo
Mensajes: 220
Error De Tipos
«
en:
Miércoles 8 de Septiembre de 2004, 18:07 »
0
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 generales
Dim cnnMiCon As ADODB.Connection
Dim cmdCriterio As ADODB.Command
Dim rstTabla As ADODB.Recordset
'
'
'
'En el botón de búsqueda
Private 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 If
End 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
Tweet
Kev
Miembro HIPER activo
Mensajes: 654
Re: Error De Tipos
«
Respuesta #1 en:
Miércoles 8 de Septiembre de 2004, 23:28 »
0
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 SQL
End If
IsDate te devuelve un valor Booleano, true o false
Salu2
La teoria es asesinada tarde o temprano por la experiencia
Albert Einstein
Kev - 3 DCE
-----------------------------------------------------
Articulos:
Convertir texto a imagen en ASP.NET
Trabajando con el Global.asax
DiabloRojo
Miembro MUY activo
Mensajes: 220
Re: Error De Tipos
«
Respuesta #2 en:
Jueves 9 de Septiembre de 2004, 02:15 »
0
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
Miembro HIPER activo
Mensajes: 629
Re: Error De Tipos
«
Respuesta #3 en:
Jueves 9 de Septiembre de 2004, 05:40 »
0
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
Miembro MUY activo
Mensajes: 220
Re: Error De Tipos
«
Respuesta #4 en:
Jueves 9 de Septiembre de 2004, 21:02 »
0
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
Kev
Miembro HIPER activo
Mensajes: 654
Re: Error De Tipos
«
Respuesta #5 en:
Jueves 9 de Septiembre de 2004, 21:57 »
0
Tienes razon, pero yo te aconsejaba el uso de IsDate solo para validar no para convertir a formato fecha, como ya te indique IsDate te devuelve true o false
Ej:
Código: Text
Dim Fecha1 As String
Dim Fecha2 As String
Dim Fecha3 As String
Dim Resultado As Boolean
Fecha1="November 26, 1981"
Fecha2=#11/26/81#
Fecha3="Cualquier cosa"
Resultado = IsDate(Fecha1) 'Devuelve True
If Resultado Then
'Aca colocas tus instrucciones a realizar si la fecha introducida seria valida
End If
Resultado = IsDate(Fecha2) 'Devuelve True
Resultado = IsDate(Fecha3) 'Devuelve False
Nota.- El formato de la fecha depende de la configuracion regional, en este ejemplo el idioma es Ingles, y en este formato se coloca primero el mes.
Salu2
La teoria es asesinada tarde o temprano por la experiencia
Albert Einstein
Kev - 3 DCE
-----------------------------------------------------
Articulos:
Convertir texto a imagen en ASP.NET
Trabajando con el Global.asax
DiabloRojo
Miembro MUY activo
Mensajes: 220
Re: Error De Tipos
«
Respuesta #6 en:
Viernes 10 de Septiembre de 2004, 02:20 »
0
Hola Kev.
Te agradezco la recomendación de validar las entradas. Como solo estoy practicando y soy el único que utilizará la aplicación no consideré necesario incluir validaciones. Lo que sí me extraña es que me esté me guardando con el formato mm/dd/yyyy siendo que mi computador está configurado al español. Por cierto, hay alguna forma de que aparezca en mi MSHFlexGrid el campo con el formato dd/mm/yyyy aunque en la tabla esté almacenado como mm/dd/yyyy?.
Bueno, muchas gracias por los comentarios y consejos.
DiabloRojo
Kev
Miembro HIPER activo
Mensajes: 654
Re: Error De Tipos
«
Respuesta #7 en:
Viernes 10 de Septiembre de 2004, 16:00 »
0
Intenta con esto:
Código: Text
FlexGrid.TextMatrix(i,j) = format (Tufecha,"dd/mm/yyyy")
Nota.- TuFecha es la variable donde almacenas tu fecha (creo que es logico pero no esta por demas aclarar), aparte i, j, con variables que almacenan la posicion en la que te encuentras(fila y columna)
Salu2
La teoria es asesinada tarde o temprano por la experiencia
Albert Einstein
Kev - 3 DCE
-----------------------------------------------------
Articulos:
Convertir texto a imagen en ASP.NET
Trabajando con el Global.asax
Juanolo
Miembro MUY activo
Mensajes: 202
Re: Error De Tipos
«
Respuesta #8 en:
Viernes 10 de Septiembre de 2004, 16:18 »
0
Un pequeño aporte:
Me parece que se está pasando por alto un punto muy relevante, y que en su momento me tuvo de cabeza.
El asunto es que en una instrucción SQL el formato de fecha, además de ir entre alfombrillas (#), DEBE se el formato gringo; es decir "mm/dd/yy" (mes/día/año). Si utilizas otro no dará los resultados que esperas.
Luego, una forma de asegurarnos que todo esté correcto es:
Código: Text
inicial= "#" & format(txtFechaInicial.Text, "mm/dd/yy") & "#"
final= "#" & format(txtFechafinal.text, "mm/dd/yy") & "#"
Espero ser de ayuda.
Salu2.
La luz que sólo se ilumina a sí misma, es oscuridad.
DiabloRojo
Miembro MUY activo
Mensajes: 220
Re: Error De Tipos
«
Respuesta #9 en:
Viernes 10 de Septiembre de 2004, 21:03 »
0
Tienes toda la razón Juanolo. Todo comentario y sugerencia es bien recibido.
Gracias por tomarte el tiempo.
DiabloRojo
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación General
»
Visual Basic 6.0 e inferiores
(Moderador:
F_Tanori
) »
Error De Tipos