Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 23-07-2008
airam airam is offline
Miembro
 
Registrado: may 2008
Posts: 29
Poder: 0
airam Va por buen camino
Smile como evitar que se dupiquen las llaves primarias de una abla en c++ builder

Hago uso deeste foro para escribir una duda que tengo y que ojala lguien pudiera ayudarme....
Bueno estoy manejando una tabla en bd en c++ builder con el componente Table, y lo que quisiera saber es como evito que a la hora de insertar nuevos datos en la tabla, el id q es la llave primaria no se duplique, o q no me interrumpa la ejecucion, si no que me permita mosrar un mensaje y que me permita cancelar todo o volver al pedir el id nuevo, ojala me hayan entendido.
alguien que pueedar ayudarme porfavor ,y muchas gracias de antemano.
Responder Con Cita
  #2  
Antiguo 23-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
Hola, lo suyo seria tratar de coger la excepcion por id repetido

Código Delphi [-]
var
        fet : boolean;
        id : integer;
begin
       fet := false;
       while not fet do
       begin
                 id := strtoint(Edit1.Text); 
                 try 
                    Tabla.Append;
                    Tabla.FieldValues['id'] := id;
                    ...
                    Tabla.Post; 
                    fet := true;
                except  
                    ShowMessage('identificador repetido');
                    Edit1.SelectAll;
                    Edit1.SetFocus;
               end;       
       end;
end;

algo asi. igualmente este tema esta bastante tratado. si usas el buscador del foro seguramente encontraras otros mensajes

Última edición por coso fecha: 23-07-2008 a las 18:00:59.
Responder Con Cita
  #3  
Antiguo 23-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
otra manera es crearlos aleatoriamente

Código Delphi [-]
tabla.Filtered := false;

id := random(99999999999)
while tabla.locate('id',id,[]) do id := random(9999999999999);

tabla.Append;
...

o secuencialmente

Código Delphi [-]

tabla.Filtered := false;
tabla.IndexFieldNames := 'id';
tabla.Last;
id := tabla.FieldByName('id').Asinteger + 1;
...

o usar los tipos autoincrementables en el diseño de la tabla
Responder Con Cita
  #4  
Antiguo 23-07-2008
airam airam is offline
Miembro
 
Registrado: may 2008
Posts: 29
Poder: 0
airam Va por buen camino
checando las respuestas

hola que tal gracias por haber leido mi mensaje y aportarme una idea, lo checare y reportare mi resultado, gracias por tu ayuda y por tu tiempo
Responder Con Cita
  #5  
Antiguo 23-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
de nada ... dios me lo pague
Responder Con Cita
  #6  
Antiguo 23-07-2008
airam airam is offline
Miembro
 
Registrado: may 2008
Posts: 29
Poder: 0
airam Va por buen camino
sigo con lo mismo

oyes, disculpa por la molestia, pero me lo podrias explicar un poquito mas con el codigo de c++ builder, ya q no me se bien la sintaxis, por favor.
Responder Con Cita
  #7  
Antiguo 23-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
perdona que lo escribi en delphi.

Código:
void Append()
{
        bool fet = false;
        int  id;

        while !fet 
        {
           id = strtoint(Edit1->Text); 
           try 
              Tabla->Append;
              Tabla->FieldValues['id'] = id;
              ...
              Tabla->Post; 
              fet = true;
           catch
           {
              ShowMessage("identificador repetido");
              Edit1->SelectAll;
              Edit1->SetFocus;
           }
       }
}
algo asi...lo importante es que pilles la idea

Última edición por coso fecha: 23-07-2008 a las 18:01:20.
Responder Con Cita
  #8  
Antiguo 23-07-2008
airam airam is offline
Miembro
 
Registrado: may 2008
Posts: 29
Poder: 0
airam Va por buen camino
gracias por tu ayuda, me distes una idea, pero mira en el trabajo q estoy realizando, la idea es esta:
tengo un boton la cual es para insertar, ahi le doy el codigo de insertar, y en otro boton el de guardar.bueno pues mi idea es q a la hora de darle en el botonguardar realice la condicion de q no se puede repetir la llave primaria si es q se repite y si no q guarde los datos q haya insertado.
No se si me entiendas bien, ojala y puedas ayudarme, te lo agradezco mil veces.
Responder Con Cita
  #9  
Antiguo 23-07-2008
airam airam is offline
Miembro
 
Registrado: may 2008
Posts: 29
Poder: 0
airam Va por buen camino
gracias por tu ayuda, me distes una idea, pero mira en el trabajo q estoy realizando, la idea es esta:
tengo un boton la cual es para insertar, ahi le doy el codigo de insertar, y en otro boton el de guardar.bueno pues mi idea es q a la hora de darle en el botonguardar realice la condicion de q no se puede repetir la llave primaria si es q se repite y si no q guarde los datos q haya insertado.
No se si me entiendas bien, ojala y puedas ayudarme, te lo agradezco mil veces.
Responder Con Cita
  #10  
Antiguo 23-07-2008
[egostar] egostar is offline
Registrado
 
Registrado: feb 2006
Posts: 6.557
Poder: 25
egostar Va camino a la fama
Cita:
Empezado por airam Ver Mensaje
gracias por tu ayuda, me distes una idea, pero mira en el trabajo q estoy realizando, la idea es esta:
tengo un boton la cual es para insertar, ahi le doy el codigo de insertar, y en otro boton el de guardar.bueno pues mi idea es q a la hora de darle en el botonguardar realice la condicion de q no se puede repetir la llave primaria si es q se repite y si no q guarde los datos q haya insertado.
No se si me entiendas bien, ojala y puedas ayudarme, te lo agradezco mil veces.
A ver, si es una llave primaria, no puede repetirse, la propia base de datos te invalida ese insert, o me equivoco?

El ejemplo que te ha puesto nuestro amigo coso hace precisamen te eso.... no entiendo cual es el problema que tienes.

Salud OS
__________________
"La forma de empezar es dejar de hablar y empezar a hacerlo." - Walt Disney
Responder Con Cita
  #11  
Antiguo 23-07-2008
[coso] coso is offline
Miembro Premium
 
Registrado: may 2008
Ubicación: Girona
Posts: 1.678
Poder: 0
coso Va por buen camino
si, airam, solo deberias adaptar el codigo. Te quedaria algo asi, mas o menos
(no te fies de mi sintaxis de C++)

Código:
void TForm1::Button1Click(TObject Sender)
{
               // id es la id que tu quieres mirar si esta repetida
               if Repetida(id) ShowMessage("Repetida")
               else Guardar(id);
}

boolean TForm1::Repetida(integer id)
{
            Tabla->Filtered = false;
            return (Tabla->Locate('id',id,[]));
}


void TForm1::Guardar(integer id)
{
             Tabla->Append;
             Tabla->FieldValues["id"] = id;
             ...
             Tabla->Post;
}
espero haberte aclarado algo mas ; ) mil de nadas
Responder Con Cita
  #12  
Antiguo 24-07-2008
airam airam is offline
Miembro
 
Registrado: may 2008
Posts: 29
Poder: 0
airam Va por buen camino
ok, amigo coso, ya lo estuve checando y ya mas o menos va quedando, solo es cuention de entenderle mas, y bueno mil gracias por tu itempo dedicado a mi duda, me diste una gran idea amigo, bueno ya tengo mas dudas se los pedire de favor una gran ayuda....

Saludos y gracias.
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 arreglo mis 3 Primarias? Deiv Windows 5 08-09-2006 15:05:53
Como trabajar las llaves primarias en red javicho_villa Varios 3 19-04-2006 21:38:58
Incrementar las llaves primarias con zeos uper MySQL 1 16-07-2005 20:23:00
Problema de llaves primarias y foráneas!! romansiux Varios 2 10-04-2005 16:20:57
como crear exception para validar duplicación de llaves en tabla viajero2015 Conexión con bases de datos 6 21-10-2003 09:54:09


La franja horaria es GMT +2. Ahora son las 04:39:26.


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