
Ejemplo usando BDE
#121
Escrito 28 noviembre 2008 - 09:07
Saludos.
#122
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 09:14
En este codigo se muestran todos los campos(toda la data existente.)
procedure TFCamas.Button3Click(Sender: TObject); begin ADOQuery1.Filtered := False; ADOQuery1.Close; ADOQuery1.Open; 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.
begin ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1); ADOQuery1.Filtered := True; DBGrid1.Columns[4].Font.Color:= ClRed; end;
Este que pone esa columna a rojo y nunca se cambia en el codigo otra vez el color.
Un Saludo.
#123
Escrito 28 noviembre 2008 - 09:20
begin ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1); ADOQuery1.Filtered := True; DBGrid1.Columns[4].Font.Color:= ClRed; //Aquí 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.
#124
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 09:29
Pues el mismo código lo dice:
delphi
begin ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1); ADOQuery1.Filtered := True; DBGrid1.Columns[4].Font.Color:= ClRed; //Aquí 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
Escrito 28 noviembre 2008 - 09:40
procedure TForm1.DBGrid1DrawColumnCell (Sender: TObject; const Rect: TRect; DataCol: Integer; Column: TColumn; State: TGridDrawState); begin if ADOQuery1.FieldByName('FechaV').AsDateTime < Fecha1 then begin DBGrid1.Canvas.Font.Color:=clRed; end; if DataCol = 4 then //Si la columna 4 es el de la fecha colocas 4 sino la que corresponda DBGrid1.DefaultDrawColumnCell (Rect, DataCol, Column, State); end;
Eso lo pones en el evento OnDrawColumnCell de tu DBGrid.
Saludos.
#126
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 09:41

