Insertar físicamente un registro en una tabla es algo tan viejo como dbase II .
Exige tabla en uso exclusivo.
No puede usarse ningún tipo de Buffer
El tiempo para insertar un registro en forma cuadrática al crecimiento de la tabla.
Es mas rápido.
Copiar la tabla hasta el registro anterior. Agregar el nuevo en la tabla destino y luego copiar el resto de la tabla.
Además, es una lógica que solo funciona con tablas nativas.
Y no si el tener índices impide hacer inserción física pero que cada índice te dobla el tiempo, fácil.
Y si la tabla no es local, te encargas de apagar la luz a la noche cuando te vayas, el día siguiente.
Saludos: Miguel, La pampa (RA)
Si te fijas en la ayuda, el comando INSERT [BEFORE][BLANK] solo sigue existiendo en Visual Foxpro para mantener compatibilidad hacia atrás.
Ya en la época del FoxPro 2.6 DOS/Windows era considerado un comando obsoleto y que ya no debería ser utilizado con las modernas "bases de datos". Se recomienda usar APPEND o INSERT - SQL.
Creo recordar que el comando INSERT solo trabaja correctamente sobre tablas LIBRES y sin índices. Si el archivo está indexado, el INSERT funcionará como un APPEND y mandará el registro al final de la tabla.

