Insertar, actualizar, eliminar, limpiar cajas de texto en Visual Foxpro

2,743 views
Skip to first unread message

Billy Filiu McNeil

unread,
Dec 10, 2013, 8:57:28 PM12/10/13
to publice...@googlegroups.com
Buenas Noches.
Soy realmente nuevo en Visual Foxpro y me interesa aprender, y ya se como hacer base de datos, formularios, pero ahora necesito poder crear botones de insertar actualizar, eliminar y programarlos.
¿Como se hace el botón de insertar en visual Foxrpo? Mi DBF la hice en Foxpro.
Saludos y bendiciones

HernanCano

unread,
Dec 10, 2013, 9:14:32 PM12/10/13
to publice...@googlegroups.com
Sería bueno que te dieras una pasada por los ejemplos de VFP, el proyecto Solutions.pjx [[ D:\Microsoft Visual FoxPro 9\Samples\Solution ]].

En el apartado "Forms - Data entry" hay info que te puede servir.

Carlos Miguel FARIAS

unread,
Dec 11, 2013, 6:20:16 AM12/11/13
to Grupo Fox
Para definir que vas a colocar en un botón insertar, deberíamos saber si las tablas están definidas con buffer o no. Si los controles del formulario (textbox y demás) están asociados a columnas en las dbf o no.
Suponiendo que no usas buffer y tus controles no están asociados.
Deberías pasar los values de cada control a variables de memoria y luego hacer un INSERT INTO la tabla destino.
Ejemplito:

código botón clic, guardar

WITH THISFORM
   m.lnCliente = .txtnCliente.value
   m.lcAyNCliente = .txtcAyNCliente.value
   m.lcDirCliente = .txtcDirCliente.value
   m.lcTelCliente = .txtcTelCliente.value
ENDWITH
NOTE aca irían rutinas de validación.
NOTE Asumiendo que tabla tiene un indice por número cliente llamado xNumero...
IF SEEK(m.lnCliente, "Clientes", "xNumero")
   NOTE que si está lo actualiza
   UPDATE Clientes;
      SET cAyN = m.lcAyNCliente,;
          cDir = m.lcDirCliente,;
          cTel = m.lcTelCliente;
      WHERE nCliente = m.lnCliente
ELSE  && Si no lo esta, lo inserta
   INSERT INTO Clientes (nCliente, cAyN, cDir, cTel);
      VALUES (m.lnCliente, m.lcAyNCliente,;
              m.lcDirCliente, m.lcTelCliente)
ENDIF && SEUO

Nunca recurras a usar APPEND BLANK más REPLACE, funciona pero es código obsoleto, implica más instrucciones, y en entornos multiusuarios, con muchas altas concurrentes, produce errores de clave duplicada. 
Saludos: Miguel, La Pampa (RA)

Billy Filiu McNeil

unread,
Dec 11, 2013, 11:57:49 AM12/11/13
to publice...@googlegroups.com
Muchas Gracias HernanCano, lo hare y te aviso como me fue, gracias por tu ayuda.

Billy Filiu McNeil

unread,
Dec 11, 2013, 11:58:47 AM12/11/13
to publice...@googlegroups.com
Gracias Miguel, probare ahorita tu codigo adaptandolo al mio, y te aviso como me fue. Muchas Gracias.

Araceli Torres

unread,
Feb 3, 2019, 3:07:03 PM2/3/19
to Comunidad de Visual Foxpro en Español
Hola Miguel, probaba tu código, pero me preguntaba que cuando declaras variables colocas m.lnCliente la "m" a que hace referencia.

De antemano gracias

Carlos Miguel FARIAS

unread,
Feb 3, 2019, 5:10:46 PM2/3/19
to Grupo Fox
m. hace referencia a variables memoria
Las variables de memoria son las variables comunes que tienen igual nombre que las variables de tablas, y se les antepone m. para diferenciarlas.

Si tienes una tabla con las columnas numero, nombre e importe
cuando haces USE tabla
numero, nombre e importe hacen referencia a los valores de dichos campos en el 1º registro de la tabla, si te desplazas por la tabla, dichos nombres referencia los datos de los registros sobre los que te posicionas (con SCAN, LOCATE, SEEK, FIND, SKIP, GO RECORD, etc.)
si los datos los quieres pasar a variables comunes, puedes usar
SCATTER MEMO MEMVAR  && memo si tienes campos memo, si no, no hace falta
Entonces, para diferenciar esos datos de los de la tabla, antepones m. a cada campo.
m.numero, m.nombre, m.importe 
Si quieres modificar datos de una tabla, pero no hacer los cambios hasta que todo esté validado, haces
SCATTER MEMVAR
... procesos de calculo donde referencias los campos con m.
GATHER MEMVAR
está última transfiere los datos a la tabla (y no tienes que hacer REPLACEs) es más simple.
Además, si quieres ser más específico, puedes hacer un SCATTER FIELDS <lista de campos 1> y luego GATHER FIELDS <lista de campos 2>
Puedes leer unos campos y guardar solo los que quieres (aún otros que no leiste, pero creaste la correspondiente m.uno_no_leido
Saludos: Miguel
Esto en parte puede omitirse si usas buffers apropiados para tablas.

Araceli Torres

unread,
Feb 3, 2019, 5:32:35 PM2/3/19
to publice...@googlegroups.com
Gracias por responder Miguel, pero tengo otra duda dentro de mi base de datos tengo 5 registros que quiero añadir desde un formulario entonces tengo:

   m.agenda = VAL (.TEXT1.VALUE)
   m.nomb = (.TEXT2.VALUE)
   m.diragen = (.TEXT3.VALUE)
   m.tel = (.TEXT4.VALUE)
   m.idbar= VAL (.combo1.VALUE)

para los tipos numericos antepuse el argumento VAL, pero aun asi me esta fallando, podrias ayudarme
--
Ing. Araceli Torres
Celular: 8935-6284

Araceli Torres

unread,
Feb 3, 2019, 5:47:33 PM2/3/19
to publice...@googlegroups.com
por otra parte cuando pasas los valores, me preguntaba, todos ellos los tienes declarados dentro de la base de datos como Character, como haces para hacer el insert into con tipos de datos numericos??

El dom., 3 feb. 2019 a las 16:10, Carlos Miguel FARIAS (<carlosmig...@gmail.com>) escribió:

Araceli Torres

unread,
Feb 3, 2019, 5:53:43 PM2/3/19
to publice...@googlegroups.com
HEY, HOLA NUEVAMENTE, GRACIAS POR CONTESTAR, PERO OLVIDA LAS OTRAS PREGUNTAS, YA LOGRE IDENTIFICAR MIS ERRORES Y YA LOGRE LA INSERCIÓN.

GRACIASSSSS.
Reply all
Reply to author
Forward
0 new messages