Ir al contenido


Ejemplo usando BDE


  • Por favor identifícate para responder
162 respuestas en este tema

#121 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2008 - 09:07

Exacto, no tendrás problemas, sólo cambias en el ComboBox y en el código anterior en el IF.

Saludos.
  • 0

#122 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 09:14

Ok entendida esa parte.Ahora esta lo que le comentaba a Carlos, a cerca del color rojo en las fechas vencidas.
En este codigo se muestran todos los campos(toda la data existente.)


delphi
  1. procedure TFCamas.Button3Click(Sender: TObject);
  2. begin
  3.   ADOQuery1.Filtered := False;
  4.   ADOQuery1.Close;
  5.   ADOQuery1.Open;
  6. end;



Lo que decia era que si despues de mostrar las camas que tienen la fecha vencida, le doy a este boton(mostrar todas) Me pone las fechas en color rojo todas y es por el codigo anterior.


delphi
  1.   begin
  2.             ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1);
  3.             ADOQuery1.Filtered := True;
  4.             DBGrid1.Columns[4].Font.Color:= ClRed;
  5.             end;


Este que pone esa columna a rojo y nunca se cambia en el codigo otra vez el color.

Un Saludo.

#123 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2008 - 09:20

Pues el mismo código lo dice:



delphi
  1. begin
  2.             ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1);
  3.             ADOQuery1.Filtered := True;
  4.             DBGrid1.Columns[4].Font.Color:= ClRed; //Aquí
  5.             end;



Si son todas las camas incluyendo las vencidas deberías quitar ese pedacito de código, ahora, lo que no entiendo es ¿si quieres que al mostrar todas las camas se muestren en rojo las vencidas y las demás normal?.

Saludos.
  • 0

#124 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 09:29

Pues el mismo código lo dice:



delphi
  1. begin
  2.             ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1);
  3.             ADOQuery1.Filtered := True;
  4.             DBGrid1.Columns[4].Font.Color:= ClRed; //Aquí
  5.             end;



Si son todas las camas incluyendo las vencidas deberías quitar ese pedacito de código, ahora, lo que no entiendo es ¿si quieres que al mostrar todas las camas se muestren en rojo las vencidas y las demás normal?.

Saludos.


Claro esa seria la idea perfecta y actuaria como una alarma.Si la fecha esta vencida en rojo y si no esta vencida en negro.
Lo ideal seria un codigo que al comenzar el programa (cada vez que se habra) que haga un recorrido y si alguna fecha esta vencida que de una alarma.Un beep y que las muestre en rojo.Pero que cuando muestre una que la fecha no este vencida que el color sea negro.

Un Saludo.
PD:¿Es muy complicado lograr esto?

#125 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2008 - 09:40

A ver prueba esto, dudo que funcione porque no lo he probado:



delphi
  1. procedure TForm1.DBGrid1DrawColumnCell
  2.   (Sender: TObject; const Rect: TRect;
  3.     DataCol: Integer; Column: TColumn;
  4.     State: TGridDrawState);
  5. begin
  6. if ADOQuery1.FieldByName('FechaV').AsDateTime < Fecha1 then
  7. begin
  8.   DBGrid1.Canvas.Font.Color:=clRed;
  9. end;
  10. if DataCol = 4 then //Si la columna 4 es el de la fecha colocas 4 sino la que corresponda
  11.   DBGrid1.DefaultDrawColumnCell
  12.     (Rect, DataCol, Column, State);
  13. end;



Eso lo pones en el evento OnDrawColumnCell de tu DBGrid.

Saludos.

  • 0

#126 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 09:41

Bueno siguiendo con el relajo de cambiarle el lenguaje al programita. :D



delphi
  1.  // este si lo cambio es solo la referencia del ComboBox.
  2. if (CBusca.Text = 'Numero de Cama') then
  3.        begin
  4.   // este no que es la referencia a la base de datos.
  5.           ADOQuery1.Filter := 'NumeroCama = '+QuotedStr(Edit1.Text);
  6.           ADOQuery1.Filtered := True;
  7.        end


La mejor forma de aprender para mi es entendiendo paso a paso que hace cada pedazo de codigo.

Un Saludo.

#127 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 09:46

Hola Fernando, esto es lo que tengo en el codigo.


