FoxPro/Visual FoxPro - Control seek para una busqueda

   
Vista:

Control seek para una busqueda

Publicado por Fabricio byronfabricio25@gmail.com (7 intervenciones) el 18/12/2014 05:35:44
Hola, necesito ayuda por favor de como usar un control seek ( me dijeron que es el indicado) para hacer una busqueda, mi objetivo es que en un textbox escriba un codigo y luego de dar enter se habran las tablas o registros que contienen ese codigo, por ejemplo:

En un tabla ingrese un cliente y ese cliente tiene el codigo 022 y en otra tabla he ingresado productos con el codigo 022 porque le pertenecen a ese cliente, lo que quiero es que al dar al enter me aparesca el cliente y los productos que poseen ese codigo, Gracias.


PD: Si no se usa seek por favor orientenme.
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

Control seek para una busqueda

Publicado por Juan (101 intervenciones) el 18/12/2014 12:17:54
Buenas Fabricio

Lo que estás comentando más que un SEEK es una consulta SQL. Tendrías que hacer básicamente un INNER JOIN o un producto cartesiano que te devolviera los productos, sería algo similar a esto, yo lo hago con producto cartesiano, pero deberías investigar los JOINS:

lcCOD = "022" && El código del Cliente que sea
select CLIENTES.nombre, ARTICULOS.nombre FROM CLIENTES, ARTICULOS WHERE ARTICULOS.cliente = lcCOD into cursor "micursor"

La consulta lo que hace es que te mete en "micursor" los registros que coinciden con los campos que has designado, para verlos en pantalla tendrías que recorrer el cursor y mostrarlos en pantalla o bien asociar el cursor a un grid para que los muestre todos.

Un saludo y espero que te ayude un poco lo que te he escrito
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

Control seek para una busqueda

Publicado por Fidel José (558 intervenciones) el 18/12/2014 13:04:37
Aunque tu pregunta no resulta demasiado clara (productos que le peternecen a un cliente?) me imagino que te va a servir mucho más que seek, seek() o indexseek() estudiar SELECT SQL .
Puedes usar Seek() o indexseek() (SEEK (comando) es obsoleto), solamente en tablas indexadas y siempre que exista una etiqueta sobre el campo de búsqueda (ver INDEX ON CampoTabla TAG NombreEtiqueta )
Puedes usar SELECT SQL en cualquier tabla, si tiene índices y coinciden con la condición de búsqueda SQL usará tus índices, si no, creará su propia indexación interna sin que te enteres. Puedes traera a un cursor datos de distintas tablas que tengan un elemento relacional en común (código de cliente, en tu caso).

Si la tabla que contiene los productos se llama "ProdClie", podés probar con lo siguiente:

lcCodigo=alltrim(thisform.text1.value)
SELECT * FROM PRODCLIE WHERE codigo==lcCodigo INTO CURSOR curProdclie
SELECT curProdclie
BROWSE

El que sigue, es un ejemplo un poco más complejo, donde intervienen 3 tablas
Clientes (maestro)
Produc (maestro de productos)
Factprod (tabla de productos facturados)
Solicitud: Productos comprados por un cliente entre dos fechas

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
LOCAL lcSql,lcIdclien, ldDia1, ldDia2
lcIdclien="00001"
ldDia1=DTOC(DATE(2014,9,1))
ldDia2=DTOC(DATE(2014,9,30))
 
* abrir tablas necesarias
* Si se indica la ruta de tablas con SET DEFAULT to RutaTablas, no es necesario abrir las tablas, pero siempre será necesario cerrarlas.
USE FACTPROD IN 0 SHARED
USE CLIENTES IN 0 SHARED
USE PRODUC IN 0 SHARED
 
