| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
Peruzzi Invitado
|
Publicado: Jue 01 May, 2003 4:03 pm Asunto: Urgente |
|
|
A ver es que pongo este codigo para que me detecte si hay algun elemento repetido en una tabla PARADOX, el codigo lo meto en el evento BeforeAction de un DBNavigator y me da un error al apretar el boton nbPost:
AnsiString dato_a_insertar = DBEdit1->Text;
TLocateOptions opciones;
opciones.Clear();
bool dato = TTEst->Locate("Id_tipo",dato_a_insertar,opciones);
if (Button== nbPost && dato)
{ /*SI EL TEXTO YA ESTÁ EN LA TABLA...*/
Application->MessageBox("Ya existe un registro con estos datos.","¡Aviso!",MB_OK|MB_ICONEXCLAMATION);
Abort();
}
Porque me da ese error???me da el error a la hora de ejecutar la funcion locate porque puede ser??que tengo que cambiar??? |
|
| Volver arriba |
|
 |
cancun Ens

Registrado: 22 Mar 2003Mensajes: 32Ubicación: Cancun, Q.Roo, México
|
Publicado: Jue 01 May, 2003 5:07 pm Asunto: |
|
|
Hola
Disculpa si soy repetitivo, pero se más claro, cuando alguien dice "Da error" y no dice cual, no queda muy claro que es lo que sucede, por favor pon el mensaje de error. _________________ Saludos
Roger Ruiz |
|
| Volver arriba |
|
 |
Peruzzi Invitado
|
Publicado: Jue 01 May, 2003 9:49 pm Asunto: Urgente |
|
|
A ver cuando kiero añadir un elemento mediante un DBNAVIGATOR si le meto un elemento repetido me da el mensaje de error KEY VIOLATION y yo quiero que me avise de que es un elemento repetido. Eso quiero que me diga que cuando introduzca un elemento que ya esta metido en la tabla me de un mensaje de error. Si la tabla tiene dos campos no quiero que me deje repetir ninguno es de cir :
Si tengo un elemento en latabla que sea
Id_tipo Tipo
1 Hola
Pues que me de error al introducir estos dos nuevos elementos
1 Adios
2 Hola
como hago eso???? |
|
| Volver arriba |
|
 |
Scooby Ens


Registrado: 25 Sep 2002Mensajes: 49Ubicación: Nunca Máis
|
Publicado: Vie 02 May, 2003 7:23 am Asunto: |
|
|
Hola Peruzzi. La solución que se me ocurre a voz de pronto, es que pongas un try... catch en los grupos de instrucciones que realizan acceso a datos. En este caso pon también un try... catch al Post y en el catch, muestra una ventana de dialogo, que te avise de que esa información ya existe.
Un saludo. _________________ Iré a cualquier sitio siempre y cuando sea hacia delante.
Livingstone |
|
| Volver arriba |
|
 |
Marky Master

Registrado: 28 Dic 2002Mensajes: 251Ubicación: Las Rozas - Madrid (España)
|
Publicado: Vie 02 May, 2003 11:07 am Asunto: |
|
|
No estoy seguro de esto que te voy a decir, pero el error de "key violation" puede que salte porque el campo en el que intentas hacer la búsqueda es un índice primario. En ese caso, y te vuelvo a repetir que no estoy muy seguro, es mejor que pruebes con:
| Código: |
if( Table1->FindKey(OPENARRAY(TVarRec,(Edit->Text))) )
ShowMessage("El registro ya existe");
|
Pero previamente tienes que haber ajustado la propiedad "IndexName" del TTable. A ver si con esto consigues algún resultado. |
|
| Volver arriba |
|
 |
cancun Ens

Registrado: 22 Mar 2003Mensajes: 32Ubicación: Cancun, Q.Roo, México
|
Publicado: Vie 02 May, 2003 4:53 pm Asunto: |
|
|
Hola Peruzzi
Así la cosa cambia, me quedó más claro que el agua.
El error es por que estás usando el mismo TTable para editar y hacer la busqueda, cuando haces el Locate se ejecuta el Post primero, te da error y se sale del evento, por lo tanto nunca se ejecuta tu código completo.
Sugerencias:
Usa otra TTable que use la misma tabla para tu busqueda.
Usa FindKey en lugar de Locate _________________ Saludos
Roger Ruiz |
|
| Volver arriba |
|
 |
Peruzzi Invitado
|
Publicado: Vie 02 May, 2003 5:38 pm Asunto: Urgente |
|
|
A ver pongo este codigo en el evento BEFOREACTION de un TDBNavigator:
bool dato=TTEst->FindKey(OPENARRAY(TVarRec,(DBEdit1->Text)));
//El error esta en que me lo intenta guardar antes de comprobar.
if(Button==nbPost && dato )
{ /*SI EL TEXTO YA ESTÁ EN LA TABLA...*/
Application->MessageBox("Ya existe un registro con estos datos.","¡Aviso!",MB_OK|MB_ICONEXCLAMATION);
Abort();
y me sigue dandoerror, yo creo que es porque me guarda el dato antes de comprobar si ya esta asi que me sale el error de key violation.¿como puedo hacer para que me ejecute el codigo antes de guardar el dato??? |
|
| Volver arriba |
|
 |
cancun Ens

Registrado: 22 Mar 2003Mensajes: 32Ubicación: Cancun, Q.Roo, México
|
Publicado: Vie 02 May, 2003 5:45 pm Asunto: |
|
|
Hola Peruzzi
No sé si leiste mi mensaje anterior, en el te explico lo que sucede, si no te quedo claro, dimelo y trataré de ser más explícito. _________________ Saludos
Roger Ruiz |
|
| Volver arriba |
|
 |
|