PDA

Ver la Versión Completa : Como cambiar mensages en delphi y firebird


bothy
23-03-2010, 19:06:17
Hola De Nuevo Amigos
Les agradesco su ayuda ..
tengo una aplicacion en delphi y una base de datos en firebird e IBexpert
en la tabla de la BD que tengo son 4 campos y los e puesto que sean obligatorios "no null" en la aplicacion tengo los 4 dbedit que corresponden a cada campo tambien tengo un control navigator. el primer campo es la primary key .. lo que quisiera saber es como poner los mensages que me salen cuando no lleno un campo y le doy click en el post del navigator me sale el error en ingles"" field 'clave' must have a value"" tambien me sale otro mensage cuando le doy click en delet del navigator me sale un mensage de confirmacion ¿ delet field? quisiera saber como puedo cambiar esos mensage para yo poner mi propio mensage en español..
A qui les dejo un link para que se den una idea de como ise mi aplicacion
http://www.youtube.com/watch?v=nY4C3bfTh1g&feature=related
les agradesco su ayuda..:D

MAXIUM
23-03-2010, 19:43:06
Creas una excepción y en la excepción colocas tu mensaje. OJO, esto de la excepciones funciona solo en runtime, es decir, ejecutas directamente el .exe o no con el compiler.


Try
Dataset1.Close;
Except
Showmessage('Error de capa 8');
End;

bothy
23-03-2010, 20:06:43
Creas una excepción y en la excepción colocas tu mensaje. OJO, esto de la excepciones funciona solo en runtime, es decir, ejecutas directamente el .exe o no con el compiler.

Código Delphi [-] (http://www.clubdelphi.com/foros/#)Try Dataset1.Close; Except Showmessage('Error de capa 8'); End;


hola
maxium gracias por tu ayuda donde devo poner la excepcion en que enveto o procedure..

MAXIUM
24-03-2010, 02:53:29
// Avisa que este campo no puede ser nulo.
procedure TForm1.DBEdit5Exit(Sender: TObject);
begin
If Trim(DBEdit5.Text) = '' then
Begin
ShowMessage('Debe ingresar un nombre o se borrara este registro');
DBEdit5.SetFocus;
End;
end;

// Elimina el registro cuyo campo requerido sea nulo.
procedure TForm1.IBDataSet1BeforePost(DataSet: TDataSet);
begin
If Trim(DBEdit5.Text) = '' then IBDataSet1.Delete;
IBDataSet1.Edit;
end;

bothy
24-03-2010, 03:30:00
Hola maxium
con la ayuda que me diste valide que los dbedit no este "no null" pero quisiera saber tambien como puedo mandar un mensage para que cuando se repita la clave (primary key) mande un mensage que diga "la clave ya existe"
y otra vez mucha gracias por tu ayuda..

Caral
24-03-2010, 03:30:40
Hola
No se de esto pero se me ocurre asi:
En el evento OnClick del DBNaviagtor:

procedure TForm1.DBNavigator1Click(Sender: TObject;
Button: TNavigateBtn);
begin
If (TuTabla.State = dsEdit) or (TuTabla.State = dsInsert)
or (TuTabla.State = dsDelete) then
begin
If (DBEdit1.Text = ' ') or (DBEdit2.Text = ' ')
or (DBEdit3.Text = ' ') or (DBEdit4.Text = ' ') then
showMessage(' debe colocar el dato');
end;
end;
Si separas los if podras poner un mensaje por dbedit.
Espero te sirva, por lo menos sabras como no hacerlo.:)
Saludos

bothy
24-03-2010, 03:56:01
Gracias Caral..
Ahora Lo Que Quisiera Saver Es Como Mandar Un Mensage Cuando Se Repita La Clave Que Es La Primary Mandar Un Mensage "la Clave Ya Existe"
Gracias Por Su Atuda..

Caral
24-03-2010, 03:59:57
Hola
Tienes que hacer una sentencia sql que haga la comparacion con el dato que quieras.
la respuesta seria muy general sin datos como:
Que campos tienes en la tabla?.
Como los llamas?.
Es muy dificil contestar asi (por lo menos para mi).
Saludos

bothy
24-03-2010, 04:11:46
HOLA CARAL
LA TABLA DE LA BD SE LLAMA AUTORES Y SU CAMPOS SON CLAVE,NOMBRE,APPATERNO,APMATERNO LA CLAVE ES LA PRIMERY KEY "LLAVE PRIMARIA" NO DEBE DE REPETIRSE. ENTOSES QUIERO SAVER COMO MANDAR UN MENSAGE QUE DIGA "LA CLAVE YA EXISTE" CUANDO SE REPITA LA CLAVE. A QUI TE DEJO UN LINK PARA QUE VEAS COMO CONECTE LA BD CON MI APLICACION http://www.youtube.com/watch?v=nY4C3...eature=related
GRACIAS CARAL POR TU AYUDA..

bothy
24-03-2010, 04:37:58
http://www.youtube.com/watch?v=nY4C3bfTh1g&feature=related (http://www.youtube.com/watch?v=nY4C3bfTh1g&feature=related)

mire que el link de arriba no es correcto asi que aqui lo vuelvo a poner

