Consulta en Visual Fox Pro 6.0

Respuesta de
a
Usuario
Buenas tardes.
Tengo la siguiente pregunta y le agradeceré infinitamente su apoyo:
Tengo una tabla dbf con nombre du0601 y un formulario, el cual tiene Textbox1, 1 Textbox2 y un textob3 y un commandbutton1.
Lo que quiero realizar es: que al ejecutar una consulta por medio de dar un click en el commandbutton1, me realice una consulta de los datos de la siguiente forma: que me permita indicar que se muestren los resultados que contengan el valor del Textbox1 en los registros del campo DU0601. Cuenta, que el textbox2 me filtre la fecha desde y el texbox3 me de la fecha hasta para filtrar los resultados de consulta de datos del campo Fechains de la misma tabla de datos. Le anexo mi correo alternativo: plm1976@gmail.com
Gracias y un saludo
 
Avatar
Experto
Utiliza la cláusula Set Filter, ejemplo:
En el evento Click del boton de comando podrías escribir lo siguiente:
Select NombreTabla
Set Filter To DU0601 == Alltrim(Thisform.Text1.Value) And Between(Fechains, Alltrim(Ctod(Thisform.Text2.Value)), Alltrim(Ctod(Thisform.Text3.Value)))
Esa es una posible solución al problema.
Nota: Si el valor de Text2 y Text3 ya son de tipo fecha entonces en lugar de colocar Alltrim(Ctod(Thisform.Text2.Value)) se debe colocar Thisform.Text2. Value.
Gracias.
Usuario
Excelente respuesta, le comento lo siguiente:
Actualmente estoy trabajando con el select where order by, y me muestra exactamente los datos ya que deseaba pero ahora, quiero saber como realizar operaciones entre fechas, es decir al momento que hago la consulta con el código en el command button, me arroja en pantalla los resultados pero hay 5 columnas que tienen datos de tipo fecha y quisiera en pantalla restarlos. Por ejemplo:
fecha2-fecha1=diaselab 
el segundo es 
if fecha5<>0 entonces fecha5-fecha3=dias nuevos
else fecha4-fecha3=diasnuevos
end if
 
Pero no se como escribir el código y a partir de tenerlo como mostrarlo en pantalla sin que la tabla original se vea modificada es decir solo quiero verlo en pantalla y posteriormente en un informe, pero es lo queestaba buscando.
Muchas gracias de antemano por su atención y un saludo
 
Avatar
Experto
Para mostrar en pantalla se debe hacer algo como el siguiente ejemplo:
Local lcFecha1, lcFecha2, lcResultado
lcFecha1 = Date()
lcFecha2 = Date(2010,15,01)
lcResultado = lcFecha1 - lcFecha2
?"El resultado de la resta de las fechas " + Alltrim(Dtoc(lcFecha1)) + "  y " + Alltrim(Dtoc(lcFecha2)) + " es " + Alltrim(str(lcResultado)) + "."
Muestra: El resultado de las fechas 29/01-2010 y 15/01/2010 es 14.
El anterior código se utiliza para mostrar la operación en pantalla, de la misma manera es para un informe pero sin ir precedido del signo "?", otro ejemplo más sencillo:
?Alltrim(Dtoc(lcFecha1)) + " - " + Alltrim(Dtoc(lcFecha2)) + " = " + Alltrim(str(lcResultado))
Muestra: 29/01/2010 - 15/01/2010 = 14
Nota: Aunque usted puede sumar y restar fechas y le da como resultado un valor número no puede hacer comparaciones como esta "if fecha5 <> 0" debido a que fecha5 es un campo o variable de tipo fecha y cero (0) es un valor de tipo numérico y al hacer esto Visual FoxPro mostrará un mensaje de error como el siguiente: "No coinciden los tipos de datos.", en este orden de ideas debe especificar una condición que compare dos variables o valores del mismo tipo de datos.
Gracias.
Usuario
Ok, lo único que quise decir en cuanto a restar fechas de if fecha1<>0, quise decir If fecha1=null, a eso me refería... solo quisiera saber si se puede restar utilizando las condicionantes mencionadas.
Avatar
Experto
Si vas a hacer comparaciones los campos no deben tener valor null, de ser así utiliza la función IsNull ejemplo:
If IsNull(NombreCampo) Then
   Instrucciones
   Else
     Instrucciones
Endif
Lo otro si fecha1 es el resultado de la resta de fechas, la condición es correcta de lo contrario se producirá el error mencionado arriba y teniendo en cuenta lo anterior si se puede realizar la resta de fechas.
Gracias.
Usuario
Gracias por la atención, oportunidad y exactitud de la respuesta, un saludo y muchas gracias nuevamente