Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Asignar numero incremental (https://www.clubdelphi.com/foros/showthread.php?t=83431)

Caren 17-06-2013 19:48:05

Asignar numero incremental
 
Estoy trabajando con delphi 7, base de datos acces y con los componentes de ADO.
En la base de datos he creado dos tablas, una de clientes y otra configuración de números.
En la de clientes tengo un campo que es clave principal pero no le he puesto que sea autonumerico ya que el programilla es para mi hermana y tiene una forma de numerar las cosas, yo no las entiendo, por eso estoy mirando de hacerlo de esta forma, y en la otra, la de configuración de números, un campo en la que pueda poner un numero, clave o lo que sea que ella quiera.
Lo que me gustaría hacer si se puede es que el campo que es clave principal tome el dato del de configuración de números y a la vez que este ultimo suba un numero para el siguiente registro, a si no habrá repetidos.
He estado mirando en innumerables paginas y he probado hacer casi de todo no dando ningún tipo de resultado, ya casi estoy por tirar la toalla y ponerlo como autonumerico. O la cosa es muy fácil y se me escapa o es imposible de hacer.
Quiero decir que soy totalmente nuevo en esto de programar y la cabezota que me dio Dios es un poco dura de mollera.
Gracias

ecfisa 17-06-2013 19:55:06

Hola Caren y bienvenida/o a Club Delphi :)

Como a todos los que recien ingresan te invitamos a que leas nuestra guía de estilo.

En cuanto a tu consulta, revisa el mensaje #2 de este hilo.

Saludos. :)

Caren 17-06-2013 21:30:20

Pongo este codigo y no me va, soy nuevo en esto de programacion y seguro que me dejo algo pero no se el que:

Código Delphi [-]
procedure TAltaClientes.FormCreate(Sender: TObject);
 var
  Ultimo : Integer;
begin
  // Obtener el último ID de cliente de la tabla "ConfigurarNumeros"
  // incrementarlo en uno y almacenarlo en la variable Ultimo
  Ultimo := ADONumeros.FieldByName('CodClientes').Value + 1;

  // Agregar un registro en tabla "Clientes"
  ADOClientes.Insert;
  // Asignarle el ID (Codigo) de cliente
  ADOClientes.FieldByName('CodCliente').Value := Ultimo;
  { Asignar los demás valores del cliente
  }
  ADOClientes.Post;  // Guardar

  // Actualizar ultimo cliente en tabla "Configurar Numeros"
  ADONumeros.Edit;
  ADONumeros.FieldByName('CodCliente').Value := Ultimo;
  ADONumeros.Post; // Guardar
begin
 ADOClientes.Active:=  True;
end;


se me para en adonumeros
Gracias

Casimiro Notevi 17-06-2013 22:04:23

Bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración :)


Recuerda poner los tags al código fuente, ejemplo:



Gracias :)


Y no mezcles mensajes entre los distintos hilos, tu mensaje anterior lo he movido aquí para no mezclar con el otro. Gracias.

Neftali [Germán.Estévez] 18-06-2013 10:41:12

Cita:

Empezado por Caren (Mensaje 462363)
se me para en adonumeros

¿Te refieres a la linea donde consultas el último?
¿Exactamente qué error te da?

¿Tienes abierta la tabla ADONumeros?
Si no lo has hecho, ábrela (Open) y ves al último registro (Last).

Caren 18-06-2013 11:59:53

El error me lo da esta linea:
Código Delphi [-]
Ultimo := ADONumeros.FieldByName('CodClientes').Value + 1;

En el ADONumeros y me marca:
Código Delphi [-]
Build
  [Error] Unit2.pas(142): Undeclared identifier: 'ADONumeros'
  [Error] Unit2.pas(142): Missing operator or semicolon
  [Error] Unit2.pas(142): Missing operator or semicolon
  [Error] Unit2.pas(146): Missing operator or semicolon
  [Error] Unit2.pas(147): Missing operator or semicolon
  [Error] Unit2.pas(147): Missing operator or semicolon
  [Error] Unit2.pas(148): Missing operator or semicolon
  [Error] Unit2.pas(156): Statement expected but 'PROCEDURE' found
  [Fatal Error] Pasgon.dpr(10): Could not compile used unit 'Unit2.pas'

Muchas gracias por tu interes, esto pasa por ponerse a hacer estas cosas a mis años.

Neftali [Germán.Estévez] 18-06-2013 13:13:28

Pues el error está claro: "No encuentra en ese formulario o unit el elemento ADONumeros".
Undeclared identifier: 'ADONumeros'

Tendrás que hacer el USES de la unit donde esté definido.

Caren 18-06-2013 15:53:06

Haber si me explico. El codigo usado es uno que me recomendo ecfisa en el segundo mensaje, el ADONumeros y el ADOClientes son dos adotables uno en cada formulario, si los pongo en el uses me da el mismo error pero hay en el uses.
Si cambio ADONumeros por el nombre de la tabla ConfigurarNumeros y el ADOClientes por AltaClientes no me deja poner FieldByName el error me salta hay y entonces no se que poner en su lugar. Si podeis miraros un poco el codigo puesto en el 2º mensaje y me decis que estoy haciendo mal o que me falta.
Muchas gracias.

ecfisa 18-06-2013 16:23:56

Hola Caren.

Cita:

..
ADONumeros y el ADOClientes son dos adotables uno en cada formulario
...
Es que eso precisamente es lo que te insinuó Neftali cuando te explica la procedencia del error:
Cita:

