Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Conexión con bases de datos
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Conexión con bases de datos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 09-06-2010
juliana_r juliana_r is offline
Registrado
 
Registrado: jun 2010
Posts: 5
Poder: 0
juliana_r Va por buen camino
ABM,como validar que no se ingrese un codigo existente a mi BD

Estoy haciendo un ABM sencillo donde tengo una base de datos que contiene una tabla llamada PRODUCTOS ( cuyos campos son codigo, descripcion, y stock) Cuando hago el alta lo que tengo que hacer es validar que NO quiera ingresar un producto NUEVO con un código existente.
Lo que me pasa a mi es que si ingreso un codigo (a traves de un edit que esta asociado a una variable) que ya existe en la base de datos, me lo graba igual (osea me quedan 2 productos con el mismo codigo)
No se como validar que no se ingrese un codigo existente.

Estoy usando delphi 7 y SQL server 2000, y me conecte con el adoconnectio y el adodataset.

Perdon soy nueva en esto!!!
Responder Con Cita
  #2  
Antiguo 09-06-2010
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.040
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Si tienes, por ejemplo, una tabla de productos y no quieres que se repitan, deberás indicar en la base de datos que el campo "referencia" o "código" (el que necesites) sea clave de esa tabla, así no permitirá datos repetidos.
Si es un campo que no es clave, entonces la única solución que queda es buscar si existe.
Normalmente en estos procesos se usa el siguiente esquema:

El usuario escribe un código, buscamos si ya existe, si no existe entonces lo damos de alta, si ya existe entonces presentamos el mismo para que el usuario lo edite.

Como ves, de esa forma no es posible insertar repetidos.
Responder Con Cita
  #3  
Antiguo 09-06-2010
Avatar de Caral
[Caral] Caral is offline
Miembro Premium
 
Registrado: ago 2006
Posts: 7.659
Poder: 25
Caral Va por buen camino
Hola
Código Delphi [-]
   AQTemp.SQL.Text := 'Select Codigo From PRODUCTOS '+
                      'where  Codigo = :cod ';
   AQTemp.Params[0].Value:= Edit1.Text;
   AQTemp.Open;
 If AQTemp.RecordCount > 0 then
   begin
      MessageDlg('Código ya existe.',mtError,[mbOK],0);
      Edit1.SetFocus;
   end
Saludos
__________________
Siempre Novato
Responder Con Cita
  #4  
Antiguo 09-06-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Como comenta Casimiro, el campo código debe ser una llave única para que el mismo motor de datos asegure que no haya duplicados. Ahora bien, una vez salvado este paso tienes dos opciones: una, la que comenta Caral, en la que verificas de antemano que el código exista. Otra, es dejarlo en manos del motor, esperando a que éste genere un error al intentar insertar un código duplicado. En este camino, tienes que manejar el evento OnPostError del DataSet si quieres hacer un manejo especial del error (por ejemplo, mandar un mensaje personalizado o permitir que reintente la inserción cambiando el código).

// Saludos
Responder Con Cita
  #5  
Antiguo 09-06-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Creo que la mejor opción es en el evento al salir "on Exit", del control que no va admitir claves duplicadas darle un mensaje al usuario, de lo contrario nos podemos encontrar una pantalla con 30 campos y después de cumplimentar los 30 resulta que nos dice que ese "cliente" ya existe.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #6  
Antiguo 09-06-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
discúlpame maese Marcos, pero la mejor opción sin lugar a duda, es crear la llave primaria en la base de datos, o de perdido un índice único, tal y como mencionan casimiro y Roman.
__________________

Responder Con Cita
  #7  
Antiguo 09-06-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Creo que Marcos es consciente de eso. Él se refiere simplemente al momento de hacer la validación: antes o después de rellenar los campos.

// Saludos
Responder Con Cita
  #8  
Antiguo 09-06-2010
Avatar de marcoszorrilla
marcoszorrilla marcoszorrilla is offline
Capo
 
Registrado: may 2003
Ubicación: Cantabria - España
Posts: 11.221
Poder: 10
marcoszorrilla Va por buen camino
Contra, efectivamente es como dice Román, la Tabla tiene que tener siempre su clave primaria que evite repeticiones, lo que yo comento es para evitar que el usario despues de cumplimentar 20 cuadros de texto se encuentre con que el cliente.. ya existía.

Un Saludo.
__________________
Guía de Estilo de los Foros
Cita:
- Ça c'est la caisse. Le mouton que tu veux est dedans.
Responder Con Cita
  #9  
Antiguo 09-06-2010
Avatar de AzidRain
[AzidRain] AzidRain is offline
Miembro Premium
 
Registrado: sep 2005
Ubicación: Córdoba, Veracruz, México
Posts: 2.914
Poder: 21
AzidRain Va camino a la fama
Lo mas simple y mas adecuado es dejar ese tipo de restricciones al motor y uno tomarlas en delphi para actuar en consecuencia, un mal diseño de una BD te va a llevar a un mal seguimiento en tu programa.
__________________
AKA "El animalito" ||Cordobés a mucha honra||
Responder Con Cita
  #10  
Antiguo 10-06-2010
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Cita:
Empezado por AzidRain Ver Mensaje
Lo mas simple y mas adecuado es dejar ese tipo de restricciones al motor y uno tomarlas en delphi para actuar en consecuencia, un mal diseño de una BD te va a llevar a un mal seguimiento en tu programa.
Me parece, estimado Azid, que ese punto ya está aclarado

Cita:
Empezado por Casimiro Notevi Ver Mensaje
deberás indicar en la base de datos que el campo "referencia" o "código" (el que necesites) sea clave de esa tabla, así no permitirá datos repetidos.
Cita:
Empezado por roman Ver Mensaje
el campo código debe ser una llave única para que el mismo motor de datos asegure que no haya duplicados.
Cita:
Empezado por ContraVeneno Ver Mensaje
la mejor opción sin lugar a duda, es crear la llave primaria en la base de datos, o de perdido un índice único
Cita:
Empezado por marcoszorrilla Ver Mensaje
la Tabla tiene que tener siempre su clave primaria que evite repeticiones
// Saludos
Responder Con Cita
  #11  
Antiguo 10-06-2010
Avatar de ContraVeneno
ContraVeneno ContraVeneno is offline
Miembro
 
Registrado: may 2005
Ubicación: Torreón, México
Posts: 4.738
Poder: 23
ContraVeneno Va por buen camino
de cualquier manera, creo que lo mejor es crear una llave primaria.

Saludos.
__________________

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
como integro un scrip de delphi php a un web existente JULIPO PHP 10 20-05-2010 21:47:37
Como realizar una conexion a una BD existente Broca_Lic Conexión con bases de datos 5 24-11-2009 00:34:38
como puedo hacer un select de una tabla e introducirlo en otra existente lynu SQL 5 24-08-2006 20:49:26
Formulario existente Esau Varios 4 18-02-2005 21:34:18
enmascarar un tedit cuando se ingrese La clave de acceso andresenlared Varios 4 08-01-2004 17:45:27


La franja horaria es GMT +2. Ahora son las 01:19:45.


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