Utilizamos cookies propias y de terceros. Al navegar entendemos que aceptas el uso de cookies. +Info.
Política de cookies
Proyecto AjpdSoft

· Inicio
· Buscar
· Contactar
· Cookies
· Descargas
· Foros
· Historia
· Nosotros
· Temas
· Top 10
· Trucos
· Tutoriales
· Usuario
· Wiki

Función para generar autoincremento con consulta sql - Delphi
Lenguaje de programación Borland Delphi



Os mostramos un ejemplo de función que genera un número autoincremento en Delphi. Esta función escribe el último número generado para incrementarlo la próxima vez que sea llamada. Realiza el autoincremento por tabla, en función del nombre de tabla que se le pasa como parámetro. Si no existe el registro de la tabla pasada como parámetro en la tabla "contador" lo creará automáticamente. A continuación os mostramos la estructura de la tabla donde se guardarán los contadores actuales por tabla:

CREATE TABLE `contador` (
  `tabla` varchar(100) NOT NULL default '',
  `contador` int(10) unsigned default NULL,
  PRIMARY KEY  (`tabla`)
)
Esta función se creó para utilizarla con Delphi y como motor de base de datos MySQL, aunque es perfectamente extensible para cualquier lenguaje de programación (Visual Basic, Java, etc) y cualquier motor de base de datos (Oracle, SQL Server, Informix, DB2, etc). Para poder utilizar esta función necesitaremos tener un módulo de datos llamado "md" y un TQuery con permisos de modificación llamado "tcContador". Podríamos prescindir de estos dos componentes creando el TQuery en tiempo de ejecución:
function generarCodigoAuto (tabla : string) : integer;
var
  contador : integer;
begin
  result := 1;
  with md.tcContador do
  begin
    Close;
    SQL.Clear;  //obtenemos el contador de la tabla contadores
    SQL.Add('SELECT *');
    SQL.Add('FROM ' + vtTablaContador);
    SQL.Add('WHERE tabla = :pTabla');
    ParamByName('pTabla').DataType := ftString;
    ParamByName('pTabla').AsString := tabla;
    Open;
    if not (md.tcContador.FieldByName('Contador').AsInteger = 0) then
    begin
      try
        contador := FieldByName('contador').AsInteger + 1;
        //Incrementamos el contador de la tabla contadores
        Close;
        SQL.Clear;
        SQL.Add('UPDATE ' + vtTablaContador +
            ' SET contador = :pContador WHERE tabla = :pTabla');
        ParamByName('pContador').DataType := ftInteger;
        ParamByName('pContador').AsInteger := contador;
        ParamByName('pTabla').DataType := ftString;
        ParamByName('pTabla').AsString := tabla;
        ExecSQL;
        close;
        result := contador;
      except
        Close;
        result := 1;
        MessageDlg ('El código no ha podido generarse automáticamente.', 
            mtError, [mbOK], 0);
      end;
    end
    else  //si no existe el registro de contador para la tabla actual, lo creamos
    begin
      try
        Close;
        SQL.Clear;
        SQL.Add('INSERT INTO ' + vtTablaContador +
            ' (tabla, contador) ' +
            ' VALUES (:pTabla, 1)');
        ParamByName('pTabla').DataType := ftString;
        ParamByName('pTabla').AsString := tabla;
        ExecSQL;
        result := 1;
        Close;
      except
        Close;
        MessageDlg ('El contador no se ha guardado correctamente.', 
            mtError, [mbOK], 0);
      end;
    end;
  end;
end;
Nota: la constante "vtTablaContador" tendrá el valor del nombre de la tabla donde se almacenan los contadores, en nuestro caso vtTablacontador = 'contador'. Un ejemplo de llamada:
...
var
  contadorActual : integer;
begin
  ...
  contadorActual := generarCodigoAuto ('clientes');
  ...
end;




Publicado el: 2007-01-24

Este sitio web NO CONTIENE malware, todos los programas con código fuente aquí. Autor: Alonso Javier Pérez Díaz Google+ Síguenos en Google+