// este si lo cambio es solo la referencia del ComboBox. if (CBusca.Text = 'Numero de Cama') then begin // este no que es la referencia a la base de datos. ADOQuery1.Filter := 'NumeroCama = '+QuotedStr(Edit1.Text); ADOQuery1.Filtered := True; 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_*
Escrito 28 noviembre 2008 - 09:46
var FCamas: TFCamas; implementation uses UQR1, UQR2; {$R *.dfm} procedure TFCamas.Button1Click(Sender: TObject); begin Close; end; procedure TFCamas.FormCreate(Sender: TObject); Var BaseDeDatos, ConStr : String; IniFile: TIniFile; begin // Obtiene la ruta y el nombre de la base de datos IniFile := TIniFile.Create(ExtractFilePath(Application.ExeName)+'Direccion.ini'); BasedeDatos := IniFile.ReadString('BD','Path',''); If BasedeDatos = '' then ShowMessage('Error al cargar Base de Datos'); ConStr := 'Provider=Microsoft.Jet.OLEDB.4.0;'+ 'Data Source='+BaseDeDatos+';'+ 'Persist Security Info=False;'+ 'Jet OLEDB:Database Password=admin'; ADOConnection1.ConnectionString := ConStr; ADOConnection1.Open; ADOQuery1.Open; DateTimePicker1.Date:= now; end; procedure TFCamas.DBMemo1Click(Sender: TObject); begin DBMemo1.Height:= 241; DBMemo1.Width:= 737; end; procedure TFCamas.DBMemo1DblClick(Sender: TObject); begin DBMemo1.Height:= 17; DBMemo1.Width:= 737; end; procedure TFCamas.CBuscaChange(Sender: TObject); var Fecha1: Tdate; begin Fecha1:= now; Label2.Caption:= 'Seleccione el ' +CBusca.Text; if (CBusca.Text = 'Expiration Date') then begin ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1); ADOQuery1.Filtered := True; DBGrid1.Columns[4].Font.Color:= ClRed; end; end; procedure TFCamas.Button2Click(Sender: TObject); begin if (CBusca.Text = 'Numero de Cama') then begin ADOQuery1.Filter := 'NumeroCama = '+QuotedStr(Edit1.Text); ADOQuery1.Filtered := True; end else if (CBusca.Text = 'Modelo') then begin ADOQuery1.Filter := 'Modelo = '+QuotedStr(Edit1.Text); ADOQuery1.Filtered := True; end else if (CBusca.Text = 'Numero de Serie') then begin ADOQuery1.Filter := 'NumeroSerie = '+QuotedStr(Edit1.Text); ADOQuery1.Filtered := True; end else if (CBusca.Text = 'Fabricante') then begin ADOQuery1.Filter := 'Fabricante = '+QuotedStr(Edit1.Text); ADOQuery1.Filtered := True; end; end; procedure TFCamas.Button3Click(Sender: TObject); begin ADOQuery1.Filtered := False; ADOQuery1.Close; ADOQuery1.Open; end; procedure TFCamas.Button4Click(Sender: TObject); begin ADOQuery1.Edit; ADOQuery1.FieldByName('FechaV').Value:= DateTimePicker1.Date; ADOQuery1.Post; end; procedure TFCamas.Imprimirporcama1Click(Sender: TObject); begin try QR1:=TQR1.Create(self); QR1.ADOQuery1.SQL.Text:= ' Select * From Camas '; QR1.ADOQuery1.SQL.Add(' WHERE NumeroCama = :Num'); QR1.ADOQuery1.Parameters.ParamByName('num').Value:= ADOQuery1.FieldByName('NumeroCama').Value; QR1.ADOQuery1.Open; QR1.QRLabel1.Caption := 'Control por Cama'; QR1.Preview; finally QR1.Free; end; end; procedure TFCamas.Button5Click(Sender: TObject); begin PopupMenu1.Popup(Mouse.CursorPos.X, Mouse.CursorPos.Y); end; procedure TFCamas.Imprimirporfechavencida1Click(Sender: TObject); var Fecha1: Tdate; begin Fecha1:= now; ShortDateFormat := 'mm/dd/yyyy'; try QR2:=TQR2.Create(self); QR2.ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1); QR2.ADOQuery1.Filtered := True; QR2.ADOQuery1.Open; ShortDateFormat := 'dd/mm/yyyy'; QR2.QRLabel1.Caption := 'Control por Fecha Vencida'; QR2.Preview; finally QR2.Free; end; end; end.
Un Saludo.
#128
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 09:52
if ADOQuery1.FieldByName('FechaV').AsDateTime < Fecha1 thenbegin
Dice que fecha1 no esta declarada.
Un Saludo.
#129
Escrito 28 noviembre 2008 - 09:55
var fecha1: TDate; begin fecha1 := now; if ADOQuery1.FieldByName('FechaV').AsDateTime < Fecha1 then begin //...
Saludos.
#130
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 10:06

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'
procedure TFCamas.Button3Click(Sender: TObject); begin ADOQuery1.Filtered := False; ADOQuery1.Close; ADOQuery1.Open; 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
Escrito 28 noviembre 2008 - 10:34
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]
#132
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 10:44
Por otra parte encontre como hacer que no diera el problemita que le comentaba a Fernando.
procedure TFCamas.CBuscaChange(Sender: TObject); var Fecha1: Tdate; begin Fecha1:= now; Label2.Caption:= 'Seleccione el ' +CBusca.Text; if (CBusca.Text = 'Expiration Date') then begin ADOQuery1.Filter := 'FechaV < '+DateToStr(Fecha1); ADOQuery1.Filtered := True; //DBGrid1.Columns[4].Font.Color:= ClRed; end; end;
Comente esa linea del codigo y esta trabajando bien.
Un Saludo.
#133
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 10:57
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
Escrito 28 noviembre 2008 - 11:20
En el boton See All pon este codigo:
procedure TFCamas.BitBtn4Click(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQL.Text:= 'Select * From camas'; ADOQuery1.Open; 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
#135
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 11:29
Hola
En el boton See All pon este codigo:
delphi
procedure TFCamas.BitBtn4Click(Sender: TObject); begin ADOQuery1.Close; ADOQuery1.SQL.Text:= 'Select * From camas'; ADOQuery1.Open; 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
Escrito 28 noviembre 2008 - 11:43
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.
procedure TFCamas.BitBtn4Click(Sender: TObject); begin ADOQuery1.Filtered := False; // esto es lo nuevo ADOQuery1.Close; ADOQuery1.SQL.Text:= 'Select * From camas'; ADOQuery1.Open; 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.


Saludos
#137
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 11:51
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_*
Escrito 28 noviembre 2008 - 11:55
esta diferente y no se pero aqui se pone el mes/dia/año.
Ahora estoy medio confundido.

Un Saludo.
#139
Escrito 28 noviembre 2008 - 12:05
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
#140
Guest_Jose Fco_*
Escrito 28 noviembre 2008 - 12:12

Ya le agregue el codigo de Fernando tambien y ya tengo los colores deceados en cada evento.

Gracias Carlos y Un Saludo.
PD:No cambie nada mas asi que esta como ultimo lo dejastes.