Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > Tablas planas
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 14-06-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Question Pregunta sobre índices en tablas DBF

Es solo una pregunta antes de estropear algo

Si en una tabla inserto un registro en blanco, pero no hago post, afectará al fichero de índices?

Ejemplo: (el objeto TDbf pertenece al Form)
Código Delphi [-]
procedure TForm1.PasarGridViewToTablas( strTabla:string );
var
  ColorCelda : TColor;
  DatosCelda : string;
  ACol, ARow : integer;
  strClave   : string;
  intUnix    : integer;
  strFecha   : string;
  Y, M, D    : word;
begin
  with Dbf do begin
       Active        := false;
       IndexName     := strTabla;
       TableName     := strTabla + '.dbf';
     { abrir la tabla activa }
       Open;
     { recorrer el GridView }
       for ARow:=0 to GridView1.RowCount-1 do begin
         { evitar el "cualgue" del sistema }
           Application.ProcessMessages;
           strClave := GridView1.Cell[0, ARow].AsString;
           intUnix  := StrToInt( GridView1.Cell[1, ARow].AsString );
           strFecha := GridView1.Cell[2, ARow].AsString;
           Y        := StrToIntDef( Copy(strFecha, 7, 4), 1970 );
           M        := StrToIntDef( Copy(strFecha, 4, 2),   12 );
           D        := StrToIntDef( Copy(strFecha, 1, 2),    1 );
         { localizar el registro por si se hubiera efectuado anteriormente }
           if not SearchKey(strClave, stEqual) then begin
            { añadimos un registro en blanco }
              Append;
            { añadimos la clave del registro y los campos comunes }
              FieldByName('ESTACION').AsString      := strClave;
              FieldByName('FECHA_UNIX').AsInteger   := 0;
           end else Edit;
         { solo modificamos campos si FECHA_UNIX es menor que la actual, saltar el post }
           if( intUnix>=FieldByName('FECHA_UNIX').AsInteger ) then Continue;
             { modificar los datos recibidos }
               ...
             { salvar los datos modificados }
               Post;
       end; { del for }
     { cerrar la tabla activa }
       Close;
  end; { del with Dbf do }
end;
con Delphi-7 y TDbf
Responder Con Cita
  #2  
Antiguo 14-06-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad no entiendo bien la pregunta, a que te refieres con fichero de indices.???
En el ejemplo que muestras haces un append, osea creas un registro nuevo, luego lo editas y posteriormente lo grabas, que indice se afecta?.
Saludos
Responder Con Cita
  #3  
Antiguo 14-06-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Hola Caral.

Lo que quiero decir, es que si una acción Append sin su correspondiente Post afectaría, bien al contenido de la tabla o bien al contenido del fichero de índices, vamos, que si realmente "metería" el registro en blanco
Salu2
salvica
Responder Con Cita
  #4  
Antiguo 14-06-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
La verdad no estoy muy seguro, nunca uso append prefiero insert.
Me parece que el registro no se crea ya que en realidad para que un registro quede consignado se necesita hacer el post.
Ojala no me equivoque, tal vez seria mejor esperar a algún maestro para estar mas seguros.
Lo que si te puedo decir es que con insert no afectaria el registro.
Saludos
Responder Con Cita
  #5  
Antiguo 14-06-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
La verdad no estoy muy seguro, nunca uso append prefiero insert.
Me parece que el registro no se crea ya que en realidad para que un registro quede consignado se necesita hacer el post.
Ojala no me equivoque, tal vez seria mejor esperar a algún maestro para estar mas seguros.
Lo que si te puedo decir es que con insert no afectaria el registro.
Saludos
¿Puedes decirme como funciona el insert?

Lo del append es una "malformación" de cuando usaba DBase y Clipper para programar (con windows 3.1 ) y la costumbre es la costumbre

Salvica
Responder Con Cita
  #6  
Antiguo 14-06-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Es practicamente lo mismo.
Coloca en el codigo que tienes el Insert en donde esta el append y veras que hace lo mismo.
Append= añadir un campo, crear un campo nuevo al final de la tabla.
Insert= Insertar un campo (en este caso podria estar en la parte que le interes a uno)
Saludos
Responder Con Cita
  #7  
