Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 27-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
No trabaja el autoincremental

Tenia el siguiente problema con un form =>hilo del problema

El problema era que al abrir el form ejecutaba el post al abir el form

Código Delphi [-]
  fmodulo.tVenta.Active := true;
  fmodulo.tVenta.Insert;
  fmodulo.tVenta.Edit;
  fmodulo.tVenta.Post; // este codigo fue el que removí para solucionarlo
  fmodulo.tVentadetalle.Active :=true;
  fventa :=tfVenta.Create(self);
  fVenta.ManualDock(dp1);
  fVenta.Align := alclient;
  fventa.Show;

Pero ahora la aplicacion no trabaja como corresponde, no me genera el id_venta automaticamente por lo cual mi pregunta seria como puedo generar el id_venta si no hago el post antes hacer el post al abir el form sin que vuelva a tener el problema de que me genere registros de ventas como en el hilo que puse al principio

Gracias por su tiempo
Responder Con Cita
  #2  
Antiguo 27-10-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tendrás que dar más información, no vemos tu ordenador desde aquí
Responder Con Cita
  #3  
Antiguo 27-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 Casimiro Notevi Ver Mensaje
Tendrás que dar más información, no vemos tu ordenador desde aquí
A ver así, tengo dos form uno venta y uno principal en el principal tengo un botón que dice nueva venta (el código que pase) y abre venta que tiene el dbedit que extrae el dato de N° de venta que es un autoincremental en la base de datos.
Cuando tenia el código que saque me daba el numero de venta osea que auto incrementaba normalmente cuando creaba el formulario y hacia el post, ahora que lo saque no hace nada.
Responder Con Cita
  #4  
Antiguo 27-10-2017
Avatar de ElDioni
[ElDioni] ElDioni is offline
Miembro Premium
 
Registrado: jul 2005
Ubicación: Murcia (España)
Posts: 935
Poder: 19
ElDioni Va por buen camino
No se que es lo que quieres conseguir o que es lo que no consigues, de todas formas si que veo algo raro en tú código y es estas dos líneas:

Código Delphi [-]
fmodulo.tVenta.Insert;
fmodulo.tVenta.Edit;

Haces un insert y a continuación un edit en el mismo objeto, creo que el Edit sobraría.

Saludos.
__________________
Confórmate con lo que tienes pero anhela lo que te falta.
Responder Con Cita
  #5  
Antiguo 28-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 ElDioni Ver Mensaje
No se que es lo que quieres conseguir o que es lo que no consigues, de todas formas si que veo algo raro en tú código y es estas dos líneas:

Código Delphi [-]
fmodulo.tVenta.Insert;
fmodulo.tVenta.Edit;

Haces un insert y a continuación un edit en el mismo objeto, creo que el Edit sobraría.

Saludos.
No tiene nada que ver con el problema pero si tenes razon, gracias
Responder Con Cita
  #6  
Antiguo 28-10-2017
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Tienes un problema de "concepto" en el desarrollo, o también puede ser que no lo haya entendido, ¿para qué quieres saber el número autoincremental? y ¿exactamente qué es ese número, un ID para claves primarias, o un número sucesivo como el de una factura, por ejemplo?
Responder Con Cita
  #7  
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
Es el n de factura por eso es un autoincremental y al abrir el form de la forma que hacia antes (con el post en el botón del llamado)me lo mostraba,el problema que de esa forma aunque no se facturara (se cancelara la venta por ejempo ) igual el autoincremental subia por eso el hilo anterior
Responder Con Cita
  #8  
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.038
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
No puedes usar un autoincremental para el número de factura, porque a veces puede que canceles alguna, borres, etc. y se perderían números. Para el número de factura debes usar el "último+1".
Responder Con Cita
  #9  
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
  #10  
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.038
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
  #11  
Antiguo 30-10-2017
wilcg wilcg is offline
Miembro
 
Registrado: abr 2014
Posts: 107
Poder: 10
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
  #12  
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


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

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 21:57:11.


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