Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Problema de comprobacion de datos existentes (https://www.clubdelphi.com/foros/showthread.php?t=48174)

enecumene 18-09-2007 04:00:29

Problema de comprobacion de datos existentes
 
Hola de nuevo aqui vuelvo con otro problema:eek:, estoy tratando de comprobar si los datos entre dos campos son iguales segun lo que digita el usuario para poder avisarle al usuario que esos datos ya existen, aqui codigo:

Código Delphi [-]
procedure TFTramite.BitBtn1Click(Sender: TObject);
begin
if MessageDlg('¿Está seguro que desea Guardar?', mtConfirmation,
       [mbYes, mbNo], 0) = mrYes then
begin
if (dbModal.Text=ZTramite.FieldByName('tipo_tra').Value) and (dbTramite.Text=ZTramite.FieldByName('tramite_no').Value) then
begin
  ShowMessage('Tramite ya exise');
  end else begin
   If (dbArea.Text = '') OR
   (dbModal.Text = '') OR
   (dbTramite.Text = '') OR
   (dbRubro.Text = '') OR
   (dbfechacre.Text = '') OR
   (dbRespon.Text = '') OR
   (dbfechaent.Text = '') OR
   (DBComboBox1.Text = '') OR
   (dbStatus.Text = '') then
     MessageDlg('Hay Casillas sin Llenar Por Favor Llenarlo',mtError,[mbOK],0)
   else
    begin
     ZTramite.post;
    ZTramite.insert;
   end;
end;
end;
end;

y lo unico que hace es tirarme el showmessage:rolleyes:, si no me explique muy bien, por favor diganmelo que no tengo ningun problema en explicarlo de nuevo.

Saludos.

Ivanzinho 18-09-2007 08:47:24

¿Qué tipo de componentes son dbModal y dbTramite? ¿Qué almacenas en su propiedad Text?

Un saúdo.

duilioisola 18-09-2007 08:52:08

Puede ser que ZTramite.FieldByName('tipo_tra').Value o que ZTramite.FieldByName('tramite_no').Value sea null ?

enecumene 18-09-2007 16:25:00

Hola [Ivanzinho] dbModal y dbTramite son TDBEdits, y duilioisola los campos no son nulos, los datos existen. Saludos.

Ivanzinho 18-09-2007 16:38:48

¿El DataSource que proveé los datos a los dbedits a que tabla apunta, no será a ZTramite?

De no ser así, ¿como buscas el registro a comparar en la tabla ZTramite?

Si te tira siempre el showmessage es porque se cumple la condición, prueba a ejecutar en modo Debug y pon un punto de interrupción en el if para ver los valores.

Un saúdo

enecumene 18-09-2007 16:48:45

Cita:

Empezado por Ivanzinho (Mensaje 231867)
¿El DataSource que proveé los datos a los dbedits a que tabla apunta, no será a ZTramite?

De no ser así, ¿como buscas el registro a comparar en la tabla ZTramite?

Si te tira siempre el showmessage es porque se cumple la condición, prueba a ejecutar en modo Debug y pon un punto de interrupción en el if para ver los valores.

Un saúdo

El Datasource apunta la tabla ZTramite, yyyy lo demas no entendi lo que me referias, perdona mi ignorancia:rolleyes:.

Saludos..

eduarcol 18-09-2007 16:49:40

lo que sucede es que estas comparando solo con el registro activo, dos opciones, o capturas la excepcion o realizas la busqueda antes de insertar pero en otro datasource para que este no pierda el registro activo

Ivanzinho 18-09-2007 16:53:54

Cita:

Empezado por enecumene (Mensaje 231869)
El Datasource apunta la tabla ZTramite, yyyy lo demas no entendi lo que me referias, perdona mi ignorancia:rolleyes:.

Saludos..

Ahí está el problema, estas comparando los mismos valores y por lo tanto de va a dar siempre "true". Lo que deberias hacer es crear otra tabla que apunte a la misma tabla de la base de datos y en el procedimientoBitBtn1Click compruebas si existen los datos utilizando un locate o un findkey. También puedes hacerlo lanzando una consulta a la base de datos mediante un query.

Un saúdo

enecumene 18-09-2007 18:17:26

bueno estoy haciendo lo siguiente:

Código Delphi [-]
procedure TFTramite.BitBtn1Click(Sender: TObject);
begin
if MessageDlg('¿Está seguro que desea Guardar?', mtConfirmation,
       [mbYes, mbNo], 0) = mrYes then
begin
if (ZTramite.FieldByname('tramite_no').value = dbTramite.Text) and (ZTramite.FieldByname('tipo_tra').value = dbModal.Text) then
begin
  with ZQuery1 do
  begin
    Close;
    ParamByName('tipo').Value:= dbModal.Text;
    ParamByName('tramite').Value:= dbTramite.Text;
    Open;
    if RecordCount > 0 then
    begin
      showmessage('Tramite ya existe');
      Abort;
    end;
  end;
end else begin
   If (dbArea.Text = '') OR
   (dbModal.Text = '') OR
   (dbTramite.Text = '') OR
   (dbRubro.Text = '') OR
   (dbfechacre.Text = '') OR
   (dbRespon.Text = '') OR
   (dbfechaent.Text = '') OR
   (DBComboBox1.Text = '') OR
   (dbStatus.Text = '') then
     MessageDlg('Hay Casillas sin Llenar Por Favor Llenarlo',mtError,[mbOK],0)
   else
    begin
    ZRegistro.SQL.Clear;
    ZRegistro.SQL.Text:= '//consulta sql';
    ZRegistro.execsql;
   end;
end;
end;
end;

problema? no hace nada, ni inserta, ni me presenta el mensaje, ni un error, se queda igual..

Saludos.

eduarcol 18-09-2007 18:28:31

porq despues que compruebas no das opciones, prueba esto

Código Delphi [-]
procedure TFTramite.BitBtn1Click(Sender: TObject);
begin
  if MessageDlg('¿Está seguro que desea Guardar?', mtConfirmation, [mbYes, mbNo], 0) = mrYes then
  begin
     //Valida que los campos esten vacios
     If (dbArea.Text = '') OR
        (dbModal.Text = '') OR
        (dbTramite.Text = '') OR
        (dbRubro.Text = '') OR
        (dbfechacre.Text = '') OR
        (dbRespon.Text = '') OR
        (dbfechaent.Text = '') OR
        (DBComboBox1.Text = '') OR
        (dbStatus.Text = '') then
     begin
          MessageDlg('Hay Casillas sin Llenar Por Favor Llenarlo',mtError,[mbOK],0);
          Exit;
     end; //Valida que este espacios en blanco
     with ZQuery1 do
     begin
         Close;
         ParamByName('tipo').Value:= dbModal.Text;
         ParamByName('tramite').Value:= dbTramite.Text;
         Open;
         if RecordCount > 0 then
         begin
           showmessage('Tramite ya existe');
           Exit;
         end;
     end; //with zquery

     ZRegistro.SQL.Clear;
     ZRegistro.SQL.Text:= '//consulta sql';
     ZRegistro.execsql;
  end; //Pregunat si desea guardar
end; //Fin del procedure

enecumene 18-09-2007 18:42:20

Gracias Eduarcol, lamentablemente no he podido probar tu sugerencia debido a un problema Acentos como en el hilo que abri hace 1 dia.

Saludos.

enecumene 19-09-2007 01:32:51

Hola Eduarcol, ya pude probar tu sugerencia y debo decirte que me funciono de mil maravillas, lo probe con una base de datos en mi casa ya que no tiene problema de acentos, solo es en la oficina donde trabajo que tiene ese problema, me da la impresion que es la version del paquete que tiene instalado, pos mañana hare la prueba instalando la version que tengo en mi casa,

De nuevo muchas a todos que me echaron mano en esto.

Saludos.


La franja horaria es GMT +2. Ahora son las 07:03:39.

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