Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Bases de datos > MS SQL Server
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 12-07-2014
camiz camiz is offline
Miembro
 
Registrado: ene 2012
Posts: 69
Poder: 13
camiz Va por buen camino
Generar codigo en SQL Server

Hola amigos del foro, quiero que me ayuden con esto:
Les comento que estoy trabajando en una aplicacion que va a trabajar en red y la base de datos es SQL server.

lo que pasa es que tengo una duda con los clientes al momento de registrarlos, lo que hago es generar un codigo de cliente ejem
000001, este codigo lo genero de un campo de la tabla clientes y lo muestro en un TEdit en el form, hasta ahi bien.
supongamos que mientras yo estoy llenando el resto de informacion del cliente otro usuario tambien quiere dar de alta otro cliente el codigo que va a generar va a ser el mismo 000001.
¿ Como hago para decirle al otro usuario que el codigo 000001 es mio y por lo tanto el tiene que generar el 000002 ?

estoy utilizando este codigo para coger el numero mas alto del campo en delphi, pero que tengo que hacer con SQL Server. Estoy utilizando la version 2012 Express.

Código Delphi [-]
with frmConeccion.Codigos_Gen do
begin
  SQL.Clear;
  Close;
  SQL.Text := 'Select max(CODIGO) as CODIGO from CLIENTES';
  Open;
  txtcodigo.text := FloatToStr(FieldByName('CODIGO').AsInteger +1);
  Close;
  Active := False;
end;
Responder Con Cita
  #2  
Antiguo 14-07-2014
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 20
olbeup Va camino a la fama
Cita:
Empezado por camiz Ver Mensaje
Hola amigos del foro, quiero que me ayuden con esto:
Les comento que estoy trabajando en una aplicacion que va a trabajar en red y la base de datos es SQL server.

lo que pasa es que tengo una duda con los clientes al momento de registrarlos, lo que hago es generar un codigo de cliente ejem
000001, este codigo lo genero de un campo de la tabla clientes y lo muestro en un TEdit en el form, hasta ahi bien.
supongamos que mientras yo estoy llenando el resto de informacion del cliente otro usuario tambien quiere dar de alta otro cliente el codigo que va a generar va a ser el mismo 000001.
¿ Como hago para decirle al otro usuario que el codigo 000001 es mio y por lo tanto el tiene que generar el 000002 ?

estoy utilizando este codigo para coger el numero mas alto del campo en delphi, pero que tengo que hacer con SQL Server. Estoy utilizando la version 2012 Express.

Código Delphi [-]
with frmConeccion.Codigos_Gen do
begin
  SQL.Clear;
  Close;
  SQL.Text := 'Select max(CODIGO) as CODIGO from CLIENTES';
  Open;
  txtcodigo.text := FloatToStr(FieldByName('CODIGO').AsInteger +1);
  Close;
  Active := False;
end;
Hola camiz,
Cambia el
Código Delphi [-]
textcodigo.text := FloatToStr(FieldByName('CODIGO').AsInteger +1);
por el
Código Delphi [-]
textcodigo.text := FormatFloat('000000', StrToInt(FieldByName('CODIGO').AsInteger +1));

Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #3  
Antiguo 15-07-2014
Avatar de Ferrari
Ferrari Ferrari is offline
Miembro
 
Registrado: jun 2006
Ubicación: Torreón, México
Posts: 154
Poder: 19
Ferrari Va por buen camino
Cool Sql

Te recomiendo que manejes transacciones para SQL y asi te evitas que si tu tomaste el 1 y el sigue con el 2.....saludos
Responder Con Cita
  #4  
Antiguo 15-07-2014
camiz camiz is offline
Miembro
 
Registrado: ene 2012
Posts: 69
Poder: 13
camiz Va por buen camino
Gracias, pense que la ayuda ya no llegaría. Creo que lo que necesito son transacciones para SQL, Gracias Ferrari.
gracias olbeup .
Responder Con Cita
  #5  
Antiguo 09-04-2015
Avatar de olbeup
olbeup olbeup is offline
Miembro
 
Registrado: jul 2005
Ubicación: Santiago de la Ribera (España)
Posts: 685
Poder: 20
olbeup Va camino a la fama
Hola Camiz,