Misael. El comando insert necesita la tabla en exclusiva, y no puede usar Buffer. Y si la tabla es grande es impracticable,
Si quieres manejar registros en orden, crea un campo de orden. Puede ser un numerco con decimales.
Las operaciones las vas numerando de 1 en 1.
Cuando necesitas insertar, al nuevo registro le das un valor promedio de los números de orden entre los cuales quieres insertar (por ejemplo, quieres insertar entre el 14 y el 15. Entonces el numeró de orden le das un valor 14,5 (14.5) y con un índice sobre el campo orden,, al activar el correspondiente, obtienes el registro en la ubicación deseada.
Los registros los ubicas físicamente siempre al final, pero el campo orden te los ubica en la ubicación "lógica" requerida.
Saludos: Miguel, La Pampa (RA)
Buenas Noches, ammm... veamos para no enredarlos la cosa esta asi, el por que lo hice asi? pues me resulto mas practico pero bueno funciona a todo esto va lo siguiente y del por que el origen de mi cuestion espero poder ser lo mas concreto especifico y entendible posible para poder darle solucion con su ayuda :D
Leonardo. Si la tabla es compartida, hasta el fox 2.0 para red te hace los bloqueos automáticos. No necesitas sesión privada para eso.
Acá se esta discutiendo el insert de dbase, no el de SQL.
El de SQL te inserta al final de la tabla. Igual que el append blank, con la diferencia que no usas luego replace.
El insert físico. Necesita uso exclusivo. bloqueos?
Y si supieras como trabaja, sabrias que el fox toda la tabla, inserta el registro correspondiente, y escribe la tabla de nuevo.
O sea. La tabla va y viene por toda la red.
Y no contesto más. Hasta que no haya un pregunta seria de este tema. Me arto.
Quieren comer una pizza, y se quejan de que se les quema la torta de manzanas usando peras
Saludos: Miguel, La Pampa (RA)
No me molestan los mortales. Solo los equivocados que creen tener razón sin argumentos.
Trato de dar una solución y salen cualquier p....s .
Indico una solución y no dicen no entendí. Hacen aseveraciones que ni siquiera corresponden a la pregunta inicial.
Entonces, me molesto porque veo que pierdo tiempo, ofreciendo ayuda, que encima te recriminan porque no les gusta, o peor, no la entienden.
Y la frase, me resbala, si no creo en dioses (mal) documentados, menos voy a creer en los sin documentos.
No me molestan las preguntas, me molestan los que se meten a opinar sin saber ni peor, sin razonar.
Saludos al resto del foro.
Se incluye por compatibilidad con versiones anteriores. Use APPEND o INSERT - SQL en su lugar.
Vos ves
La pregunta original era sobre el insert físico, no el de SQL.
Y no he necesitado usar sesiones privadas para multiusuario. La sesión privada independiza en una aplicación la forma en que se abren las tablas.
En una sesión la abres con alias, le activas un índice y te posicionas en cualquier registro, y en otra sesión, le podes dar otro alias ubicar te en otro lado sin alterar la primera sesión.
Dentro de la misma corrida. Por supuesto, que si en dos sesiones que res tener abierta la misma tabla. Debes abrir las compartidas.
Y el famoso insert físico exige uso exclusivo.
Seuo
Saludos: Miguel, La Pampa Argentina. El Olimpo esta en Grecia. (;-D
Hola buenas tardes por lo que veo aca se puso la cosa color de hormiga, pero bueno yo soy de mexico y aca hay una frase tipica viejisima que dice "a lo que te truje chencha"
Ricardo. El monte Olimpo original, esta en Grecia, Marte es el nombre de un dios de la mitología griega que ponía a sus dioses en el monte Olimpo. Si es cierto que en el planeta Marte hay un volcán (?) Denominado Olimpo y resulta ser el accidente geográfico solido conocido mas grande del sistema solar (30km de altura).
Y si es cierto, no estoy en el monte Olimpo ni me baje de el.
Y Thor que yo sepa, es un dios de la mitología nórdica y no griega,
Misa el, pasa me la estructuras de tus tablas y veo mañana de tirar te un solución. Ahora desde la tablet, me cuesta un contenedor de futura descendencia darte una respuesta apropiada.
Saludos: Miguel, La Pampa (RA)
Existe una extructura de datos llamada PILAS , donde se aplica el algoritmo para insertar o sacar registros del archivo en cualquier posición , no es aplicable a las DBF ya que estas manejan la estructura de datos de Filas o listas , los registros se añaden al final de la fila o de la lista , cuando se quita un registro se reordena el archivo. El caso de trabajar en EXCEl para insertar un registro , o fila notas que las celdas se reordena automáticamente. , debes entonces utilizar un método o algoritmo de inserción que copie ese modelo.
JM
Aclaro que si repito los todos los datos (clientes, teléfono, etc.) de la tabla dbf_pagos a dbf_ctasxcobrar como te comento por que fungiria como tabla temporal
El pos data, estaba asociado a la broma sobre el SGBD MariaDB que reembplazaria mysql.
Indique que No se metieran porque Maria DeBe y entonces. Quien paga?
No seria mejor al adicionar un nuevo pago que primero este ordenado por fecha del pago y que luego recupere los datos de pago del cliente es decir obtener todos los pagos realizados y ya con esos datos recalcular nuevamente los saldos visualizados, no se, se me ocurre, ahora para el caso de saldos por líneas, lo que yo hago es obtener los items en este caso seria tus pagos y una vez obtenidos realizo los cálculos de saldos por cada línea, así me evito estar recalculando los saldos por línea cada vez que adiciono un nuevo elemento, pudiendo ocurrir que me inserten un movimiento posterior o anterior al que tiene el ultimo saldo anterior cosa que creo que es lo que tienes y te complica la cosa.Un ejemplo simple de algo parecido es un kardex de productos, cuando lo visualizo doy los saldos por línea pero en realidad en la BD dicho saldo no existe solo lo calculo al momento que lo visualizo, así si alguien se olvido de ingresar una compra en una fecha posterior solo lo adiciona y no tengo mayor inconveniente ya que al volver consultar y realizar el calculo de saldo por línea este se visualiza sin problemas ya que solo se hace en ese momento de la consulta.SaludosEl 23 de abril de 2013 19:33, Misael Rocha P <misael....@gmail.com> escribió:
Hola buenas tardes a todos, les agradezco arti..., Miguel, Analyzer, RickDeCastro su apoyo, pues bueno si entiendo que tal vez no tenga logica del por que o para que necesito insertar un registro en medio de varios, lo que pasa que con la situacion de cobranza, pagos, cuentas por cobrar, resulta que si un registro de la tabla dbf_ctasxcobrar lo recuperan, lo busca en la tabla dbf_pagos, y lo añade al ultimo registro que tenga saldo y debe ser exactamente en esa posicion para que recalcule el saldo, que les comento que al mandar el error y dar ignorar lo hace, y pues si inserto el registro de manera convencional me lo posiciona al final y entonces se pierde continuidad y no recalcula el saldo pues de 14 registros puede que vaya en el decimo por decir algo y en ese decimo registro este el saldo actual, se que tal vez sea algo complicado la idea o el modo en que quiero que el programa funcione pero por la necesidad asi es como debe de ser!!! lamentablemente la tabla a la que se le va a añadir el registro tiene y debe de contener indice y buffering y el set exclusive off existe pues mas de uno ocupan el programa y como se ve en mi caso ese comando no resultaria obsoleto salvo casos muy especificos o raros que es el mio!!!Entonces no hay alguna otra manera para qeu ese error no me aparezca? o puedo caputar el error y transformarlo en un messagebox? ¿Uds. que opinan?Saludos y Gracias
SET DATE BRITISH
SET CENTURY on
CREATE cursor MiTabla (fecha d, Ingreso n(12,2),Egreso n(12,2),Saldo n(12,2))
INSERT INTO MiTabla VALUES(CTOD("30/04/2013"),167,0,0)
INSERT INTO MiTabla VALUES(CTOD("15/05/2013"),167,0,0)
INSERT INTO MiTabla VALUES(CTOD("20/05/2013"),50,0,0)
INSERT INTO MiTabla VALUES(CTOD("24/05/2013"),0,140,0)
SELECT a.Fecha, a.SaldoAnterior, a.ingreso, a.egreso, sum(b.ingreso - b.egreso) AS saldo;
FROM MiTabla AS a INNER JOIN MiTabla AS b ON b.Fecha <= a.Fecha;
GROUP BY a.Fecha, a.ingreso, a.egreso, a.SaldoAnterior;
ORDER BY 1 ASC
Jose. Respondes un mes después del hilo original!?