PDA

Ver la Versión Completa : Mostrar el Número de CLiente en un Mantenimiento


hondaalberto
27-02-2012, 20:01:04
Buenas tardes amigos espero que estén muy bien

El motivo de este mensaje es porque necesito que en un Mantenimiento de Clientes cuando el usuario hace clic en el botón "Nuevo"
inmediatamente en el formulario en el Campo número de cliente (No.) aparezca cual es el numero que se le ha asignado al cliente que se esta creando.

Utilizo Delphi 7 y Sql Server Express

En el evento OnCLic del Botón Nuevo tengo el Siguiente Codigo: TClientes.Insert;

La Estructura de la Tabla es la Siguiente:

CREATE TABLE [dbo].[Clientes](
[No] [int] IDENTITY(1,1) NOT NULL,
[Nombre] [nvarchar](50) NOT NULL,
[Nombre 2] [nvarchar](50) NULL,
[Direccion] [nvarchar](50) NOT NULL,
[Contacto] [nvarchar](50) NULL,
[Telefono] [nvarchar](15) NULL,
[Fax] [nvarchar](15) NULL,
[Tel_Movil] [nvarchar](15) NULL,
[Tel_Oficina] [nvarchar](15) NULL,
[E-Mail] [nvarchar](100) NULL,
[Pagina_Web] [nvarchar](100) NULL,
[Limite_Credito] [decimal](38, 2) NOT NULL,
[Pais] [int] NOT NULL,
[Ciudad] [int] NOT NULL,
[Estado] [nvarchar](8) NOT NULL,
[Fecha_ult_modificación] [date] NOT NULL,
[RNC] [nvarchar](20) NULL,
[Grupo_Contable_Cliente] [nvarchar](20) NOT NULL,
[Usuario] [nvarchar](20) NULL,
[Fecha_Cumpleaño] [datetime] NULL,
CONSTRAINT [PK_Clientes] PRIMARY KEY CLUSTERED


Muchas Gracias de antemano por la Ayuda que puedan Brindarme.

Caral
27-02-2012, 20:13:53
Hola
Query1.Sql.text:= 'Select Nombre form Clientes';
Query1.Open;
Edit1.text:= (query1.Fields[0].Text);
Saludos

ecfisa
27-02-2012, 20:32:39
Hola hondaalberto.

Por favor, si tu mensaje incluye código, utilizá TAG's para que sea más legible:

http://img403.imageshack.us/img403/3461/75416396.jpg

Saludos y gracias por tu colaboración.

hondaalberto
27-02-2012, 21:26:27
Con la Respuesta que Caral me escribio me muestra el primer cliente creado en la base de datos y lo que necesito mostrar es el número que le corresponde al cliente que estan creando.

Gracias de antemano...

Caral
27-02-2012, 21:31:44
Hola

Query1.Sql.text:= 'Select Max(No) form Clientes';
Query1.Open;
Edit1.text:= IntToStr(query1.Fields[0].asinteger);
Saludos

hondaalberto
27-02-2012, 21:41:54
Probé haciéndolo así utilizando la función max (no.) de Sql, pero lo que me muestra es el último cliente que se creo y lo que necesito hacer es lo siguiente:

Ej.: Tengo dos clientes ya creados en la Base de datos Cliente 1 y Cliente 2 cuando el usuario hace clic en el botón nuevo para crear el cliente numero 3 se debería mostrar que es el cliente No. 3 que es lo que no me sale con el código que me mostraste caral.

duilioisola
27-02-2012, 21:46:21
Pues es tan simple como sumar 1...

Query1.Sql.text:= 'Select Max(No) form Clientes';
Query1.Open;
Edit1.text:= IntToStr(query1.Fields[0].asinteger + 1);

ecfisa
27-02-2012, 21:55:11
Si, y como otra alternativa, también debería funcionar:
SELECT MAX(NO)+1 FROM CLIENTES

Saludos.

Caral
27-02-2012, 21:58:16
Hola
O Tambien.....:D:D:D;)