delphi
  1. var
  2.   FCamas: TFCamas;
  3.  
  4. implementation
  5.  
  6. uses UQR1, UQR2;
  7.  
  8. {$R *.dfm}
  9.  
  10. procedure TFCamas.Button1Click(Sender: TObject);
  11. begin
  12.   Close;
  13. end;
  14.  
  15. procedure TFCamas.FormCreate(Sender: TObject);
  16. Var BaseDeDatos, ConStr : String;
  17.     IniFile: TIniFile;
  18. begin
  19.     // Obtiene la ruta y el nombre de la base de datos
  20.   IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Direccion.ini');
  21.   BasedeDatos := IniFile.ReadString('BD','Path','');
  22.   If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos');
  23.   ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+
  24.             'Data Source='+BaseDeDatos+';'+
  25.             'Persist Security Info=False;'+
  26.             'Jet OLEDB:Database Password=admin';
  27.   ADOConnection1.ConnectionString := ConStr;
  28.   ADOConnection1.Open;
  29.   ADOQuery1.Open;
  30.   DateTimePicker1.Date:= now;
  31.  
  32. end;
  33.  
  34. procedure TFCamas.DBMemo1Click(Sender: TObject);
  35. begin
  36.     DBMemo1.Height:= 241;
  37.     DBMemo1.Width:= 737;
  38. end;
  39.  
  40. procedure TFCamas.DBMemo1DblClick(Sender: TObject);
  41. begin
  42.     DBMemo1.Height:= 17;
  43.     DBMemo1.Width:= 737;
  44. end;
  45.  
  46. procedure TFCamas.CBuscaChange(Sender: TObject);
  47. var
  48. Fecha1: Tdate;
  49. begin
  50. Fecha1:= now;
  51.   Label2.Caption:= 'Seleccione el ' +CBusca.Text;
  52.   if (CBusca.Text = 'Expiration Date') then
  53.             begin
  54.             ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1);
  55.             ADOQuery1.Filtered := True;
  56.             DBGrid1.Columns[4].Font.Color:= ClRed;
  57.             end;
  58. end;
  59.  
  60. procedure TFCamas.Button2Click(Sender: TObject);
  61. begin
  62.     if (CBusca.Text = 'Numero de Cama') then
  63.         begin
  64.           ADOQuery1.Filter := 'NumeroCama = '+QuotedStr(Edit1.Text);
  65.           ADOQuery1.Filtered := True;
  66.         end
  67.         else if (CBusca.Text = 'Modelo') then
  68.             begin
  69.                 ADOQuery1.Filter := 'Modelo = '+QuotedStr(Edit1.Text);
  70.                 ADOQuery1.Filtered := True;
  71.             end
  72.         else if (CBusca.Text = 'Numero de Serie') then
  73.             begin
  74.                 ADOQuery1.Filter := 'NumeroSerie = '+QuotedStr(Edit1.Text);
  75.                 ADOQuery1.Filtered := True;
  76.             end
  77.       else if (CBusca.Text = 'Fabricante') then
  78.             begin
  79.                 ADOQuery1.Filter := 'Fabricante = '+QuotedStr(Edit1.Text);
  80.                 ADOQuery1.Filtered := True;
  81.               end;
  82. end;
  83.  
  84. procedure TFCamas.Button3Click(Sender: TObject);
  85. begin
  86.   ADOQuery1.Filtered := False;
  87.   ADOQuery1.Close;
  88.   ADOQuery1.Open;
  89. end;
  90.  
  91. procedure TFCamas.Button4Click(Sender: TObject);
  92. begin
  93.   ADOQuery1.Edit;
  94.   ADOQuery1.FieldByName('FechaV').Value:= DateTimePicker1.Date;
  95.   ADOQuery1.Post;
  96. end;
  97.  
  98. procedure TFCamas.Imprimirporcama1Click(Sender: TObject);
  99. begin
  100.   try
  101.   QR1:=TQR1.Create(self);
  102.   QR1.ADOQuery1.SQL.Text:= ' Select * From Camas ';
  103.   QR1.ADOQuery1.SQL.Add(' WHERE NumeroCama = :Num');
  104.   QR1.ADOQuery1.Parameters.ParamByName('num').Value:= ADOQuery1.FieldByName('NumeroCama').Value;
  105.   QR1.ADOQuery1.Open;
  106.   QR1.QRLabel1.Caption := 'Control por Cama';
  107.   QR1.Preview;
  108.   finally
  109.   QR1.Free;
  110.   end;
  111. end;
  112.  
  113. procedure TFCamas.Button5Click(Sender: TObject);
  114. begin
  115.   PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y);
  116. end;
  117.  
  118. procedure TFCamas.Imprimirporfechavencida1Click(Sender: TObject);
  119. var
  120. Fecha1: Tdate;
  121. begin
  122. Fecha1:= now;
  123.   ShortDateFormat := 'mm/dd/yyyy';
  124.   try
  125.   QR2:=TQR2.Create(self);
  126.   QR2.ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1);
  127.   QR2.ADOQuery1.Filtered := True;
  128.   QR2.ADOQuery1.Open;
  129.   ShortDateFormat := 'dd/mm/yyyy';
  130.   QR2.QRLabel1.Caption := 'Control por Fecha Vencida';
  131.   QR2.Preview;
  132.   finally
  133.   QR2.Free;
  134.   end;
  135. end;
  136.  
  137. end.



