Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Como cambiar mensages en delphi y firebird (https://www.clubdelphi.com/foros/showthread.php?t=67000)

bothy 23-03-2010 19:06:17

Como cambiar mensages en delphi y firebird
 
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=nY4C3...eature=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.

Código Delphi [-]
Try 
    Dataset1.Close;
Except
    Showmessage('Error de capa 8');
End;

bothy 23-03-2010 20:06:43

Cita:

Empezado por MAXIUM (Mensaje 357983)
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 [-]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

Código Delphi [-]
// 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:
Código Delphi [-]
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

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, gracias.

movorack 24-03-2010 04:57:07

googleando... me encontré con un link que me remitia nuevamente al club... aquí está el post, 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.


Código Delphi [-]
//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
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
Código Delphi [-]
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

Cita:

Empezado por defcon1_es (Mensaje 358298)
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
Código Delphi [-]
   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
Código Delphi [-]
else ErrorNoBaseDatos(Exception(E));

Sino que debes hacer la llamada asi:

Código Delphi [-]
else ErrorNoBaseDatos(E);


La franja horaria es GMT +2. Ahora son las 16:55:40.

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