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)
-   -   MessageDlg Con varios DBEdits (https://www.clubdelphi.com/foros/showthread.php?t=47002)

enecumene 15-08-2007 23:30:15

MessageDlg Con varios DBEdits
 
Hola amigos aqui estoy de nuevo, tengo una de como hacer esto aqui dejo codigo:

Código Delphi [-]
procedure TFPedido.BitBtn1Click(Sender: TObject);
begin
If DBEdit7.Text = '' then MessageDlg('Debe especificar el número de Pedido',mtError,[mbOK],0)
   begin
      TbPedido.Insert;
      MessageDlg('Los Datos se grabaron exitosamente!',mtConfirmation,[mbOK],0);
   end;
end;

como agrego mas DBEdits a parte del DBEdit7.Text = ''? seria de esta manera?:

Código Delphi [-]
procedure TFPedido.BitBtn1Click(Sender: TObject);
begin
If DBEdit7.Text = '', DBEdit8.Text = '', etc, etc then MessageDlg('Debe especificar el número de Pedido',mtError,[mbOK],0)
   begin
      TbPedido.Insert;
      MessageDlg('Los Datos se grabaron exitosamente!',mtConfirmation,[mbOK],0);
   end;
end;

eso me pasa por estar un poco alejado de la programacion delphi:D..

Saludos..

Caral 15-08-2007 23:33:40

Hola
Código Delphi [-]
procedure TFPedido.BitBtn1Click(Sender: TObject);
begin
If (DBEdit7.Text) and (DBEdit8.Text) and (DBEdit9.Text) = ' ' then MessageDlg('Debe especificar el número de Pedido',mtError,[mbOK],0)
   begin
      TbPedido.Insert;
      MessageDlg('Los Datos se grabaron exitosamente!',mtConfirmation,[mbOK],0);
   end;
end;
Saludos

enecumene 16-08-2007 00:00:24

Hola, Caral gracias por tu pronta respuesta, pero me sucede lo siguiente me sale este error 'Operator is not applicable to this operand type' este es el codigo modificado segun tu ejemplo:

Código Delphi [-]
procedure TFPedido.BitBtn1Click(Sender: TObject);
begin
If (DBEdit7.Text) and (DBComboBox2.Text) and (DBEdit13.Text) and (DBLookUpComboBox5.Text) and(DBLookUpComboBox6.Text) and (DBLookUpComboBox7.Text) and (DBLookUpComboBox8.Text) and (DBEdit14.Text) and (DBEdit15.Text) and (DBLookUpComboBox1)= '' then MessageDlg('Hay Casillas sin Llenar Por Favor Llenarlo',mtError,[mbOK],0)
   begin
      TbPedido.Insert;
      MessageDlg('Los Datos se grabaron exitosamente!',mtConfirmation,[mbOK],0);
   end;
end;

Saludos..

Caral 16-08-2007 00:05:54

Hola
Revisa el codigo, al ultimo combobox le falta el text.
Me cuentas
Saludos

egostar 16-08-2007 00:07:38

Yo creo que debería ser así,

Código Delphi [-]
procedure TFPedido.BitBtn1Click(Sender: TObject);
begin
If (DBEdit7.Text = '') and 
   (DBComboBox2.Text = '') and 
   (DBEdit13.Text = '') and 
   (DBLookUpComboBox5.Text = '') and
   (DBLookUpComboBox6.Text = '') and 
   (DBLookUpComboBox7.Text = '') and 
   (DBLookUpComboBox8.Text = '') and 
   (DBEdit14.Text = '') and 
   (DBEdit15.Text = '') and 
   (DBLookUpComboBox1.Text = '') then 
    MessageDlg('Hay Casillas sin Llenar Por Favor Llenarlo',mtError,[mbOK],0)
   begin
      TbPedido.Insert;
      MessageDlg('Los Datos se grabaron exitosamente!',mtConfirmation,[mbOK],0);
   end;
end;
No puedes hacer la comparación como la quieres hacer

Salud OS

egostar 16-08-2007 00:10:13

Pero pensandolo bien mas bien debería ser así

Código Delphi [-]
procedure TFPedido.BitBtn1Click(Sender: TObject);
begin
If (DBEdit7.Text = '') OR
   (DBComboBox2.Text = '') OR
   (DBEdit13.Text = '')  OR 
   (DBLookUpComboBox5.Text = '') OR
   (DBLookUpComboBox6.Text = '') OR 
   (DBLookUpComboBox7.Text = '') OR 
   (DBLookUpComboBox8.Text = '') OR 
   (DBEdit14.Text = '') OR 
   (DBEdit15.Text = '') OR 
   (DBLookUpComboBox1.Text = '') then 
    MessageDlg('Hay Casillas sin Llenar Por Favor Llenarlo',mtError,[mbOK],0)
   begin
      TbPedido.Insert;
      MessageDlg('Los Datos se grabaron exitosamente!',mtConfirmation,[mbOK],0);
   end;
end;

Con una sola de las condiciones que se cumpla te debe dar el error.....

Salud OS

enecumene 16-08-2007 00:16:02

excelente egostar muchas gracias me funciona de pelos y sucede que tambien faltaba un else asi:

Código Delphi [-]
procedure TFPedido.BitBtn1Click(Sender: TObject);
begin
If (DBEdit7.Text = '') AND
   (DBComboBox2.Text = '') and
   (DBEdit13.Text = '')  and 
   (DBLookUpComboBox5.Text = '') and
   (DBLookUpComboBox6.Text = '') and 
   (DBLookUpComboBox7.Text = '') and 
   (DBLookUpComboBox8.Text = '') and 
   (DBEdit14.Text = '') and 
   (DBEdit15.Text = '') and 
   (DBLookUpComboBox1.Text = '') then 
    MessageDlg('Hay Casillas sin Llenar Por Favor Llenarlo',mtError,[mbOK],0)
   else <--- Aqui ---> 
   begin
      TbPedido.Insert;
      MessageDlg('Los Datos se grabaron exitosamente!',mtConfirmation,[mbOK],0);
   end;
end;

porque sin ella aunque apareciera el mensaje como quiera se grababa los datos en blanco.

Saludos..

egostar 16-08-2007 00:19:10

Checa con el segundo post que te envié, le cambie los AND por OR y nos comentas

Salud OS

enecumene 16-08-2007 00:25:39

gracias egostar igual me funciona, de nuevo te lo agradezco.

Saludos..

dec 16-08-2007 00:43:20

Hola,

A riesgo de ser "pedante" o de no aportar nada en absoluto (cualquiera de estas cosas pueden ser) prepararía una función "EmptyTextProperty" tal que esta:

Código Delphi [-]
function EmptyTextProperty(controls:
 array of TWinControl): boolean;
var
  i: integer;
  buffer: array [0..MAX_PATH] of char;
begin
  result := false;
  for i := Low(controls) to High(controls) do begin
    GetWindowText(controls[i].Handle,buffer,Length(buffer));
    if (Trim(buffer) = EmptyStr) then begin
      result := false;
      break;
    end
    else
      result := true;
  end;
end;

De modo que podrías usarla tal que así:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if EmptyTextProperty([ then
    DBEdit7,
    DBEdit14,
    DBEdit15,
    DBEdit13,
    DBComboBox2,
    DBLookUpComboBox5,
    DBLookUpComboBox6,
    DBLookUpComboBox7,
    DBLookUpComboBox8,
    DBLookUpComboBox1
  ]) then begin
    // Ningún control tiene su propiedad "Text" vacía
  end else begin
    // Algún control tiene su propiedad "Text" vacía
  end;
end;

Aunque para mi gusto esos controles deberían tener un nombre descriptivo, un identificador que los identificase. De ese modo creo que las cosas quedarían bastante más claras. A modo de ejemplo:

Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
begin
  if EmptyTextProperty([ then
    dbcbPais,
    dbedNombre,
    dbedCiudad,
    dbedApellidos,
    dbcbProvincia,

    { Resto de controles }

  ]) then begin
    // Ningún control tiene su propiedad "Text" vacía
  end else begin
    // Algún control tiene su propiedad "Text" vacía
  end;
end;

En fin. No sé si te valdrá de algo o te darán ganas de mandarme allí donde cristo dio las tres voces, pero, bueno, ahí queda. :)

