FoxPro/Visual FoxPro - Como puedo pasar dos columna de datos de una tabla a un textbox

   
Vista:

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel Arvelo Diaz (40 intervenciones) el 19/10/2015 21:06:28
mi pregunta es la siguiente, estoy trabajando en un proyecto de consultorio medico hecho en vfp 9. y el médico me exigió lo siguiente. Quiere que cuando seleccione un paciente desde un consultor ya establecido aparezcan todos los datos bien por hay. pero quiere que le salgan la "fecha" y el "motivo de la consulta" de un solo espacio "Textbox" todas las que existan una debajo de otra en un solo textbox. espero sus respuestas rapido
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Fidel José (321 intervenciones) el 19/10/2015 23:15:52
En un textbox solo puede alojar un dato, o un encadenado relativamente breve.
En un Editbox, puedes poner todo lo que necesites, siempre transformando los datos que no sean texto y agregándolos a una cadena.

También puedes hacer tabulaciones (CHR(9) ) si es que configuras el EditBox con AllowTabs = .T.

Lo que también necesitas es mejorar la expresión, porque en realidad, no es fácil entender qué es lo que preguntas.

Un ejemplo, basado en una tabla "clientes" que tiene los campos idclien,nombre,cuit,ciudad y monto, entre otros.

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
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
* Código que debería estar en un método del form
* Usa el PROCEDURE String_Val() para conformar el encadenamiento.
 
LOCAL lcString ,;
	lcString_part,;
	lnFields,;
	i
 
LOCAL ARRAY laFields(1)
 
* 1 - Crear el cursor con los datos requeridos.
 
SELECT idclien,nombre,cuit,monto ;
	FROM clientes ;
	WHERE TRIM(ciudad)=="ROSARIO" ;
	ORDER BY NOMBRE ;
	INTO CURSOR MYCURSOR
 
* 2 - Si contiene datos, rellenar lcString con los datos de las 4 columnas.
lcString = ""
IF _TALLY > 0
	lnFields = AFIELDS(laFields,"MyCursor")
 
	SELECT MYCURSOR
	SCAN
		lcString_Part = ""
		FOR i= 1 TO m.lnFields
			lcString = m.lcString ;
				+ string_val(EVALUATE(fields(i)),laFields[i,3]+laFields[i,4]) ;
				+ IIF(m.i = m.lnFields , CHR(13)+CHR(10) , CHR(9))
		NEXT
	ENDSCAN
 
        *Crear el EditBox si no existe
 
	IF !PEMSTATUS(thisform,"edtApila",5)
		thisform.NewObject("edtApila","Editbox")
		WITH thisform.edtApila
			.top= 24
			.left = 3
			.Height = thisform.Height - 6 - 24
			.Width = thisform.Width - 6
			.Readonly = .t.
			.disabledbackColor = RGB(255,255,255)
			.disabledForeColor = RGB(0,0,0)
			.BorderColor = RGB(114,136,141)
			.allowTabs = .t.
			.FontName = "Courier New"
			.FontSize = 8
			.visible = .t.
			.Anchor = 15
		ENDWITH
	ENDIF
	thisform.edtApila.Value = m.lcString
ENDIF
 
*-----------------------
PROCEDURE String_Val
LPARAMETERS txDato , tnWidth
LOCAL lcType,;
	lcResp,;
	lnCommas
 
lnCommas = INT(tnWidth/3)
 
lcType = VARTYPE(txDato)
lcResp = ICASE(lcType = "C",PADR(txDato,tnWidth,CHR(32)),;
		lcType = "N",PADL(RTRIM(TRANSFORM(txDato,"999,999,999,999.99")),tnWidth+lncommas,CHR(32)),;
		TRANSFORM(txDato))
 
RETURN m.lcResp
ENDPROC
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel (40 intervenciones) el 11/01/2016 22:15:12
discurpa si no se entendio bien. lo que quiero hacer es lo siguiente: tengo un proyecto de consultorio medico bien hay, quiero que en un editbox aparezca todos los datos de esa columna una debajo de otra en este caso "consul_mot" campo "memo" que es igual a "motivo de la consulta" de una tabla llamda "tconsult"

por lo tanto dependiendo la cantidad de datos que hay dentro de la bs el edit1 se pueda desplegar

s
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Fidel José (321 intervenciones) el 12/01/2016 00:58:53
Desde octubre 2015 estás con este tema?. O el tema es otro. No entiendo cuál es tu problema.
Qué sería una "bs" ?
Por lo que parece, tienes una tabla, que a su vez tiene un campo memo. Normalmente hablamos de registros y campos. También supongo que traes de alguna parte un cursor con datos de un solo paciente. Si el cursor tiene varios registros y quieres mostrar en un solo control (Edit1) el contenido de todos los registros, tendrás que hacer un scan del cursor y apilar los resultados.
Pongo una idea de cómo podría hacerse:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
LOCAL lcString,;
	i,;
	lnLines
 
lcstring = ""
 
SELECT tconsul
SCAN FOR !EMPTY(consul_mot)
	lnLines = ALINES(laLines,TRIM(consul_mot),1+4,CHR(10),CHR(13))
	lcString = m.lcString + "Consulta del "+TRANSFORM(fecha_consulta) + CHR(13)
	FOR i = 1 TO m.lnLines
		lcString = m.lcString ;
			+ laLines[i] ;
			+ CHR(13)
	NEXT
	lcString = m.lcString ;
		+ REPLICATE(CHR(151),20) + CHR(13) + CHR(13)
 
 
ENDSCAN
thisform.edit1.Readonly = .t.
thisform.edit1.Value = m.lcString
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel (40 intervenciones) el 12/01/2016 14:06:09
si me discurpo no tenia tiempo por la universidad. pues bien ya para concluir el tema. mira la tabla hay y la fila que quiero que se muestre
en el edit1 ya mensionado. quiero todos los datos de esa colunma en ese edit con sus fecha cada una. espero que ahora quede claro de lo que en realidad quiero. y discurpa
tabla
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Fidel José (321 intervenciones) el 12/01/2016 16:21:49
Supuestamente te debería servir el código que te envié el 12/01/2016.
El EditBox tiene que ser Enabled = .t. y si no quieres que lo modifiquen ahí, tiene que ser REadonly = .t.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel (40 intervenciones) el 12/01/2016 19:38:19
si muchas gracias ya me funciona . ultima pregunta para concluir y si quisiera solo los datos de un cliente y no todos? en este caso solo las consulta del 000001 se muestren y no los demas? y muchas gracias
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Fidel José (321 intervenciones) el 13/01/2016 14:33:07
1
2
3
4
5
6
7
* lcPaciente = <Codigo introducido por usuario o parámetro>
SELECT * FROM tConsul WHERE PACIENTE_ID == lcPaciente_Id INTO CURSOR curConsul READWRITE
if _tally =0
        Messagebox("sin datos")
else
       * usar  el cursor curConsul (en lugar de tConsul)
endif
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel (40 intervenciones) el 13/01/2016 19:12:55
esto va en el mismo código? o aparte?
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Fidel José (321 intervenciones) el 13/01/2016 21:37:34
Depende de la interfaz. En este caso, calculo que todo se resuelve en el formulario.

Primer Idea
Yo pondría un botón para búsqueda del paciente. Para esto, generalmente se apela a un form diferente al que se le pasa como parámetro el nombre de la tabla y ya tendrá en su init un DO CASE / ENDCASE para saber qué hacer. Este form debe permitir buscar por nombre (completo, aproximado), también por ID si es que el ID es significativo y hay alguna probabilidad de recordarlo. Tiene que tener en ese form o aun en otro más, un control grid donde se presenten todas las coincidencias para seleccionar la apropiada
El form devuelve el ID de paciente o puede devolver un objeto con propiedades con los valores que se necesitan.
Una vez obtenido el ID, iría el código anterior (SELECT * etc. ) solamente para el caso en que la búsqueda devuelva un valor no vacío o no nulo (según como lo programes).
Si el cursor tiene datos (_tally > 0 ) entonces se activa la muestra en el Edit1, solo que en lugar de hacer el SCAN sobre tConsul, se hace sobre el cursor obtenido.

Mejorando algo.
El formulario que tiene el Edit, debería tener un área superior con los datos importantes del paciente:
Apellidos y Nombres
Sexo (muchas veces no se puede determinar a partir del nombre)
Edad
Obra Social, Mutual, Seguro Médico etc.
Luego el Editbox donde se mostrará el historial.