Antiguo 14-06-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Es practicamente lo mismo.
Coloca en el codigo que tienes el Insert en donde esta el append y veras que hace lo mismo.
Append= añadir un campo, crear un campo nuevo al final de la tabla.
Insert= Insertar un campo (en este caso podria estar en la parte que le interes a uno)
Saludos
Debería comprobar primero que estoy al final de la tabla, aunque si no encuentra el registro debería estar al final ¿no es cierto?
¿El resto sería igual? Añadir la clave y los campos defecha (en este caso particular)
Gracias por la ayuda
salvica
Responder Con Cita
  #8  
Antiguo 14-06-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Muy sencillo.
Código Delphi [-]
tabla1.last;
Tabla1.inster;
Listo, esta al final.
Saludos
Responder Con Cita
  #9  
Antiguo 14-06-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Siento date la "paliza" Caral
Código Delphi [-]
           if not SearchKey(strClave, stEqual) then begin
            { nos vamos al final }
              Last;
            { añadimos un registro en blanco }
              Insert;
            { añadimos la clave del registro y los campos comunes }
              FieldByName('ESTACION').AsString      := strClave;
              FieldByName('FECHA_UNIX').AsInteger   := 0;
           end else Edit;
Salvica
Responder Con Cita
  #10  
Antiguo 14-06-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Que le pasa al codigo?
Yo lo veo bien, vas al final de la tabla e insertas el registro.
Es lo mismo que tenias con el append.
Creo que se puede eliminar el edit ya que es redundante, verificalo.
Saludos
Responder Con Cita
  #11  
Antiguo 14-06-2008
Avatar de salvica
salvica salvica is offline
Miembro
 
Registrado: mar 2004
Ubicación: Albacete (España) ... En un lugar de la Mancha ...
Posts: 304
Poder: 21
salvica Va por buen camino
Cita:
Empezado por Caral Ver Mensaje
Hola
Que le pasa al codigo?
Yo lo veo bien, vas al final de la tabla e insertas el registro.
Es lo mismo que tenias con el append.
Creo que se puede eliminar el edit ya que es redundante, verificalo.
Saludos
No se trata de eso, el edit está porque si el registro ya existe solo debo modificar el resto de datos (equivale al append de una query) y si no existe entonces debo añadir un registro nuevo. En ambos casos en cursor se queda bien en el registro en blanco añadido, o en el que debo modificar.

Lo que te quería decir, al poner el código anterior, es que si al poner el Insert en vez del Append, el funcionamiento es el mismo.
Salvica
Responder Con Cita
  #12  
Antiguo 14-06-2008
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Si
Saludos
Pd: esta si es una respuesta corta.
Responder Con Cita
  #13  
Antiguo 16-06-2008
Avatar de PepeLolo
PepeLolo PepeLolo is offline
Miembro
 
Registrado: jun 2003
Ubicación: Fuenlabrada - Madrid - Espagna
Posts: 265
Poder: 21
PepeLolo Va por buen camino
Cita:
Empezado por salvica Ver Mensaje
Siento date la "paliza" Caral

Código Delphi [-]
if not SearchKey(strClave, stEqual) then begin
{ nos vamos al final }
Last;
{ añadimos un registro en blanco }
Insert;
{ añadimos la clave del registro y los campos comunes }
FieldByName('ESTACION').AsString := strClave;
FieldByName('FECHA_UNIX').AsInteger := 0;
end else Edit;




Salvica
No necesitas ejecutar el método Last. Insert y Append hacen lo mismo, es preparar el dataset para la incorporación de un registro nuevo. Cuando se ejecute el método .post se guardará el registro en la tabla, pero este no será persistente en la BBDD hasta que no se cierre la transación con Commit.

Un saludo.
__________________
PepeLolo
El hombre el único virus que mide más de unas cuantas micras
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Informacion de tablas e indices Petolansa Varios 1 09-11-2007 10:06:00
indices en tablas anubis Tablas planas 6 02-06-2007 18:58:43
Problemas con indices en tablas dbf robertoliendo Conexión con bases de datos 1 26-05-2005 16:42:19
Tablas Con Indices MaríaMR Conexión con bases de datos 6 29-11-2004 08:40:42
pregunta sobre SQL y tablas docarrillo SQL 7 03-07-2003 13:17:53


La franja horaria es GMT +2. Ahora son las 22:31:28.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi