Ángel,
> Conocía la existencia del campo RowId, pero, me surgen varias dudas.
> ¿Es únicamente INTEGER PRIMARY KEY? Normalmente en otro SGBD, esto
> implicaría UNIQUE Y NOT NULL, pero en SQLITE no se si sería también así.
Bueno, una clave primaria siempre es UNIQUE, y al insertar un registro, si
se asigna NULL a un campo autoincremental, automáticamente tomará el valor
que le corresponda, no NULL. Por lo tanto, no hace falta indicar esos dos
'flags', ya que son implícitos en este caso.
> A partir de una sentencia INSERT, no sería complicación usar el campo pues
> en el 'autoincremental', insertaría directamente NULL, ej:
> Tabla: Usuarios(ID_Usuario,nombre)
> INSERT INTO USUARIOS(ID_Usuario,nombre) VALUES (NULL,"Usuario1")
Si no recuerdo mal, en SQLite te permite grabar NULL o un valor. Si grabas
NULL, entonces SQLite grabará el valor que corresponda, es decir, el número
más alto que tenga grabado + 1. Y si grabas otro valor, pueden ocurrir dos
cosas:
- Que el valor que indicas sea más alto que el último + 1. Entonces lo
grabará correctamente y ese será el que utilice para calcular el siguiente.
Sirve para alterar (o dejar huecos) en la numeración.
- Que el valor sea inferior al último + 1. Entonces dará un error al grabar.
> ¿Pero como haría esto en un AddNew() de un TDataset? ¿Supongo que sería
> así?
> oDataset:AddNew()
> oDataset:ID_Usuario:=NIL
> oDataset:nombre:="Usuario1"
Exactamente. Eso es lo mejor. Así dejas que sea el propio motor el que
asigne el número que le toque.
> ¿Supongo que lo mejor para mi base de datos, sería eliminar cualquier
> campo tipo incremental? Si existe ya uno automáticamente, veo una
> redundancia volver a crear otro campo cuando ya existe uno que hace la
> función de éste.
Cada cual tiene que ver sus propias necesidades, pero si te sirve de guía,
te puedo decir que yo utilizo claves primarias que no son 'integer' para no
hacerlas coincidir con RowId. Incluso si necesitas tener un campo de tipo
'entero' como clave primaria, puedes usar el tipo 'INT' en vez de 'INTEGER';
con esto se comportará correctamente como número entero, pero sin asimilarlo
a RowId.
> Para crear las bases de datos SQLITE y editar/trabajar con ellas, estoy
> actualmente utilizando una aplicación gratuita de muy buena calidad (y en
> español), os dejo el enlace por si quereis probarla:
>
http://sqliteadmin.orbmu2k.de
Te aconsejo que utilices el editor de SQLite que hay en el propio IDE de
Xailer. Seguramente el que comentas es mejor, pero también es seguro que
tratará las fechas de forma distinta a Xailer, y a la postre tendrás
problemas.
--
Un saludo,
José F. Giménez
http://www.xailer.com
http://www.xailer.info