Var Caral: Integer;
Begin
Caral := 1;
Query1.Sql.text:= 'Select Max(No)+'+Caral+' form Clientes';
Query1.Open;
Edit1.text:= IntToStr(query1.Fields[0].asinteger);

:D:D:D
Saludos

ecfisa
27-02-2012, 22:03:59
Me encanta este código:

Query1.Sql.text:= 'Select Max(No)+'+Caral+' form Clientes';

Está cargado de sincera humildad :D:D:D

Caral
27-02-2012, 22:10:12
Hola
Venga hombre que ahora le generara un error:
El código (novato) no se puede ejecutar,
A la variable Caral le falta experiencia.
:D:D
Saludos

ecfisa
27-02-2012, 22:16:16
No seas modesto mi amigo, al menos para mi, la sentencia:

Caral:= 1;

Funciona de maravilla ;)

Saludos. :)

Caral
27-02-2012, 22:20:49
Hola
Por lo menos lo que le demuestra al amigo hondaalberto es que con delphi se puede hacer lo mismo de muchas maneras, eso es lo que me encanta de este lenguaje, nunca se termina de aprender algo mejor.:)
Saludos

hondaalberto
27-02-2012, 22:23:48
Ok, Con esto si me da el número de cliente 3 pero si varios usuarios al mismo tiempo intentan crear un cliente le mostrara el número 3 a todos, como se podria corregir eso.

ecfisa
27-02-2012, 22:28:37
Hola hondaalberto.

Revisá este enlace: Creacion de un campo clave interno autonumerico (http://www.clubdelphi.com/foros/showthread.php?t=43332)

Saludos.

Caral
27-02-2012, 22:33:37
Hola
Tambien:

procedure TFOrdProd.ADOQuery1BeforePost(DataSet: TDataSet);
begin
Query1.Sql.text:= 'Select Max(No) form Clientes';
Query1.Open;
If Edit1.Text = IntToStr(Query.Fields[0].asinteger) then
begin
if MessageBox(Handle,
PChar('Esta tratando de poner un numero que ya existe' + #13#10 +
'Desea cambiarlo ?'),
PChar('Numero Repetido'),
MB_OKCANCEL + MB_ICONQUESTION + MB_DEFBUTTON1 + MB_APPLMODAL) = IDOK then
begin
Query1.Sql.text:= 'Select Max(No) form Clientes';
Query1.Open;
Edit1.Text = IntToStr(Query.Fields[0].asinteger+1);
end;
end;
end;
Saludos

duilioisola
27-02-2012, 23:04:02
Bien... ahora si estamos pensando en una aplicación multipuesto...
Eso se resuelve de dos maneras posibles:
- Dejas el nro. de cliente = 0 y dejas que los triggers de la tabla se encarguen.
- Estableces el nro de cliente justo antes de grabar el registro

OnBeforePost
begin
Query.SELECT MAX(CLIENTE)+1 FROM CLIENTES
Tabla.FieldByName('NRO_CLIENTE') = Query.FieldBeName('MAX')
end;

hondaalberto
27-02-2012, 23:39:33
Buenas tardes DuilioIsola

Con el Código que me pusiste hice lo siguiente en el evento beforePost de la Tabla clientes:

begin
Query1.sql.add ( 'SELECT MAX(CLIENTE)+1 FROM CLIENTES');
Query1.Open;
TClientes.FieldByName('No').asinteger := Query1.FieldByName('MAX');

end;

y me devuelve el siguiente error:
[Error] UMantClientes.pas(254): Incompatible types: 'Integer' and 'TField'
[Fatal Error] RetailPos.dpr(18): Could not compile used unit 'UMantClientes.pas'

ecfisa
27-02-2012, 23:41:47
Hola.


TClientes.FieldByName('No').asinteger := Query1.FieldByName('MAX').????? ; // (AsInteger)


Saludos.