Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 29-10-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Estoy usando un campo SI/NO en el caso de anulación, pero aunque no la use el autoincremental tampoco debería subir en el caso de que no se haga la compra, y en la practica aunque se anule la boleta incrementa el n° de factura porque no deberías ser capaz de usar la misma.

Y ahi mi problema... si hago el post al abrir el form el auto incremental sube incluso si cancelo la operación y sino lo hago no veo el numero de factura
Responder Con Cita
  #2  
Antiguo 29-10-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.062
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Por eso te digo que un autoincremental no se usa para números de facturas.
Responder Con Cita
  #3  
Antiguo 30-10-2017
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 11
wilcg Va por buen camino
Hola The Cid James,
quizas te sirva esto, yo uso un autoincremental de esta manera y al mismo tiempo le indico de que numero iniciar y
podras manejar el ID a tu antojo, solo haz como te indico y pruebalo y analizalo si te sirve luego lo personalizas
a tu agrado.

te menciono que uso componentes UniDac, creo que no va haber diferencias con otros componentes.

Necesitaras un Query y renombralo como Generador, vas al Fields Editor -> New Field -> en
Name -> dale un nombre ID
Type -> indica el tipo de campo a INTEGER
Component -> teva a generar un nombre algo asi GeneradorID

luego usa esta FUNCION

Código Delphi [-]
function GenerarID( tTabla, tCampoId :string; tNum :integer): Integer;
var
  NCodigo: Integer;
begin
  with Generador do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT MAX(' + tCampoId );
    SQL.Add(') AS ID FROM ' + tTabla );
    Open;
    NCodigo := GeneradorID.AsInteger;
    if NCodigo = 0 then
      Result := tNum
    else
      Result := NCodigo + 1;
    Close;
    Active := False;
  end;

  {
   USO:   GenerarID( 'clientes','id_cliente',3001);

  ejemplo
  GenerarID( 'clientes',  //Nombre de la tabla
    'id_cliente',  //Nombre del campo a incrementar, tiene que ser numerico, etc
    3001    //Aca le indicas de que numero quieres que inicie por primera vez
    );
  }
end;

NOTA: probado en PostgreSQL y Acces. en SQLite no va hay que adaptarla.
mas claro imposible...
Responder Con Cita
  #4  
Antiguo 30-10-2017
Avatar de The Cid James
The Cid James The Cid James is offline
Miembro
NULL
 
Registrado: jun 2013
Posts: 129
Poder: 11
The Cid James Va por buen camino
Cita:
Empezado por wilcg Ver Mensaje
Hola The Cid James,
quizas te sirva esto, yo uso un autoincremental de esta manera y al mismo tiempo le indico de que numero iniciar y
podras manejar el ID a tu antojo, solo haz como te indico y pruebalo y analizalo si te sirve luego lo personalizas
a tu agrado.

te menciono que uso componentes UniDac, creo que no va haber diferencias con otros componentes.

Necesitaras un Query y renombralo como Generador, vas al Fields Editor -> New Field -> en
Name -> dale un nombre ID
Type -> indica el tipo de campo a INTEGER
Component -> teva a generar un nombre algo asi GeneradorID

luego usa esta FUNCION

Código Delphi [-]
function GenerarID( tTabla, tCampoId :string; tNum :integer): Integer;
var
  NCodigo: Integer;
begin
  with Generador do
  begin
    Close;
    SQL.Clear;
    SQL.Add('SELECT MAX(' + tCampoId );
    SQL.Add(') AS ID FROM ' + tTabla );
    Open;
    NCodigo := GeneradorID.AsInteger;
    if NCodigo = 0 then
      Result := tNum
    else
      Result := NCodigo + 1;
    Close;
    Active := False;
  end;

  {
   USO:   GenerarID( 'clientes','id_cliente',3001);

  ejemplo
  GenerarID( 'clientes',  //Nombre de la tabla
    'id_cliente',  //Nombre del campo a incrementar, tiene que ser numerico, etc
    3001    //Aca le indicas de que numero quieres que inicie por primera vez
    );
  }
end;

NOTA: probado en PostgreSQL y Acces. en SQLite no va hay que adaptarla.
mas claro imposible...
Ahora veo como adapto para sql, estaba pensando exactamente el algo así para la solución e iba a preguntar como podía obtener el valor max para poder hacerlo xD.
Muchas gracias
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
Problemas con autoincremental The Cid James Varios 7 27-10-2017 02:34:59
Trigger autoincremental mjjj SQL 1 24-09-2008 01:55:45
campo autoincremental Jheysson13 Varios 8 13-12-2006 22:35:34
Autoincremental Firebird Puche Firebird e Interbase 3 05-08-2006 15:51:10
Modificar AutoIncremental tarco35 Conexión con bases de datos 6 12-04-2005 20:06:23


La franja horaria es GMT +2. Ahora son las 12:25:41.


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