cual es la mejor manera (insertar, eliminar y consultar) la misma tabla

190 views
Skip to first unread message

Noe

unread,
Apr 24, 2017, 10:48:34 AM4/24/17
to Comunidad de Visual Foxpro en Español
hola foro!!!

les doy las gracias de antemano por la ayuda que puedan ofreserme, y es con lo siguiente

tengo una tabla con información del empleado y tengo 5 usuarios en pc diferentes, 2 de los usuarios pueden insertar, eliminar y borrar los otros 3 usuarios solamante podran consultar
mi pregunta es para insertar, eliminar y borrar que es lo mejor usar vistas o un cursor y para consultar que es lo mejor vista o cursor ?

GRACIAS.

Carlos Miguel FARIAS

unread,
Apr 24, 2017, 12:11:04 PM4/24/17
to Grupo Fox
Tablas nativas o SGBD? Fundamental para poder en pensar una respuesta.
Preguntas: no actualizas?, quieres eliminar empleados?, quieres borrar registros?
Que tipo de consultas? Con filtros?, Datos Ordenados?, todos los datos? columnas seleccionadas? Registros por página?
En general, vistas para actualizar depende si el motor que gestiona datos te permite tener vistas actualizables.
Para consultas vistas y cursor se comportan en forma análoga una vez creadas, dependerá con widget muestras los datos.
Saludos: Miguel, La Pampa (RA)

Alberto Mancuso

unread,
Apr 24, 2017, 3:42:08 PM4/24/17
to Comunidad de Visual Foxpro en Español
hola si usas tablas nativas la mejor forma es usar seccion privada de datos , trabajas con tus tablas propias en el formulario ,
y te olvidas de bloqueos y demas cosas
en cada form tienes que poner tus seteos propios.
yo tengo un prg con todos los seteos ej:
set date french
det delete on
set exclusive off
set century on
 ....... y demas
u lo llamo en el load de cada form
para agregar , eliminar y modifica
uso bufering 5 en las tablas 
uso insert into , delete from ... y update . es mas seguro y se asemeja a los motores de bases de datos.
********************* ejemplo para agregar
*--- OBTENGO EL ULTIMO codigo ingresado y le sumo uno
SELECT MAX(CLI_NRO) AS ULTIMO FROM CLI000 INTO CURSOR tmpultimo
NRO=ULTIMO+1 
INSERT INTO CLI000 (CLI_NOM,CLI_DOM,CLI_NRO) ;
vALUES (v1,v2,nRO)
TABLEUPDATE(.T.,.T.,"CLI000")
MESSAGEBOX("Datos Actualizados con Exito....",64,"AVISO")
RELEASE THISFORM

ejemplo para borrar **************************************
resp=MESSAGEBOX("¿Está seguro que quiere eliminar este registro?",4+32+256,"¡ATENCION!")
IF Resp=6
    ee=TMPCLI000.CODIGO
    select CLI000
    SET MULTILOCKS ON
    =CURSORSETPROP('Buffering', 3 ) 
    delete from cli000 WHERE cli_nro = ee 
    MESSAGEBOX("Se ha eliminado el registro","Aviso")
    =CURSORSETPROP('Buffering', 5 ) 

THISFORM.DETALLE
    
ENDIF
para modificar *********************************
x1=thisform.pageframe1.page2.text1.Value
x2=ALLTRIM(thisform.pageframe1.page2.text2.Value)
x3=ALLTRIM(thisform.pageframe1.page2.text3.Value)
x4=ALLTRIM(thisform.pageframe1.page2.text4.Value)

update cli000 set cli_nom=x2,cli_dom= x3 where cli_nro=x1

tableupdate(.t.,.t.,"CLI000")
MESSAGEBOX("Datos Actualizados con Exito....",64,"AVISO")
THISFORM.pageframe1.page1.SetFocus
THISFORM.DETAlle

espero sirva mis ejemplos
saludos

Noe

