Programación en visual fox

Como puedo hacer, cuando al hacer click en una caja de texto del formulario(1) me aparezca otro formulario(2) y que al escribir las primeras letras del nombre del cliente en el formulario(2)
Aparezca en un detalle los nombres de esos clientes que empiecen con las primeras letras que digite, y al seleccionar el nombre del cliente y al darle enter me arroje el código del cliente, el ruc del cliente, teléfono del cliente, dirección del cliente y que estos datos aparezcan en el formulario(1)

1 respuesta

Respuesta
1
Vamos por partes:
En el formulario1, debes tienes las cajas de texto con los campos que necesitas mostrar y una más para abrir el formulario2. En el formulario2 podes agregar una grilla o también cajas de texto con botones para moverte por los registros seleccionados en la consulta SQL, también debes colocar una caja de texto para ingresar el valor a consultar y un botón para ejecutar la sentencia SQL.
Tienes que declarar una variable en el evento LOAD del formulario1 que podría tener el siguiente nombre:
PUBLIC MIFORMULARIO1
En el evento click del formulario2 la sentecia:
DO FORM FORMULARIO1
Bueno ahora vamos a realizar la consulta SQL que es la manera más fácil de hacer esto, aunque no estaría mal hacerlo por búsqueda secuencial si son pocos registros.
la sentencia en el botón del formulario2 debe ser así:
PUBLIC nom(colocalo en el LOAD del form2)
Nom va a ser la variable donde vamos a asignar el valor de los primeros caracteres a buscar.
nom = thisform.txtbuscar.text
asigno a nom el valor que coloque en la caja de texto del formulario2.
SELECT *;
FROM (nombre de la tabla y base de esta manera ej. organizado!cliente);
WHERE cliente.nombre = nom% (el simbolo % es un comodín que se usa para mostrar cualquier tipo de caracteres, probá porque no me acuerdo si va entre comillas, lo que no va seguro en nom que seria la variable donde vamos a guardar los primeros caracteres del nombre);
ORDER BY (nombre del campo por el cual queres ordenar los valores ej.
cliente.nombre esto es opcional, lo poder obviar);
INTO CURSOR MICONSULTA;
NOTA: no te olvides de colocar el ";" después de cada sentencia como te lo indique en ejemplo.
Ahora debes crear otra tabla que contenga los valores a mostrar por ej.
Tabla: consulta1
CAMPOS: cliente_id, nombre, telefono, direccion, etc.
Debes relacionar esta con la tabla de clientes a través de un indice que puede ser codigocliente o cliente_id.
Vamos a pasarle los valores de la consulta a la nueva tabla de la siguiente. Manera:
DO WHILE !EMPTY(MiConsulta.nombre)
SELECT MiConsulta
select consulta1
begin transaction
append blank
REPLACE consulta1.cliente_id WITH MiConsulta.cliente_id
REPLACE consulta1.nombre WITH MiConsulta.nombre
REPLACE consulta1.tel WITH MiConsulta.tel
REPLACE consulta1.direccion WITH MiConsulta.direccion
end transaction
select MiConsulta
Skip 1
Enddo
Bueno espero que me estés siguiendo hasta acá. Acá ya hemos creado una tabla nueva que se llama consulta1 en donde ya tiene una copia de los registros que vos estabas buscando.
A mi me gusta más mostrarlos en cajas de texto con botones para recorrerlos.
En las cajas del formulario2 debes colocar los campos de la tabla consulta1. Te paras en el registro que estabas buscando y en alguna parte del formulario2 debes colocar la siguiente. Sentencia:
Whit MIFORMULARIO1
.txtcliente_id.refresh
. Txtnombre. Refresh
Endwith
... y haces un refresco de todos los demás campos a mostrar en el formulario1.
Teniendo en cuenta que tenias ambas tablas relacionadas te va a mostrar el registro de la tabla principal en el formulario1, ya que las cajas de texto te muestran las declaramos para que te muestren los datos de esa tabla, una vez con el registro obtenido lo podes borrar, modificar, etc.
Antes de hacer una nueva consulta debes vaciar la tabla consulta1 de la siguiente. Manera:
Esta sentencia la ejecutas una sola vez
Cuando arrancas el programa:
USE consulta1 in 1 exclusive
Esta la ejecutas cada vez antes de realizar una nueva consulta para vaciar la tabla con la consulta anterior:
select consulta1
go top
do while !eof()
delete
Skip 1
Enddo
Pack
NOTA: Esto de todas maneras lo podes realizar por búsqueda incremental a través del comando SEEK, pero no te lo recomiendo cuando son muchos registros.
Pero si te resulta muy complicaddo de la manera que te lo explique avisame que lo analizamos de la otra forma.
Cualquier consulta mi dirección
Disculpa que me faltó un dato muy importante, cuando llamas al formulario1, lo tienes que hacer de la siguiente manera:
DO FORM FORMULARIO1(o como se llame) NAME MIFORMULARIO1
Acordate que antes declarastes como variable publica MIFORMULARIO1. La declaración de esta variable te conviene hacerla mejor en el arranque del sistema no el load como te indiqué antes.
Corregí esto que me equivoque con el llamado al formulario2
En el evento click del formulario1 la sentencia:
DO FORM FORMULARIO2

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas