PDA

Ver la Versión Completa : Asignar numero incremental


Caren
17-06-2013, 19:48:05
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 (http://www.clubdelphi.com/foros/guiaestilo.php).

En cuanto a tu consulta, revisa el mensaje #2 de este hilo (http://www.clubdelphi.com/foros/showthread.php?p=462316).

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:


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 (http://www.clubdelphi.com/foros/guiaestilo.php)?, gracias por tu colaboración :)


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

http://www.clubdelphi.com/images/UtilizarTAGs.png

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
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:

Ultimo := ADONumeros.FieldByName('CodClientes').Value + 1;


En el ADONumeros y me marca:

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.


..
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:
"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:


...
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
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) (http://www.clubdelphi.com/foros/showpost.php?p=462368&postcount=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.



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:

http://www.clubdelphi.com/images/UtilizarTAGs.png

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
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 y al inicio y al final del código:



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;



El cual se verá:


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...