Ver Mensaje Individual
  #4  
Antiguo 03-02-2009
Avatar de movorack
[movorack] movorack is offline
Miguel A. Valero
 
Registrado: feb 2007
Ubicación: Bogotá - Colombia
Posts: 1.346
Reputación: 20
movorack Va camino a la famamovorack Va camino a la fama
Supertarde...

si aún te sirve el dato tambien puedo aprtarte algo.

Al crear la tabla puedes hacer que postgres cree la secuencia por ti...

Código SQL [-]
CREATE TABLE schema.table (
  field_id  SERIAL ...
);

El tipo de dato SERIAL es en realidad un entero que ordena a postgres crear la secuencia, el triger y el default en tu tabla.

así mismo puedes usar un BIGSERIAL que es el equivalente al BIGINT.

----

Las secuencias son efectivas pero tienen un pequeño problema si las usas en el default (comportamiento por defecto al usar SERIAL y BIGSERIAL).

es que cuando intentas hacer un insert y cancelas... la secuencia de todos modos generá un consecutivo. esto es un PROBLEMA para facturas, recibos y consecutivos que no pueden alterarse.

----

Pues no se si es lo más correcto pero tengo esta funcion para obetener el autonumerico...

Código SQL [-]
CREATE OR REPLACE FUNCTION "public"."getnextid" (
  tablename varchar,
  fieldname varchar,
  incvalue NUMERIC
) RETURNS NUMERIC AS
$body$
DECLARE
 rec RECORD;
 var_max NUMERIC;
BEGIN
  FOR rec IN EXECUTE 'Select CAST(max('|| FieldName ||') AS NUMERIC) as maxid from ' || TableName LOOP
   var_max := rec.maxid::NUMERIC;
  END LOOP;
 
  IF var_max IS NULL THEN
   RETURN 1;
  ELSE
   RETURN var_max + IncValue;
  END IF;
 
  RETURN 1;
END;
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

y pues así las uso...

Código SQL [-]
CREATE TABLE schema.table (
  field_id  INTEGER ... DEFAULT getnextid('schema.table', 'field_id', 1) ...
);

----

Pues espero que halla sido de tu ayuda.


por cierto con los componentes...

existen varias formas de conectar a postgres desde delphi...

1. ADO (Ya la vistes)
2. ODBC : En la misma página de PostgreSQL se puede descargar el controlador ODBC para postgres... la conexión la terminas haciendo con BDE desde delphi...
3. conexión directa con ZEOS Lib... bueno ZEOS Lib no lo he trabajado pero me dicen que es muy bueno...
4. si tienes presupuesto.... PostgresDAC... se usa casi de la misma forma que usas BDE y tiene un excelente rendimiento.

espero que te ayude en algo... aunque SUPERTARDE.
__________________
Buena caza y buen remar... http://mivaler.blogspot.com
Responder Con Cita