*Construcción de la sentencia SQL
TEXT TO lcSql TEXTMERGE NOSHOW PRETEXT 15
SELECT FP.FECHA,FP.FACTURA,FP.CODPROD,FP.IDCLIEN,
PD.DESCRIP,CL.NOMBRE,FP.CANTIDAD,FP.IMPORTE
FROM FACTPROD AS FP, CLIENTES AS CL, PRODUC AS PD
WHERE FP.IDCLIEN="<<lcIdclien>>"
AND FECHA BETWEEN CTOD("<<ldDia1>>") AND CTOD("<<ldDia2>>")
AND FP.CODPROD=PD.CODPROD AND FP.IDCLIEN=CL.IDCLIEN
order by fecha
INTO CURSOR curDetaprod
ENDTEXT
 
* Ejecutar la sentencia
&lcSql
 
* Analizar y mostrar resultados (si hay)
IF _tally>0
	SELECT curDetaProd
	BROWSE
ELSE
	MESSAGEBOX("Sin Resultados")
ENDIF
 
* Cierro todas la tablas y el cursor
SELECT curDetaprod
USE
SELECT factprod
USE
SELECT CLEINTES
USE
SELECT PRODUC
USE
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

Control seek para una busqueda

Publicado por Fabricio (7 intervenciones) el 18/12/2014 20:01:11
Hey, gracias me ha servido de guia, reemplaze lo del curso y use un keypreess, y ha funcionado ahora cuando ingreso el codigo me sale la tabla pero solo los datos que tienen ese codigo, pero aun tengo una duda mas. Sí tengo un tabla cliente y otra tabla de productos y el cliente posee el codigo 001 ahora cuando ingreso los productos les pongo el codigo 001 pórque le pertenece a ese cliente. La cuestione es que quiero hacer lo mismo pero que las tablas salgan juntas no en 2 ventanas, se puede?. Gracias de antemano.

PD: perdon por la ignorancia pero esto de la programacion no me va.
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

Control seek para una busqueda

Publicado por Fidel José (558 intervenciones) el 19/12/2014 01:10:52
Perdón Fabricio, pero me parece que tienes que repasar un poco el diseño del sistema.
De los productos que le pertenecen a los clientes, deja que se ocupen los clientes. No entiendo ese concepto. Qué se supone que intentas hacer?. Podemos hablar de maestro de productos, de maestro de clientes, de cabecera de facturas de ventas, de tabla de detalle de productos facturados, similar para las compras, stocks, etc.

"reemplaze lo del curso y use un keypreess" ??? Meaning?
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

Control seek para una busqueda

Publicado por Juan (101 intervenciones) el 19/12/2014 12:55:52
Buenas Fabricio

Siempre puedes crear una tabla intermedia, aunque no tenga mucho sentido, ahora sí lo único que quieres es verlo en un sólo "BROWSE" puedes hacer una consulta de forma similar a como te dijo Fidel José o cómo te indiqué yo ayer y después de ejecutar la consulta meter este comando "BROWSE LAST". Por ejemplo:


lcCOD = "022" && El código del Cliente que sea
select CLIENTES.nombre, ARTICULOS.nombre FROM CLIENTES, ARTICULOS WHERE ARTICULOS.cliente = lcCOD into cursor "micursor"
BROWSE LAST


De todas formas, como le pasa a Fidel, yo no entiendo muy bien tus explicaciones. Y por cierto, sería más aclaratorio que pegarás tu código para poder ver dónde te falla o el error en concreto que tienes
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

Control seek para una busqueda

Publicado por fabricio (7 intervenciones) el 20/12/2014 22:27:25
A ver ok, intentare explicarlo mejor tengo 3 Bases de datos Clientes, productos y proveedor.
El sistema que intento hacer es de compra venta e inventario.
Ahora tengo3 formularios para ingresar nuevos proveedores, clientes y productos.
Si puedo ver la base de datos con el codigo que me han dado , perfecto.
En mi programa se la asigna un codigo al cliente, producto y al proveedor ( el mismo codigo por ejemplo: compre al proveedor un producto , ambos tienen el mismo codigo osea: 001)
Lo que quiero es que al ingresar en un Textbox el codigo y presionando enter por el el Keypress me salgan los datos del producto y de el proveedor, eso ya lo hice pero me salen en 2 tablas distintas queria saber si se podia en 1 sola. O debo crear una abla adicional donde una los campos eso es lo que no estoy claro.
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