Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Error al repetir una Llave Primaria

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Bases de Datos
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Error al repetir una Llave Primaria Responder citando

Arrow Hola que tal, quisiera de favor me auxiliaran en como saber si un registro ya existe en una tabla y en caso de que no
exista ejecutar otra instruccion SQL. El codigo que presento abajo es el que tengo implementado en mi aplicacion y consiste
en ingresar un registro que no exista en la tabla en caso contrario manda un mensaje diciendo que el dato ya existe en la
tabla. El programa se ejecuta perfectamente cunado existe un registro, pero en caso contrario el programa se cierra y
manda el siguiente mensaje: "Debugger Exception Notification"

Por cierto es una llave primaria. Les agradeceria y me ayudaran

void __fastcall TForm1::Button1Click(TObject *Sender)
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("Select * from tabla Where LIKE '%"+Edit1->Text+"%'");
ADOQuery1->Open();
if(ADOQuery1->IsEmpty())
{
ADOQuery1->Close();
ADOQuery1->SQL->Clear();
ADOQuery1->SQL->Add("Insert into tabla (Clave_Llave_Primaria) values ('"+Edit1->Text+"');
ADOQuery1->ExecSQL();
Message("Dato Ingresado Satisfactoriamente");
}
else
{
ShowMessage("Clave_Llave_Primaria ya Existe, Intente con otra Clave");
}
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Se me ocurre hacer una consulta "pidiendo" la llave, si NO EXISTE efectuas la insercion
Volver arriba
Mensaje    Asunto: Duckman Responder citando

Que tal, Invitado, podrias ser mas explicito por favor, lo que pasa es que soy nuevo en esto de consultas SQL, podrias poner algo de codigo por fa. De ante mano gracias...
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Te lo pongo para interbase/firebird que es como trabajo, pero vaya, la cosa imagino sera similar para ADO:

una sql para ver si existe la clave:

Código:
select id_clave from tabla where id_table = :valor


valor es un parametro de la Query (IBQ_Query1 por ejemplo)

si esa consulta se devuelve vacia es que no existe:

Código:

IBQ_Query1->Close();
IBQ_Query1->ParamByName("valor")->AsString = "1";
IBQ_Query1->Open();


if (IBQ_Query1->IsEmpty()) {
    //inserto registro
} else {
   ShowMessage("La clave ya existe en la base de datos.");
}
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Solucion con "Eof" Responder citando

Código:

// Solución con ‘Eof’

void __fastcall TForm1::Button1Click(TObject *Sender)
{
    ADOQuery1->Close();
    ADOQuery1->SQL->Clear();
    ADOQuery1->SQL->Add("Select * from tabla Where LIKE '%"+Edit1->Text+"%'");
    ADOQuery1->Open();

    if(ADOQuery1->Eof)
    {
            ADOQuery1->Close();
            ADOQuery1->SQL->Clear();
            ADOQuery1->SQL->Add("Insert into tabla Clave_Llave_Primaria) values ('"+Edit1->Text+"');
            ADOQuery1->ExecSQL();
            Message("Dato Ingresado Satisfactoriamente");

    }
    else
        ShowMessage("Clave_Llave_Primaria ya Existe, Intente con otra Clave");
}
Volver arriba
Mensaje    Asunto: Responder citando

Que tal Kurroman e Invitado, gracias por su interes pero de igual manera me sigue saliendo el mismo error. He visto por ahi que aveces usan el "try" pero la verdad no se como usarlo. Si tienen alguna otra forma de hacerlo cambiando por completo el codigo no hay problema. El chiste es que me pueda insertar un registro que no existe y en caso de existir mostrar un mensaje. Por cierto trabajo con MySQL Server 4.1 Saludos
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email MSN Messenger
Mensaje    Asunto: Responder citando

Pues entonces no parece k sea error de klave primaria. Prueba:

ADOQuery1->ExecSQL(); en lugar de ADOQuery1->Open();

Pon tb el error completo que te sale.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.