| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Duckman Cdt

Registrado: 20 Sep 2005Mensajes: 18Ubicación: Oaxaca
|
Publicado: Jue 10 Nov, 2005 10:58 pm Asunto: Error al repetir una Llave Primaria |
|
|
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 |
|
 |
Invitado
|
Publicado: Jue 10 Nov, 2005 11:29 pm Asunto: |
|
|
| Se me ocurre hacer una consulta "pidiendo" la llave, si NO EXISTE efectuas la insercion |
|
| Volver arriba |
|
 |
Duckman Cdt

Registrado: 20 Sep 2005Mensajes: 18Ubicación: Oaxaca
|
Publicado: Vie 11 Nov, 2005 4:11 am Asunto: Duckman |
|
|
| 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 |
|
 |
Kurroman Lt

Registrado: 07 Dic 2003Mensajes: 79
|
Publicado: Vie 11 Nov, 2005 2:20 pm Asunto: |
|
|
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 |
|
 |
Invitado
|
Publicado: Vie 11 Nov, 2005 4:58 pm Asunto: Solucion con "Eof" |
|
|
| 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 |
|
 |
Duckman Cdt

Registrado: 20 Sep 2005Mensajes: 18Ubicación: Oaxaca
|
Publicado: Vie 11 Nov, 2005 8:55 pm Asunto: |
|
|
| 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 |
|
 |
Kurroman Lt

Registrado: 07 Dic 2003Mensajes: 79
|
Publicado: Lun 14 Nov, 2005 12:55 pm Asunto: |
|
|
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 |
|
 |
|