Casimiro Notevi
24-03-2010, 04:41:05
Amigo bothy, recuerda que, en internet, escribir todo en mayúsculas equivale a gritar, y es algo que no está bien visto en ningún sitio de internet.
Por cierto, te recuerdo que esa norma y otras más las puedes encontrar leyendo la guía de estilo (http://www.clubdelphi.com/foros/guiaestilo.php), gracias.

movorack
24-03-2010, 04:57:07
googleando (http://www.google.com.co/search?q=delphi+firebird+duplicate+key+exception&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:es-AR:official&client=firefox-a)... me encontré con un link que me remitia nuevamente al club... aquí está el post, (http://www.clubdelphi.com/foros/showthread.php?p=356448) podria ser de ayuda.

bothy
24-03-2010, 05:30:54
hola de nuevo amigos
quisiera saver cómo detectar o saber por ejemplo la excepción del gestor de base de datos "Violation of UNIQUE KEY constraint XXXXX", "Cannot insert the value NULL into column YYYYY" o "INSERT statement conflicted with COLUMN FOREIGN KEY constraint" para cuando se presente mostrarle al usuario lo siguiente:


-"Cannot insert the value NULL into column YYYYY" = No puede insertar nulo en el campo xxx

-"Violation of UNIQUE KEY constraint XXXXX" = Registro duplicado

-"INSERT statement conflicted with COLUMN FOREIGN KEY constraint" = Referencia no existe.

Es decir atendiendo al error que me devuelva el gestor de base de datos mostraré mi mensaje personalizado. utilizo firebird e IBExpert

defcon1_es
24-03-2010, 10:12:44
Defines un procedimiento para el tratamiento de errores y lo usas donde consideres oportuno, ej: evento OnPostError de los DataSet, al abrirlos, etc.



//Este lo puedes llamar desde el evento OnPostError de tus DataSets
procedure ErrorEnPost(DataSet: TDataSet; E: EDatabaseError; var Action: TDataAction);
begin
Action := daAbort;
DataSet.Cancel;
ErrorBaseDatos(E);
end;

// Este es el "genérico"
procedure ErrorBaseDatos(E: EDatabaseError);
begin
if E is EIBInterBaseError
then begin
case EIBInterBaseError(E).IBErrorCode of
$14000019: AvisoError('Aviso', 'Coincidencia en el uso del registro.' +#13+
'Otro usuario lo tiene en uso.' +#13+
'Inténtelo de nuevo. -No es un error-'+#13+
'---------------------------------------'+#13+
'Error/Excepción FireBird: (' + E.Message + ')');
$14000159: AvisoError('Aviso', 'Clave primaria duplicada.' +#13+
'Ya existe un registro igual al selecionado (con el mismo ID).'+#13+
'Intente esta operación de nuevo. -No es un error-'+#13+
'---------------------------------------'+#13+
'Error/Excepción FireBird: (' + E.Message + ')');
$14000037: AvisoError('No hay acceso a la Base de Datos',
'La base de datos no existe o '+#13#10+
'el servidor de FireBird está desactivado.'+#13+
'---------------------------------------'+#13+
'Error/Excepción FireBird: ' + E.Message);
$140001A5: AvisoError('Se ha perdido la conexión con el servidor de FireBird',
'Se perdió la conexión con el servidor de FireBird.'+#13#10+
'Revise el equipo Servidor y compruebe que tiene'+#13#10+
'activo el servidor de FireBird. (Panel de Control/FireBird Server Manager)'+#13+
'---------------------------------------'+#13+
'Error/Excepción FireBird: ' + E.Message);
$14000018: AvisoError('Error al abrir la Base de Datos',
'El sistema no puede hallar la Base de Datos especificada.'+#13#10+
'Compruebe que la ruta es correcta, el fichero existe'+#13#10+
'y el usuario tiene permisos de acceso.'+#13+
'Se cerrará la aplicación.'+#13+
'---------------------------------------'+#13+
'Error/Excepción FireBird: ' + E.Message);
$14000191: AvisoError('No hay acceso al equipo servidor',
'No se ha podido establecer conexión ya que el equipo'+#13#10+
'de destino ha denegado activamente dicha conexión.'+#13#10+
'Compruebe el estado de su red y sus permisos dentro de la misma.'+#13+
'---------------------------------------'+#13+
'Error/Excepción FireBird: ' + E.Message);
else Aviso('Error/Excepción FireBird: '+IntToStr(EIBInterBaseError(E).IBErrorCode)+#13#10#13#10+E.Message);
end;
SysUtils.Abort;
end
else ErrorNoBaseDatos(Exception(E));
end;

bothy
24-03-2010, 19:23:53
hola defcon1_es (http://www.clubdelphi.com/foros/member.php?u=2644)
hice lo que me pusiste en post agregue ala seccion uses "ib" para que no me marcara error el EIBInterBaseError pero noce porque me marca error en la linea
procedure TFromAutores.ClientDataSet1PostError(DataSet: TDataSet;
E: EDatabaseError; var Action: TDataAction);
begin
Action := daAbort;
clientdataset1.Cancel ;
//aqui el error
ErrorBaseDatos(E);

end;
y tambien me marca error en todos los "AvisoError" y "aviso"
gracias por la yuda amigo..

defcon1_es
25-03-2010, 18:54:16
Prueba a cambiar clientdataset1.Cancel por DataSet.Cancel;

Las funciones AvisoError y Aviso son de ejemplo, puedes cambiarlas por ShowMessage o similar.

bothy
25-03-2010, 19:24:59
Prueba a cambiar clientdataset1.Cancel por DataSet.Cancel;

Las funciones AvisoError y Aviso son de ejemplo, puedes cambiarlas por ShowMessage o similar. hola de nuevo y gracias por ayudarme
cambie el dataset.cancel por el clientdataset.cancel y los avisos por showmessage pero en los mensages me marcaba error las comas asi que le puse el "+" y despues me marco error en
else ErrorNoBaseDatos(Exception(E)); undeclaret identifier sale el error..

defcon1_es
26-03-2010, 16:48:07
Fijate que el procedimiento ErrorBaseDatos espera como parámetro un objeto de la clase EDataBaseError, no de la clase Exception, por lo que no puedes hacer
else ErrorNoBaseDatos(Exception(E));

Sino que debes hacer la llamada asi:

else ErrorNoBaseDatos(E);