También puedes definir el campo autoincremental.

Código SQL [-]
CREATE TABLE Clientes
  (
    IDCLIENTE   int IDENTITY(1,1) <-- Cada vez que añadas un registro, automáticamente se incrementa en 1
    ,APELLIDOS  varchar(25)
    ,NOMBRE     varchar(15)
    ,...
    ,...
  )
Un saludo.
__________________
Al hacer una consulta SQL, haz que los demás te entiendan y disfruten de ella, será tú reflejo de tú saber.
Responder Con Cita
  #6  
Antiguo 09-04-2015
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.927
Poder: 26
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por camiz Ver Mensaje
¿ Como hago para decirle al otro usuario que el codigo 000001 es mio y por lo tanto el tiene que generar el 000002 ?
9 de cada 10, esa es la idea equivocada. Como te explicaron, la forma correcta es usar un campo autonumerico (IDENTITY en sql server) y dejar que la BD se encargue del tema.

Porque es equivocada?

Porque genera un punto de contención (= un cuello de botella) en la BD, asi que ha menos que tengas que *garantizar* por regulacion que hay un consecutivo fijo (como en ciertos paises con las facturas), no te pongas en esas.

Ademas, es *ideal* que las claves de las tablas *carezcan* de sentido en la logica de negocios, y solo sirvan como punteros para llegar al registro, hacer relaciones y demas. Son las claves naturales (como # de cedula, nombre pais) las que le importan al usuario, y esas tienden a ser unicas.

Ademas, hacer esto desde Delphi? eso ya ES TARDE. Del lado del cliente ya ha pasado tiempo (mas aun si el servidor se accede remoto) y pa rematar el usuario se puede ir a tomar un cafe o dejar un proceso a medias. Todo esto se debe hacer directamente desde el motor, para reducir el margen de contención.

Solo hay UN caso de uso donde se puede desde el cliente generar IDS: si estos son del tipo GUID o similares.

-----

Pa no dejarte en ascuas, la forma tradicional es usar una tabla de consecutivos (con tabla, campo, siguiente consecutivo), y con triggers se obtiene y aumentan los tales y se asignan al campo en particular.

Pero NO lo hagas si es solo algo "estetico" o por que si. Las facturas/documentos legales es quizas de los pocos casos donde es una solucion valida.
__________________
El malabarista.
Responder Con Cita
  #7  
Antiguo 09-04-2015
Avatar de AgustinOrtu
[AgustinOrtu] AgustinOrtu is offline
Miembro Premium
NULL
 
Registrado: ago 2013
Ubicación: Argentina
Posts: 1.858
Poder: 16
AgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en brutoAgustinOrtu Es un diamante en bruto
Yo hago algo similar, pero NUNCA mando como parametro ese "codigo" que le muestro en pantalla en un INSERT

Se lo presento ahi a modo de decirle, vas a cargar el cliente 531, por si despues lo quiere buscar rapidamente. Si cuando lo graba resulta que le toco el Id 540 se lo notifico y listo

Totalmente de acuerdo con el uso de columnas autonumericas
Responder Con Cita
  #8  
Antiguo 10-04-2015
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.549
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por camiz Ver Mensaje
...este codigo lo genero de un campo de la tabla clientes y lo muestro en un TEdit en el form, hasta ahi bien.
supongamos que mientras yo estoy llenando el resto de informacion del cliente ...
Te diría (en la misma linea del resto de compañeros) que como primer cambio pases ese código (obtener el ID) al momento de grabar, no al de mostrar formulario.
Como segundo paso que utilices transacciones.
Y como tercero que pases esa lógica al SGBD.

Por ese orden.
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
Respuesta



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
generar codigo SQL enriqueth SQL 1 21-02-2011 11:23:22
generar codigo Rofocale Varios 1 28-10-2010 12:25:27
generar codigo de barras jmlifi Impresión 7 18-06-2007 17:04:03
generar codigo de barras pipe Varios 13 21-02-2007 20:54:58
Generar un bakup en SQL Server!!! subzero MS SQL Server 1 11-02-2004 19:56:09


La franja horaria es GMT +2. Ahora son las 01:22:31.


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