Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Coloboración Paypal con ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #21  
Antiguo 26-09-2008
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
El riesgo de los campos autoinc es que si por un casual se nos ocurre que sean índice para establecer una relación maestro-detalle, por ejemplo una factura y sus líneas. Si por algún motivo falla, tiene efectos desastrosos pues nos borraría facturas.

Me explico, tengo una tabla de facturas y otra líneas, por el motivo que sea decido importar la tabla de facturas completa a una nueva tabla, por ejemplo por alguna corrupción que ha sufrido, a partir de aquí la nueva tabla es posible que no coincida el autoincremento que llevabamos y por lo tanto la relación maestro-detalle se vuelve azarosa.

Si además el autoincremento por el motivo que fuere cambia irá machacando todas las facturas que sea superiores, hablo por experiencia, pues en una ocasión un sistema perdía recibos por suerte descubrí pronto que por un trasvase a otra tabla el autoincremento se había vuelto inferior al que llevaba la tabla antigua.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #22  
Antiguo 27-09-2008
Avatar de Softweb
Softweb Softweb is offline
Miembro
 
Registrado: ago 2008
Posts: 46
Poder: 0
Softweb Va por buen camino
Hola te paso una funcion para hacer lo que tu quieres.

Código Delphi [-]
function GenerarId(KeyField, TableName, Condicion: string): Integer;
var
  NewValue: Integer;
begin
  NewValue := -1;
  Query1.Close;
  Query1.SQL.Clear;
  if Condicion <> '' then
    Query1.SQL.Add('SELECT Max( '+KeyField+' ) AS MAXIMO FROM '+TableName+ ' WHERE '+Condicion)
  else
    Query1.SQL.Add('SELECT Max('+KeyField+') AS MAXIMO FROM '+TableName);
  Query1.Open;
  // Si no hay registros en la tabla la consulta devuelve null
  if VarIsNull( Query1.FieldValues[ 'MAXIMO' ] ) then
    NewValue := 1 // valor para el primer registro de la tabla
  else
    NewValue := Integer( Query1.FieldValues[ 'MAXIMO' ] ) + 1;
  Query1.Close;
  Result := NewValue;
end;

Para usarla es asín.

Código Delphi [-]
NuevoNumero := GenerarId('num_veh','vehiculos.db', '');

O si lo quieres con alguna condicion.

Código Delphi [-]
NuevoNumero := GenerarId('num_veh','vehiculos.db', 'Fecha > ''01/06/2008''');


Saludos
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
Mostrar Registros Mayor que lKinGl SQL 35 01-06-2008 21:10:29
consulta del numero mayor de subregistro Yun-i Varios 21 29-02-2008 18:47:10
Insertar numero en tabla paradox dayser C++ Builder 8 24-07-2006 20:23:47
¿Qué quieres ser de mayor? kinobi Humor 16 11-07-2003 13:46:30


La franja horaria es GMT +2. Ahora son las 06:23:51.


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