Club Delphi  
    Paypal   FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2004
Ignacio Ignacio is offline
Miembro
 
Registrado: may 2003
Posts: 77
Poder: 24
Ignacio Va por buen camino
Hola

Quiero aportar mi experiencia con campos autoincrementales. En una aplicación usada simultaneamente por ocho PC, donde todas leen y escriben en la misma base de datos puesta en una de las PC, uso este tipo de campos en todas las tablas y no he tenido problemas (hasta ahora gracias a Dios).

He sentido críticas sobre Paradox y algunas las comparto, pero sobre los campos autoincrementales no.
Responder Con Cita
  #2  
Antiguo 02-03-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
Yo lo digo por mi propia experiencia, al principio los cree, pero por el poco control que tenia sobre ellos no me quedo otra que no usarlos, la mayoria de las fallas eran de diseño pero me encontre en un dilema, o cambiar el diseño o cambiar el tipo de campo, asi que opte por un campo que pudiera controlar
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #3  
Antiguo 02-03-2004
Anabel Anabel is offline
Miembro
 
Registrado: may 2003
Ubicación: D.F. México
Posts: 63
Poder: 24
Anabel Va por buen camino
Hola,

Muchas gracias por los comentarios, el campo Autoincremental ya lo he utilizado en otras tablas, pero para el proceso que estoy haciendo no me es funcional, ya que puede haber dos renglones o mas de mi tabla con el mismo id que viendo lo bien talvez ya no es tan correcto llamarlo id, pues se repite

Una duda Eduardo, cuando en tip que me diste mencionas: Paso 2) Asignar el correlativo. Significa que debo hacer
a) Insertarlo en la tabla en la que voy a guardar los datos??
b) asignarlo a una variable, que utilizaría posteriormente en el Insert??
Disculpa mi ignorancia, pero ahí no me queda claro que hacer

Buen día Chicos
Ana
__________________
Ana
Responder Con Cita
  #4  
Antiguo 02-03-2004
Avatar de eduarcol
[eduarcol] eduarcol is offline
Miembro Premium
 
Registrado: ago 2003
Ubicación: En los estados Zulia y Merida de Venezuela
Posts: 4.151
Poder: 27
eduarcol Va por buen camino
Pues como dices que varios registros deben llevar ese campo lo deberias colocar en una variable y leerlo desde alli, porq si lo lees desde donde lo tienes guardado de nuevo no te va a servir porq ya estaria incrementado

La mejor solucion es antes de Darle el post, leerlo asignarlo a los distintos registros e incrementarlo

Espero me entiendas
__________________
...Yo naci en esta ribera del arauca vibr@d0r
Soy hermano de la espuma,
de la garza, de la rosa y del sol...
Viva Venezuela
Responder Con Cita
  #5  
Antiguo 28-11-2005
Silvestre Silvestre is offline
Registrado
 
Registrado: nov 2005
Posts: 1
Poder: 0
Silvestre Va por buen camino
Campos Autoincrementables en Paradox

Hola!,

El problema presentado es más frecuente de lo que parece!. Yo mismo lo he sufrido en mis carnes en una aplicación realizada en Delphi con Paradox 7 que corre en red, tardo dos años en corromper los indices, pero al final lo hizo, que nadie se confie!!.

Utilizaba un campo <codigo> como clave primaria autoincrementable y en cierto momento aperecio el mensaje "key violation", la solución es utilizar como clave primaria un campo gestionado por uno mismo y aumentarlo antes del BeforePost en una tabla a parte..., esto ya lo han explicado claramente en los mensajes previos.

Si alguien tiene ese problema y tiene el campo enlazado con otras bases de datos y por tanto quiere conservar el indice para no destruir la integridad referencial, puede añadir un nuevo campo indice a la tabla de tipo Long Integer con el programa Database Desktop y ejecutar la siguiente consulta SQL:

UPDATE tabla_La_que_sea SET Nuevo_Indice = Codigo (el que estaba corrupto). Después evidentemente habra que cambiar el codigo fuente para utilizar el nuevo indice, gestionado esta vez por nosotros mismos. Mi consejo es que nadie utilice campos autoincrementables en paradox si no quiere tener un disgusto cuando menos los espere!!!.

Silvestre.
Responder Con Cita
  #6  
Antiguo 29-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Ignacio esto se debe a la forma de trabajar en esa "empresa", basta con que dos usuario se pongan a crear albaranes a la misma vez para que te salte el error de clave duplicada.

Es mas simple de lo que parece. Usuario A da a Insertar un registro, en este punto Usuario B hace lo mismo (como el A todavía no ha guardado, el albaran de B tendrá el mismo número que el de A); En este momento el segundo que le dé a guardar obtiene el precioso mensaje de Clave Duplicada.

Si se opta porque al insertar un registro, se haga un post automático; en el ejemplo anterior no habría problemas, salvo que el usuario A cambie de parecer y anule el albaran, en este caso, se produce un salto, ya no son correlativos.

Solución: La del primer mensaje propuesto por Anabel y repetir el proceso en el evento BeforePost. (para arreglar todo lo dicho en este mensaje).

Por supuesto, la óptima solución es usar una verdadera BBDD cliente-servidor como Firebird.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #7  
Antiguo 29-11-2005
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 31
Lepe Va por buen camino
Código Delphi [-]

function NuevoId(D:TTable; campoIncrento:String):Integer;
var T:TQuery;
begin
try
  Result:=0;
  T := Tquery.Create(nil);
  T.DatabaseName := D.DatabaseName;
  // demás parámetros que se deba configurar.
  
// es muy facil equivocarse al pasar el nombre del campo incrementable, 
// así que tenemos en cuenta el error.
  if d.FindField(campoIncremento)= nil then
    raise Exception.Create('El campo '+ campoIncremento + 
                                'no está en la tabla '+ D.TableName;

  T.sql.text := 'select '+campoIncremento + ' from '+ D.Tablename + 
                     ' order by '+CampoIncremento + ' Desc;'
  T.Open;
  Result := t.Fields[0].AsInteger + 1;
  T.Close;
finally
  Freeandnil(T);
end;
end;

Y ya podemos usar nuestra rutina para todas las tablas que queramos.

saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #8  
Antiguo 29-11-2005
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por Lepe
Ignacio esto se debe a la forma de trabajar en esa "empresa", basta con que dos usuario se pongan a crear albaranes a la misma vez para que te salte el error de clave duplicada.
Pobre Paradox tan vilipendiado. ¿De dónde, por dios, han sacado esto?


Cita:
Empezado por Lepe
Es mas simple de lo que parece. Usuario A da a Insertar un registro, en este punto Usuario B hace lo mismo (como el A todavía no ha guardado, el albaran de B tendrá el mismo número que el de A); En este momento el segundo que le dé a guardar obtiene el precioso mensaje de Clave Duplicada.
Prueba hecha ahora mismo, y no hay ningún error de clave duplicada. ¿Qué no estamos hablando de autoincrementales? Paradox no asignará el valor del autoincremental sino hasta el momento de hacer el post, y en ese momento bloquea la tabla para evitar colisiones.

// Saludos
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

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


La franja horaria es GMT +2. Ahora son las 06:44:17.


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