PDA

Ver la Versión Completa : MessageDlg Con varios DBEdits


enecumene
15-08-2007, 23:30:15
Hola amigos aqui estoy de nuevo, tengo una de como hacer esto aqui dejo codigo:

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?:

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

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:

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í,


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í


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:

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:


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í:


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:


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
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:


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:


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