Uso del commando insert

859 views
Skip to first unread message

Moreno

unread,
Mar 26, 2011, 1:01:48 AM3/26/11
to Comunidad de Visual Foxpro en Español
Hola a todos.

¿Como se controla el commando instert?

Por ejemplo

Registro 1,2,3,4,5

Entre el registro 3 y cuatro deseo insertar un campo arriba o abajo.

El commando insert por default lo pone debajo del registro
seleccionado pero ¿que pasa si lo quierro arriba?

cual el la sintaxys del comando?

Saludos.

ultraton500

unread,
Mar 26, 2011, 3:56:39 AM3/26/11
to Comunidad de Visual Foxpro en Español
Hola Moreno, el comando insert SQL agrega un nuevo registro al final
de la tabla, no debajo del registro seleccionado. Para ubicarlo en un
lugar determinado debes recurrir al ordenamiento de la tabla.
Saludos,
Javier.

Luis Maria Guayan

unread,
Mar 26, 2011, 11:00:37 AM3/26/11
to publice...@googlegroups.com
¿Por que quieres manejar el lugar físico de inserción?

Lo que tu deseas se logra con índices o sentencias SELECT ... ORDER BY ...

Luis María Guayán
Tucumán, Argentina
_________________________
http://www.PortalFox.com
Nada corre como un zorro
_________________________

Alfonso Arias Lemas

unread,
Mar 26, 2011, 12:48:48 PM3/26/11
to publice...@googlegroups.com
INDEX......


De: Moreno <ars...@hotmail.com>
Para: Comunidad de Visual Foxpro en Español <publice...@googlegroups.com>
Enviado: sáb,26 marzo, 2011 04:01
Asunto: [vfp] Uso del commando insert

ultraton500

unread,
Mar 26, 2011, 2:50:44 PM3/26/11
to Comunidad de Visual Foxpro en Español
A la frase "Para ubicarlo en un lugar determinado debes recurrir al
ordenamiento de la tabla" que escribí anteriormente le faltó una
aclaración.
El "ubicarlo" se refiere siempre a ubicar el/los registro/s dentro de
la ventana o control en el que son mostrados.
Para eso se los debe ordenar convenientemente al seleccionarlos o
mediante índices como indican Luis María y Alfonso, pero el orden
físico no se altera.
Espero te sea de ayuda.
Saludos,
Javier.

Carlos Miguel FARIAS

unread,
Mar 27, 2011, 8:42:30 AM3/27/11
to publice...@googlegroups.com
El comando INSERT (sin el INTO nombre:tabla, con clausulas adicionales BEFORE y BLANK), permite insertar un registro fisicamente a continuación del registro actual de la tabla del area donde estas ubicado (lo inserta antes del actual si usas BEFORE).
Esto implica que para hacer dicha operación, por la índole del archivo fisico de VFP (archivo plano, secuencial con registros de longitud fija) que todos los registros posteriores al punto de inserción deban ser copiados al registro siguiente (empezando de atras para adelante).
Eso implica:
a) tener la tabla con uso exclusivo.
b) si la inserción es en una tabla de digamos 10000 registros, implica copiar en promedio 5000 registros.
c) por cada indice que la tabla cuente (los estructurales) implica reescribirlos por cada registro que se copia, mas el que se inserta, tener en cuenta que los estructurales se actualizan si o si aunque no esten expresamente activos, esos se abren "SOLOS".
d) Todos los indices no estructurales quedan "desfazados" por lo que tienen que reindexarse antes de usarse.
e) Ya en la version 2 de foxpro para dos, era considerada una instrucción "para compatibilidad descendente".
f) es mucho mas eficiente, tomar la tabla original, copiarla en otra "temporal", en la temporal, insertar el nuevo registro, copiar el resto de la tabla original, recrear todos los indices en la tabla temporal, tomar uso exclusivo de la tabla original, cerrarla, renombrarla, renombrar la tabla temporal como la original.
g) uso xbase desde dbase II, creo que ni en dbase II use el comando INSERT propio de los xbase.
Saludos: Miguel

Jaime H. Díaz G.

unread,
Mar 28, 2011, 9:28:27 AM3/28/11
to publice...@googlegroups.com
Me uno a la inquietud de Luis María, ya que manejar el lugar físico de inserción obedece a requerimientos muy específicos pero poco frecuentes; he utilizado está técnica (y quiero hacer énfasis en esto) en simulaciones en donde quiero evaluar el comportamiento de mis aplicaciones ante la aparición y procesamiento de un registro con características particulares y la tomé hace unos dos años de un foro en dónde se analizaban diversos orígenes de REGISTROS FANTASMA en algunas aplicaciones de Clipper.
 
Lo he hecho generando una nueva tabla a partir de la tabla original:
 
SELECT 0
SELECT * from MiTabla where recno()<=3300 into table c:\tmps\parte1
SELECT 0
SELECT * from MiTabla where recno()>3300 into table c:\tmps\parte2
SELECT PARTE1
APPEND FROM MiRegistro
APPE FROM PARTE2
SELE 0
SELE * FROM C:\TMPS\PARTE1 INTO TABLE MiTabla
 
y el nuevo registro queda en la tabla original en la posición 3301.

 

 

Carlos Miguel FARIAS

unread,
Mar 28, 2011, 7:00:50 PM3/28/11
to publice...@googlegroups.com
Eso es mas o menos lo que yo planteaba, y no el uso directamente del insert (no INTO), ese planteo que haces es superrapido, y luego sobre la tabla final, recreas los indices que sean necesarios, o si tenes que reconstruir el autoincremental, es mas efectivo si haces el tipo de copia que indicas o sobre una tabla vacia.
Con vfp 9, creas la tabla, solo con el indice autoincremental y usando
INSERT INTO tablainsertada ( los campos ) SELECT los otros campos FROM tablaOrigen WHERE recno()<primeraparte
agregas el registro a insertar
y luego otro
INSERT INTO ( los campos ) SELECT los otros campos FROM tablaOrigen WHERE recno()>=primeraparte
luego recreas los otos indices
Reply all
Reply to author
Forward
0 new messages