egostar 16-08-2007 01:22:07

Cita:

Empezado por dec (Mensaje 223420)
En fin. No sé si te valdrá de algo o te darán ganas de mandarme allí donde cristo dio las tres voces, pero, bueno, ahí queda. :)

Vamos amigo David, que eso que pones esta genial, a veces uno solo contesta con la respuesta inmediata, pero viendo lo que posteas, no me queda mas que decir, excelente....:)

Salud OS

dec 16-08-2007 01:27:55

Hola,

Gracias egostar. Repasando el asunto, parece que no queda muy claro que se llame la función "EmptyTextProperty" y retorne "false" si algún control tiene su propiedad "Text" vacía... pareciera que debería ser al revés, es decir:

Código Delphi [-]
function EmptyTextProperty(controls:
 array of TWinControl): boolean;
var
  i: integer;
  buffer: array [0..MAX_PATH] of char;
begin
  result := true;
  for i := Low(controls) to High(controls) do begin
    GetWindowText(controls[i].Handle,buffer,Length(buffer));
    if (Trim(buffer) = EmptyStr) then begin
      result := true;
      break;
    end
    else
      result := false;
  end;
end;

De este modo ahora se "lee" mejor:

Código Delphi [-]
if EmptyTextProperty([Control1,Control2]) then
  // Alguna propiedad Text de los controles está vacía
else
  // Ninguna propiedad Text de los controles está vacía

Creo que así se lee mejor y más claro. ¿Verdad? :)

egostar 16-08-2007 01:30:54

Por supuesto, está mejor, por cierto, me has dado una buena idea con ese código, :D:D:D

Salud OS.

enecumene 16-08-2007 02:10:20

Gracias Dec Excelente tambien me sirve. gracias a los dos de nuevo..


La franja horaria es GMT +2. Ahora son las 10:56:41.

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