Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Mostrar el Número de CLiente en un Mantenimiento (https://www.clubdelphi.com/foros/showthread.php?t=77809)

hondaalberto 27-02-2012 20:01:04

Mostrar el Número de CLiente en un Mantenimiento
 
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
Código Delphi [-]
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:



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
Código Delphi [-]
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...

Código SQL [-]
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:
Código SQL [-]
SELECT MAX(NO)+1 FROM CLIENTES

Saludos.

Caral 27-02-2012 21:58:16

Hola
O Tambien.....:D:D:D;)
Código Delphi [-]
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:
Código Delphi [-]
   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:
Cita:

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:
Código Delphi [-]
  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

Saludos.

Caral 27-02-2012 22:33:37

Hola
Tambien:
Código Delphi [-]
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
Código Delphi [-]
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:

Código Delphi [-]
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.

Código Delphi [-]
TClientes.FieldByName('No').asinteger := Query1.FieldByName('MAX').????? ; // (AsInteger)

Saludos.


La franja horaria es GMT +2. Ahora son las 20:19:48.

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