FoxPro/Visual FoxPro - Insertar datos a un TextBox que correspondan a los datos de un ComboBox

   
Vista:
Imágen de perfil de Edwin

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Edwin (7 intervenciones) el 28/11/2015 19:48:55
Estoy haciendo una factura para un proyecto de programación, apenas empezamos a ver VFP y SQL entonces debe de ser lo más simple posible. En el environment del form factura tengo 3 tablas, clientes, facturas y productos. En el form tengo un combo box conectado a los nombres de los clientes de la tabla clientes, y al lado tengo un text box conectado al código de cliente de la tabla factura, necesito crear un botón que identifique el código del cliente que tenga el nombre del combo box e inserte ese código en el textbox del codigo de cliente de la tabla factura. Y que si no encuentra el nombre del combo box que salte un mensaje que diga ''Cliente no registrado''.

Leí que podia hacerlo con seek y locate pero nunca habia utilzado éstas funciones entonces no tengo mucha idea de ello, un amigo me dijo que utilizara un código como este:

SELECT clientes
LOCATE for thisform.combo1.Value = nom_clien
IF thisform.combo1.value=nom_clien THEN
Thisform.txtcod_clien2.value=cod_clien
ELSE
MESSAGEBOX("El cliente no está registrado")
ENDIF
thisform.refresh

Pero no funciona.
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
Imágen de perfil de Edwin

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Edwin (7 intervenciones) el 28/11/2015 20:28:06
Acabo de intentar con seek de esta forma:

SELECT clientes
SET ORDER TO cod_clien
SEEK alltr(thisform.combo1.Value)
IF FOUND()
thisform.txtcod_clien2.Value=clientes.cod_clien
ELSE
MESSAGEBOX("El cliente no está registrado")
ENDIF

Thisform.refresh

Pero siempre me da el mensaje de que no está registrado, aún cuando si hay un cliente con el nombre que está en el combo box.
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

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Mauricio antonio (42 intervenciones) el 28/11/2015 22:14:02
Como tienes definido cod_clien en clientes?
con ALLTRIM o sin el?
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
Imágen de perfil de Edwin

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Edwin (7 intervenciones) el 28/11/2015 23:27:59
Sin alltrim
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
Imágen de perfil de Edwin

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Edwin (7 intervenciones) el 29/11/2015 06:28:00
Modifiqué el código de seek y parece que ahora funciona mejor:

1
2
3
4
5
6
7
8
9
10
SELECT clientes
SET ORDER TO cod_clien
SEEK (nom_clien=thisform.combo1.Value)
IF FOUND()
thisform.txtcod_clien2.Value=clientes.cod_clien
ELSE
MESSAGEBOX("El cliente no está registrado")
ENDIF
 
Thisform.refresh

Pero me da el error ''Data type mismatch"
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

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Mauricio antonio (42 intervenciones) el 29/11/2015 13:53:42
ese error es debido a que estas comparando 2 tipos diferentes de datos.
En el init del form, en el value del textbox, ponle ""
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

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Fidel José (321 intervenciones) el 29/11/2015 16:57:03
No dices si el código de cliente que usas es numérico o caracter. Por lo que dices es numérico.
Debes tener en cuenta que el value de un combobox siempre dará un vartype()="C", por más que el dato de origen tenga otro tipo.

1
2
3
4
5
6
7
8
9
lcVartype = VARTYPE(clientes.cod_clien)
 
lnCod_Clien = IIF(lcVartype="N", VAL(thisform.combo1.value),ALLTRIM(thisform.combo1.value))
IF INDEXSEEK(lnCod_clien,.f.,"CLIENTES","COD_CLIEN")
	INDEXSEEK(lnCod_clien,.t.,"CLIENTES","COD_CLIEN")
	thisform.txtcod_Clien2.Value = clientes.Cod_clien
ELSE
	MESSAGEBOX("El cliente no está registrado")
ENDIF

Obviamente no es necesario averiguar cada vez si el tipo de campo es numérico o char, porque se supone que esto no cambia, por lo que luego de resuelto el problema, vendrá la simplificación.

Nota: INDEXSEEK() es mucho más rápido que SEEK (comando) y tiene en la respuesta (boolean) si encuentra el registro o no.
El segundo parámetro indica si luego de encontrado el registro en la tabla de índice (cdx), busca o no el registro físico en la dbf.
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
Imágen de perfil de Edwin

Insertar datos a un TextBox que correspondan a los datos de un ComboBox

Publicado por Edwin (7 intervenciones) el 29/11/2015 18:49:03
El código de cliente es numérico, el nombre es carácter y como lo que quiero insertar es el código de cliente, el origen del Textbox también es numérico. Probaré con ese código entonces.
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