Una vez obtenido el cursor con el SELECT - SQL, se instancia este formulario (acá lo llamo "historial":
1
DO FORM historial WITH "curConsulta"
En el init del form "Historial":
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
LPARAMETERS tcCursorName
 
LOCAL lcString,;
	i,;
	lnLines
 
lcstring = ""
 
select (tcCursorName)
SCAN FOR !EMPTY(consul_mot)
 
	lnLines = ALINES(laLines,TRIM(consul_mot),1+4,CHR(10),CHR(13))
	lcString = m.lcString + "Consulta del "+TRANSFORM(fecha_consulta) + CHR(13)
 
	FOR i = 1 TO m.lnLines
 
                     lcString = m.lcString + laLines[i] + CHR(13)
 
 	NEXT
 
	lcString = m.lcString + REPLICATE(CHR(151),20) + CHR(13) + CHR(13)
 
ENDSCAN
USE IN SELECT(tcCursorName)
thisform.edit1.Readonly = .t.
thisform.edit1.Value = m.lcString
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel (40 intervenciones) el 14/01/2016 16:39:46
Si tengo una estructura realizada con su numero de expediente y un buscador de los datos tambien, solo hace falta reajustar el codigo a un metodo que le puse llamada lastconsult esto me busca los datos de ese num de expediente.

el primer codigo funciono perfecto pero ahora lo quisiera que me busque solo todos los datos que se realizo ese solo paciente del tconsults de la tabla consul_mot, que su id es consul_id

2
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Fidel José (321 intervenciones) el 14/01/2016 21:24:46
Bien, antes de llamar al formulario del historial, crea el cursor en el que se va a basar el historial
SELECT * FROM tConsul WHERE CONSUL_ID == lcConsul_Id INTO CURSOR curConsul READWRITE
lcConsul_id puede ser una variable o una propiedad del form (thisform.consul_id) o tomar el value del cuadro de texo:
lcConsul_id = trim( thisform.Txt_Expediente.text)

Fijate en esto de las confusiones: por lo que se ve consul_mot es el campo memo de una tabla (supuestamente tconsult)
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel (40 intervenciones) el 16/01/2016 14:15:59
si te entiendo el cursor para optener y guardar los datos del historial clínico es la tcolsults con el nombre de campo consul_mot, el primer codigo perfecto pero quiero incorporar el segundo que mandaste y no encuentro como he intentado todo y me da error, es posible de incorporarlo en este codigo....

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
LOCAL lcString,;
	i,;
	lnLines
 
lcstring = ""
 
SELECT tconsults
SCAN FOR !EMPTY(consul_mot)
	lnLines = ALINES(laLines,TRIM(consul_mot),1+4,CHR(10),CHR(13))
	lcString = m.lcString + "Consulta del "+TRANSFORM(consul_fec) + CHR(13)
	FOR i = 1 TO m.lnLines
		lcString = m.lcString ;
			+ laLines[i] ;
			+ CHR(13)
	NEXT
	lcString = m.lcString ;
		+ REPLICATE(CHR(151),20) + CHR(13) + CHR(13)
 
 
ENDSCAN
thisform.edit1.Readonly = .t.
thisform.edit1.Value = m.lcString
='editor_indent'>
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Fidel José (321 intervenciones) el 16/01/2016 16:37:06
Lo que te puede dar error es que los campos no se llaman exactamente como los pongo, eso debes verificarlo en tu tabla, o que no definas la variable de filtro que usa el selct
Acá, "lcConsult_Id" es una variable que surge de donde tú consigues el número de expediente, o como se llame.

1
SELECT * FROM tConsul WHERE CONSUL_ID == lcConsul_Id INTO CURSOR curConsul READWRITE

de acá en más, tenés que usar el cursor "curConsul" en luga de la tabla tConsult

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
LOCAL lcString,;
i,;
lnLines
 
lcstring = ""
 
SELECT curConsulta
SCAN FOR !EMPTY(consul_mot)
lnLines = ALINES(laLines,TRIM(consul_mot),1+4,CHR(10),CHR(13))
lcString = m.lcString + "Consulta del "+TRANSFORM(consul_fec) + CHR(13)
FOR i = 1 TO m.lnLines
lcString = m.lcString ;
+ laLines[i] ;
+ CHR(13)
NEXT
lcString = m.lcString ;
+ REPLICATE(CHR(151),20) + CHR(13) + CHR(13)
 
 
ENDSCAN
thisform.edit1.Readonly = .t.
thisform.edit1.Value = m.lcString
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

Como puedo pasar dos columna de datos de una tabla a un textbox

Publicado por Joel (40 intervenciones) el 26/01/2016 19:05:40
lo he intentado de todas forma men y no busca. si le dejo el tconsults en lugar de curConsulta me busca todos los registros pero solo selecionando el 1er expediente. y en cambio si le dejo el "curConsulta" no funciona de ninguna manera.

aqui el codigo completo
nota: el select va junto al mismo codigo??? lo tengo junto.

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
SELECT * FROM tconsults WHERE consul_id== pacte_id INTO CURSOR curConsul READWRITE
 
 
LOCAL lcString,;
i,;
lnLines
 
lcstring = ""
 
SELECT tconsults
*curConsul
SCAN FOR !EMPTY(consul_mot)
lnLines = ALINES(laLines,TRIM(consul_mot),1+4,CHR(10),CHR(13))
lcString = m.lcString + "Consulta del "+TRANSFORM(consul_fec) + CHR(13)
FOR i = 1 TO m.lnLines
lcString = m.lcString ;
+ laLines[i] ;
+ CHR(13)
NEXT
lcString = m.lcString ;
+ REPLICATE(CHR(151),20) + CHR(13) + CHR(13)
 
 
ENDSCAN
thisform.edit1.Readonly = .t.
thisform.edit1.Value = m.lcString
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