unread,
Apr 24, 2017, 6:44:16 PM4/24/17
to Comunidad de Visual Foxpro en Español
hola Alberto
tengo un progrtama como set main
con lo siguiente
Set Exclusive off
Set Deleted on
Set Multilock on
Set Safety off
Set Century on
Set Date to french
Set Status bar off
Set Sysmenu to 
Set Talk off
Set Scoreboard off
Set Exact on
Set Console Off

en el Load del form tengo esto
Close Databases All
Select 1
Use areas
Select 2
Use plantilla
Select 3
Use archivo

en el boton de SALVA  en el procedure Clic tengo esto
Append Blank
=CursorSetProp("buffering", 3)
Replace numemp   With Thisform.numemp.Value
Replace fdis     With Thisform.fdis.Value
Replace tarjeta  With Thisform.tar.Value
Replace gabinete With Thisform.gab.Value
Replace paterno  With vpa
Replace materno  With vma
Replace nombre   With vno
Replace codpue   With Allt(Thisform.cod.Value)
Replace dcodpue  With Thisform.dco.Value
Replace tn       With Thisform.tnn.Value
Replace nivel    With Thisform.niv.Value
Replace secsin   With Thisform.ses.Value
Replace djornada with Thisform.djo.Value
Replace horario  With Thisform.hor.Value
Replace dir      With Proper(Thisform.dir.Value)
Replace sub      With Proper(Thisform.sub.Value)
Replace uni      With Proper(Thisform.uni.Value)
Replace ofi      With Proper(Thisform.ofi.Value)
Replace nombres  With vpa+' '+vma+' '+vno
Replace activo   With 'S'
=Tableupdate(.F.,.T.)

esto esta bien?

Alberto Mancuso

unread,
Apr 24, 2017, 6:57:59 PM4/24/17
to publice...@googlegroups.com
Hola yo usaría bufering en 5 para grabar lo demás está bien y al final
Tableupdate(.T.,.T.,"nombre tabla")
Flush
Para asegurar grabado 
Saludos 

Fidel Charny

unread,
Apr 24, 2017, 7:07:51 PM4/24/17
to Comunidad de Visual Foxpro en Español
Algunas observaciones

*Este Select 1 + USE, es mejor olvidarlo
USE AREAS IN 0 SHARED
USE PLANTILLA IN 0 SHARED
USE ARCHIVO IN 0 SHARED       && Qué feo nombre para un archivo.

Para seleccionar una tabla
SELECT AREAS
SELECT PLANTILLA
SELECT ARCHIVO

Al grabar,
1) Colocal SELECT Tabla antes de hacer un append (no se sabe en que tabla agregas los datos)
2) en lugar de todo ese Append blank + replace (Le pongo TalTabla porque no se cual es la tabla)
INSERT INTO TALTABLA ;
   
(Numemp,;
   
Fdis,;
   
Tarjeta,;
   
Gabinete,;
   
Paterno,;
   
Materno,;
   
Nombre,;
   
Codpue,;
   
Dcodpue,;
   
Tn,;
   
Nivel,;
   
Secsin,;
   
Djornada,;
   
Horario,;
   
Dir,;
   
Sub,;
   
Uni,;
   
Ofi,;
   
Nombres,;
   
Activo);
VALUES
;
   
(Thisform.numemp.Value,;
   
Thisform.fdis.Value,;
   
Thisform.tar.Value,;
   
Thisform.gab.Value,;
    vpa
,;
    vma
,;
    vno
,;
   
Allt(Thisform.cod.Value),;
   
Thisform.dco.Value,;
   
Thisform.tnn.Value,;
   
Thisform.niv.Value,;
   
Thisform.ses.Value,;
   
Thisform.djo.Value,;
   
Thisform.hor.Value,;
   
Proper(Thisform.dir.Value),;
   
Proper(Thisform.sub.Value),;
   
Proper(Thisform.uni.Value),;
   
Proper(Thisform.ofi.Value),;
    vpa
+' '+vma+' '+vno,;
   
'S')


HernanCano

unread,
Apr 24, 2017, 8:06:57 PM4/24/17
to Comunidad de Visual Foxpro en Español
Noe:
La mejor forma es la que tú sepas emplear bien y que la entiendas y que te funcione de acuerdo a lo que quieres.