"No encuentra en ese formulario o unit el elemento ADONumeros".
A ver... Suponiendo ADOClientes está localizado en TAltaClientes y que el formulario donde está situado ADONumeros se llame FrmNumeros, el código del mensaje #3 tendría que ser:

Código Delphi [-]
...
implementation

uses unitFrmNumeros; // Nombre de la unidad donde está declarado FrmNumeros
  
procedure TAltaClientes.FormCreate(Sender: TObject);
 var
  Ultimo : Integer;
begin
  Ultimo := FrmNumeros.ADONumeros.FieldByName('CodClientes').Value + 1;
  
  ADOClientes.Insert;
  ADOClientes.FieldByName('CodCliente').Value := Ultimo;
  ...
  ADOClientes.Post; 

  FrmNumeros.ADONumeros.Edit;
  FrmNumeros.ADONumeros.FieldByName('CodCliente').Value := Ultimo;
  FrmNumeros.ADONumeros.Post; 
end;
Ya que si ADONumeros no reside en el mismo formulario, Delphi no puede adivinar donde lo hace. Tenes que indicárselo explícitamente.

De todos modos te recomiendo el uso de al menos un TDataModule para agrupar los componentes no visuales (ADOConnection,ADOQuery, ADOTable, etc).

Saludos. :)

Caren 18-06-2013 18:09:12

Bueno gracias a todos ya lo tengo resuelto.
Si me decis como pongo los tags al código fuente que me dijeron que los pusiera en el cuarto mensaje pongo el codigo.
A falta de eso doy por cerrado el problema.
Muchisimas gracias a todos.

ecfisa 18-06-2013 18:22:19

Cita:

Empezado por Caren (Mensaje 462402)
Bueno gracias a todos ya lo tengo resuelto.
Si me decis como pongo los tags al código fuente que me dijeron que los pusiera en el cuarto mensaje pongo el codigo.
A falta de eso doy por cerrado el problema.
Muchisimas gracias a todos.

Hola.

Me alegra que lo resolvieras :), en el mensaje (#4), Casimiro ya te había puesto una imágen explicativa.

Saludos. :)

Caren 18-06-2013 18:28:37

Si pero no me dice con que programa o complemento de todas formas lo subo tal cual aunque me heche la bronca.

Código Delphi [-]

procedure TAltaClientes.JvHTButton5Click(Sender: TObject);
var
Ultimo : Integer;
begin
Ultimo := ConfigurarNumeros.ADONumerosCodClientes.Value + 1;
ADOClientes.Open;
ADOClientes.Insert;
ADOClientes.FieldByName('CodCliente').Value := Ultimo;
ADOClientes.Post;
ConfigurarNumeros.ADONumeros.Edit;
ConfigurarNumeros.ADONumerosCodClientes.Value := Ultimo;
ConfigurarNumeros.ADONumeros.Post;
end;

Reitero las gracias con todo el corazon, estaba muy atascado y apunto de abandonar.

Casimiro Notevi 18-06-2013 18:30:09

Amiga, te lo copio aquí otra vez ;)
Recuerda poner los tags al código fuente, ejemplo:



Gracias :)

Caren 18-06-2013 18:57:30

Bueno Casimiro y eso con que programa se hace, lo desconozco totalmente y siento mucho esta situacion, no me podrias asesorar un poco?
Veo la imagen pero no ningun nombre que me identifique el programa.
Reitero mis disculpas y muchas gracias por tu atencion. Intwntare por todos los medios no volver a molestar en el foro.

Neftali [Germán.Estévez] 18-06-2013 19:35:19

Si le das al botón de RESPONDER que hay debajo de este mensaje, te aparece el editor donde se escribe el mensaje. A la parte derecha del editor junto a donde a aparecen los iconos está el botón para añadir TAG's.

Casimiro Notevi 18-06-2013 19:41:44

Cita:

Empezado por Caren (Mensaje 462408)
Intwntare por todos los medios no volver a molestar en el foro.

No has molestado. Sólo tratamos de explicarte cómo "resaltar" el código fuente.

Unicamente debes seleccionar con el ratón, el código que has puesto.
Cuando está seleccionado, le pinchas en el icono, tal y como indica la imagen de ejemplo que puse antes.
Y no hay más :)

maeyanes 18-06-2013 19:57:13

Hola...

Otra forma es que uses las etiquetas [delphi] y [/delphi] al inicio y al final del código:

Código:

[delphi]
procedure TAltaClientes.JvHTButton5Click(Sender: TObject);
var
  Ultimo : Integer;

begin
  Ultimo := ConfigurarNumeros.ADONumerosCodClientes.Value + 1;
  ADOClientes.Open;
  ADOClientes.Insert;
  ADOClientes.FieldByName('CodCliente').Value := Ultimo;
  ADOClientes.Post;
  ConfigurarNumeros.ADONumeros.Edit;
  ConfigurarNumeros.ADONumerosCodClientes.Value := Ultimo;
  ConfigurarNumeros.ADONumeros.Post;
end;
[/delphi]

El cual se verá:

Código Delphi [-]
procedure TAltaClientes.JvHTButton5Click(Sender: TObject);
var
  Ultimo : Integer;

begin
  Ultimo := ConfigurarNumeros.ADONumerosCodClientes.Value + 1;
  ADOClientes.Open;
  ADOClientes.Insert;
  ADOClientes.FieldByName('CodCliente').Value := Ultimo;
  ADOClientes.Post;
  ConfigurarNumeros.ADONumeros.Edit;
  ConfigurarNumeros.ADONumerosCodClientes.Value := Ultimo;
  ConfigurarNumeros.ADONumeros.Post;
end;


Saludos...


La franja horaria es GMT +2. Ahora son las 00:54:15.

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