Un Saludo.

#128 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 09:52

Poniendo tu codigo me da este error:


delphi
  1. if ADOQuery1.FieldByName('FechaV').AsDateTime < Fecha1 thenbegin


Dice que fecha1 no esta declarada.

Un Saludo.

#129 enecumene

enecumene

    Webmaster

  • Administrador
  • 7.409 mensajes
  • LocationRepública Dominicana

Escrito 28 noviembre 2008 - 09:55



delphi
  1. var
  2.   fecha1: TDate;
  3. begin
  4. fecha1 := now;
  5.   if ADOQuery1.FieldByName('FechaV').AsDateTime < Fecha1 then begin
  6.     //...



Saludos.
  • 0

#130 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 10:06

Eso esta trabajando bien. :D
Al comenzar el programa te muestra solo las fechas vencidas en rojo y las demas en negro.Ahora si selecionas en el ComboBox Fechas Vencidas te muestra como es de esperar las fechas vencidas nada mas y en rojo.Pero si despues de esto le das al boton 'Mostrar todas'


delphi
  1. procedure TFCamas.Button3Click(Sender: TObject);
  2. begin
  3.   ADOQuery1.Filtered := False;
  4.   ADOQuery1.Close;
  5.   ADOQuery1.Open;
  6. end;


Te las muestra todas en color rojo y es por lo que ya sabemos que en el codigo de ver por fechas vencidas le decimos al grid que su columna 4 sera roja y no existe un codigo en este procedimiento de ver todas que desmienta eso y lo repare. ;)
No se si me explico bien.

Un Saludo.

#131 Caral

Caral

    Advanced Member

  • Administrador
  • 4.263 mensajes
  • LocationCosta Rica

Escrito 28 noviembre 2008 - 10:34

Hola
Hice algunos arreglos y tambien algunos reportes mas.
En el combobox de search hay otra opcion.
Arregle las tablas para que no diera errores.
Ya no se ponen en rojo, solo cuando estan vencidas.
Solo tendrias que poner el reloj y el banner y listo.
Te dejo el programa completo con los arreglos, funciona todo, revisalo.
Saludos

[archivo adjunto borrado por el administrador]
  • 0

#132 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 10:44

Gracias Carlos, de inmediato lo bajo y trabajando en el.
Por otra parte encontre como hacer que no diera el problemita que le comentaba a Fernando.


delphi
  1. procedure TFCamas.CBuscaChange(Sender: TObject);
  2. var
  3. Fecha1: Tdate;
  4. begin
  5. Fecha1:= now;
  6.   Label2.Caption:= 'Seleccione el ' +CBusca.Text;
  7.   if (CBusca.Text = 'Expiration Date') then
  8.             begin
  9.             ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1);
  10.             ADOQuery1.Filtered := True;
  11.             //DBGrid1.Columns[4].Font.Color:= ClRed;
  12.             end;
  13. end;



Comente esa linea del codigo y esta trabajando bien.

Un Saludo.

#133 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 10:57

Ok ya lo corri y tiene un problemita.Cuando selecionas por rango de fecha trabaja bien, pero ya no te deja verlas todas otra vez.Tienes que salirte del programa y reiniciarlo otra vez.Dale una miradita al codigo que me paso Fernando, esta bueno y le da la obsion de poder desde el inicio ver las que estan vencidas en color rojo y las demas en negro.Borrando la linea que comente en el post anterior trabaja bien y se le termino el problemita de que no regresaba a los colores negros si la fecha no estaba vencida.

Un Saludo.

PD:Creo que le hace falta algo que permita poder salir de esa parte del codigo y poder verlas todas otra vez.

