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 06-02-2012
fwhite fwhite is offline
Miembro
 
Registrado: sep 2006
Posts: 37
Poder: 0
fwhite Va por buen camino
Validar contenido campo para que no se repita

Hola amigos:
Estoy haciendo una aplicación y quiero validar el contenido de un campo en Paradox para que, si se repite, me envíe un mensaje y no ejecute el insert.
Además de la BD principal utilizo otra auxiliar, sobre la cual ejecuto un LOCATE, para saber si el contenido del campo ya existe.
Todo me lo hace bien, me localiza un registro que va a estgar duplicado, me envía el mensaje, me anula el registro que estoy introduciendo, pero me duplica el registro que localicé en la BD auxiliar.
El codigo es el siguiente:

Código Delphi [-]
 
procedure TdmSocios.tbSociosBeforePost(DataSet: TDataSet);
var
  vNumSoc: Integer;
begin
// Validamos el número de Socio
  vNumSoc := tbSocios.FieldValues['Id_Socio'];
  if tbValidaNumSoc.Locate('Id_Socio', vNumSoc, []) then
    if tbSocios.State in [dsInsert] then
      begin
        MessageDlg('O número de socio ' + IntToStr(vNumSoc) + ' xa está adxudicado.'
        + #13 + #13 + 'Revisa os datos e fai as correccións oportunas',
        mtConfirmation, [mbCancel], 0);
        tbSocios.Delete;
      end;
end;

Decirme que es lo que estoy haciendo mal. Graciñas.
Responder Con Cita
  #2  
Antiguo 06-02-2012
Avatar de Caro
*Caro* Caro is offline
Moderadora
 
Registrado: jul 2004
Ubicación: Cochabamba, Bolivia
Posts: 2.544
Poder: 22
Caro Va por buen camino
Hola fwhite, para cancelar el Insert puedes utilizar el procedimiento Abort y el Delete estaría demas.

Código Delphi [-]
procedure TdmSocios.tbSociosBeforePost(DataSet: TDataSet);
var
  vNumSoc: Integer;
begin
// Validamos el número de Socio
 vNumSoc := tbSocios.FieldValues['Id_Socio'];

 if tbValidaNumSoc.Locate('Id_Socio', vNumSoc, []) then

   if tbSocios.State in [dsInsert] then
    begin
      if MessageDlg('O número de socio ' + IntToStr(vNumSoc) + ' xa está adxudicado.' 
       + #13 + #13 + 'Revisa os datos e fai as correccións oportunas', mtConfirmation, [mbCancel], 0)=mrCancel then
         Abort;
     end;

Saluditos
__________________
Disfruten cada minuto de su vida a lado de sus seres queridos como si fuese el ultimo, uno nunca sabe lo que puede pasar.
Responder Con Cita
  #3  
Antiguo 07-02-2012
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.272
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
¿Puedes crear un índice único en la tabla usando Paradox?
Si es así, eso te evitará problemas, y aumentará la eficiencia, pues te evitará tener que hacer el LOCATE.
__________________
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
  #4  
Antiguo 07-02-2012
fwhite fwhite is offline
Miembro
 
Registrado: sep 2006
Posts: 37
Poder: 0
fwhite Va por buen camino
Validar contenido campo para que no se repita

Hola a todos:
Caro, el Abort me resuelve el problema. Yo creo que la lo había intentado, pero bueno, problema resuelto. Graciñas.
Neftali, la utilización del índice único es el mejor sistema a utilizar, pero el programa lo estoy haciendo para una pequeña sociedad de mi pueblo que ya tiene 50 años de vida y, de momento el campo Número de Socio se va a introducir manualmente, primero los Socios en activo y, poco a poco, se irán introduciendo los Socios que fueron baja, con la intención de mantener el historial de la Sociedad. Graciñas por tu respuesta.
Un saludo a todos.
Responder Con Cita
  #5  
Antiguo 07-02-2012
Avatar de jafera
jafera jafera is offline
Miembro
 
Registrado: may 2007
Ubicación: Llagostera (Girona)
Posts: 582
Poder: 17
jafera Va por buen camino
Otra solución con los números de socio es que le pongas otro indice que se llame clave por ejemplo.

Este numero clave es invariable y el numero de socio puede variar si hay bajas, por ejemplo si el socio numero 1 se da de baja, el 2 pasa a ocupar el 1 pero la clave puede ser 2035, clave que no variara nunca a efectos históricos.

Evidentemente que esta clave será un campo unico, auto aumentado con cada alta, si la misma base de datos te controla este Unike key ahorrarás tiempo y problemas.

Se marca un campo con activo si/no o que al poner fecha de baja se llene automaticamente.

Saludos

Josep
Responder Con Cita
  #6  
Antiguo 07-02-2012
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.272
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 fwhite Ver Mensaje
Neftali, la utilización del índice único es el mejor sistema a utilizar, pero el programa lo estoy haciendo para una pequeña sociedad de mi pueblo que ya tiene 50 años de vida y, de momento el campo Número de Socio se va a introducir manualmente, primero los Socios en activo y, poco a poco, se irán introduciendo los Socios que fueron baja, con la intención de mantener el historial de la Sociedad. Graciñas por tu respuesta.
Bueno, creo que lo uno no invalida lo otro, simplemente que el índice único pasa el control de los duplicados a la base de datos, en lugar de hacerlo tú. No cambia el sistema de introducir los datos.
__________________
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
Truncar contenido de un campo el-mono SQL 5 31-03-2009 23:23:18
validar datos de un campo GustavoCruz SQL 2 12-07-2007 18:55:04
Validar campo Juan Reyes Varios 20 18-05-2007 23:00:38
Validar Campo esimon OOP 6 09-05-2006 16:07:34
Validar un campo gluglu Varios 3 14-01-2005 15:43:58


La franja horaria es GMT +2. Ahora son las 00:12:52.


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