El lunes, 24 de abril de 2017, 9:48:34 (UTC-5), Noe escribió:

Carlos Miguel FARIAS

unread,
Apr 25, 2017, 6:48:23 AM4/25/17
to Grupo Fox
Todavía no respondió a lo básico si usa tablas nativas o un SGBD externo.
Todas las soluciones orientan a nativas.
Aunque la que usa la que usa INSERT INTO puede adaptarse a un SGBD.
Con sesiones privadas de datos no se elimina el problema de bloqueos, con buffering se minimiza.
Veo que usan mucho thisform.campo1, thisform.campo2, etc.
Por que no usan WITH Thisform ... END WITH, se ahorran mucho texto, y queda más claro (más allá que podría ser más rápido).
Fidel: el archivo ARCHIVO te va a demandar por decir que su nombre es feo (ya te va a llegar una intimación EL VIERNES).
Saludos: Miguel, La Pampa (RA)
Larga Vida y Prosperidad
Que la Fuerza los acompañe

Noe

unread,
Apr 25, 2017, 9:22:29 AM4/25/17
to Comunidad de Visual Foxpro en Español
Hola Miguel

son tablas nativas y perdón por mi ignorancia que es un SGBD ?
siempre trabajo con free tables, las sesiones privadas como se utilizan?
GRACIAS

micky khan

unread,
Apr 25, 2017, 9:38:07 AM4/25/17
to publice...@googlegroups.com
Otra manera seria usar los procedimientos almacenados.

Solo llamar a los procedures y mandar los datos.... :)



Grabar_Cabecera(fecha, idcodigo, nombre)


Grabar_Detalle(item, codigoproducto, precio)

--
  <_>
 (o o)
 (  °  )
<>-<>
Micky Khan

Antonio Meza

unread,
Apr 25, 2017, 9:41:30 AM4/25/17
to Comunidad de Visual Foxpro en Español
Cuando usaba DBF siempre use un contenedor de base de datos es decir un archivo DBC, es mejor que usar tablas libres, luego investigue y se me hizo muy fácil usar VISTAS LOCALES, en ves de usar las tablas directamente, al igual que las tablas dbf las vistas locales las puedes agregar al dataenvieroment y así las use, seleccionando que al abrirlas no trajeran datos.

Mi recomendación es que uses Vistas Locales que son cursores realmente que VFP administra, al aplicarles buffering 5 y usando tableupdate y tablerevert simulas usar un SGDB (Sistema Gestor de Base de Datos)

Lo mejor seria que migres a un SGDB como MariaDb, FireBird, PostGresql,

saludos
Antonio Meza


El lunes, 24 de abril de 2017, 9:48:34 (UTC-5), Noe escribió:

Alberto Mancuso

unread,
Apr 25, 2017, 9:57:41 AM4/25/17
to publice...@googlegroups.com
Es un sistema gestor de bases de datos 
Maneja millones de registros y lo puedes trabajar con VFP sin problemas
Yo uso en la actualidad mariadb 
Es fácil de instalar y usas el conector de MySQL 
Que es otro SGBD 
Hay muchos para elegir
Sección privada de datos lo elijes tu en propiedades del form 
En la ayuda hay mucha información para estudiar 
Ya q es bastante amplio el tema 
Saludos 

Fidel Charny

unread,
Apr 25, 2017, 10:39:53 AM4/25/17
to Comunidad de Visual Foxpro en Español
Ah, Miguel, no puedo con mi manía de "Opinator" (neologismo que surge del inglés "opinion" y el hollywood-Arnold "Terminator")
Para el caso, me suena como tener un perro y ponerle de nombre "Perro". Demasiado obvio para ser bonito.
Particularmente me genera una confusión entre la esencia y la apariencia, lo que a su vez, me azota contra antiguas - a veces, abstrusas - discusiones filosóficas.
Me debo haber colgado con aquello de "género próximo" y "diferencia específica".
Pero hoy no es Viernes y todo esto queda fuera de lugar.
Reply all
Reply to author
Forward
Message has been deleted
0 new messages