#134 Caral

Caral

    Advanced Member

  • Administrador
  • 4.263 mensajes
  • LocationCosta Rica

Escrito 28 noviembre 2008 - 11:20

Hola
En el boton See All pon este codigo:


delphi
  1. procedure TFCamas.BitBtn4Click(Sender: TObject);
  2. begin
  3.   ADOQuery1.Close;
  4.   ADOQuery1.SQL.Text:= 'Select * From camas';
  5.   ADOQuery1.Open;
  6. end;


El asunto es sencillo, el query queda cargado con la sentencia sql que se le dio en el panel de fechas.
Con eso simplemente cargas el query a su estado normal.
Vi e implemente el codigo de Fernando, muy bueno.
De todos modos deje la opcion de ver las vencidas es comodo.
Saludos
  • 0

#135 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 11:29

Hola
En el boton See All pon este codigo:


delphi
  1. procedure TFCamas.BitBtn4Click(Sender: TObject);
  2. begin
  3.   ADOQuery1.Close;
  4.   ADOQuery1.SQL.Text:= 'Select * From camas';
  5.   ADOQuery1.Open;
  6. end;


El asunto es sencillo, el query queda cargado con la sentencia sql que se le dio en el panel de fechas.
Con eso simplemente cargas el query a su estado normal.
Vi e implemente el codigo de Fernando, muy bueno.
De todos modos deje la opcion de ver las vencidas es comodo.
Saludos


Hola Carlos, si cambias este codigo y pruebas a selecionar por fechas vencidas.Al presionar See All no responde.
a mi me pasa eso.
Un Saludo.

#136 Caral

Caral

    Advanced Member

  • Administrador
  • 4.263 mensajes
  • LocationCosta Rica

Escrito 28 noviembre 2008 - 11:43

Hola
Cada vez que se hace un filtro este queda activo.
Es igual que si cambias la sentencia sql, queda activa.
Lo que se tiene que hacer es retornar a los valores originales.


delphi
  1. procedure TFCamas.BitBtn4Click(Sender: TObject);
  2. begin
  3.   ADOQuery1.Filtered := False; // esto es lo nuevo
  4.   ADOQuery1.Close;
  5.   ADOQuery1.SQL.Text:= 'Select * From camas';
  6.   ADOQuery1.Open;
  7. end;


Como ves, simplemente se indica que el filtro ya no esta activo.
Esto sucede cuando se trabaja con un solo query, si tienes varios esto no es necesario, pero hombre me pediste un programa para Novato, que querias. :D :D
Saludos
  • 0

#137 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 11:51

Ese era el problemita.Y asi es la mejor forma de aprender, entendiendo cada pedazo de codigo linea por linea.
Ya esta trabajando bien el boton "See All". Le agregare el codigo de Fernando por el hecho de que al comenzar te deja ver desde un inicio si existen camas con la fecha vencida y ademas te permite que si al salir de esa parte y quieres ver todas, entonces solo te pone en rojo las vencidas y las demas en negro.
Este proyecto me a sido de gran ayuda para poder entrar en este campo de las bases de datos. ;)

Un Saludo.

#138 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 11:55

Hola Carlos, si te distes cuenta que este ultimo codigo pone en el dbgrid la fechas vencidas en formato 28/11/2008?

esta diferente y no se pero aqui se pone el mes/dia/año.

Ahora estoy medio confundido. :p

Un Saludo.

#139 Caral

Caral

    Advanced Member

  • Administrador
  • 4.263 mensajes
  • LocationCosta Rica

Escrito 28 noviembre 2008 - 12:05

Hola
A ver, sigueme:
1- Dale doble click al adoquery1.
2- Te saldra una pantallita en donde estan los nombres de los campos de la tabla.
3- Posicionate en el campo FechaV
4- En el inspector de objetos veras que dice Adoquery1FechaV
5- Veras en la lista una que dice: DisplayFormat en esa veras dd/mm/yyyy
6- Cambia ese dato por mm/dd/yyyy
Listo, corre el programa
saludos
  • 0

#140 Guest_Jose Fco_*

Guest_Jose Fco_*
  • Visitante

Escrito 28 noviembre 2008 - 12:12

Resuelto el problema. :)
Ya le agregue el codigo de Fernando tambien y ya tengo los colores deceados en cada evento. (y)

Gracias Carlos y Un Saludo.

PD:No cambie nada mas asi que esta como ultimo lo dejastes.