|
Claro, si entendi, yo te puse un ejemplo genérico.
Aver, te voy a indicar una manera de hacerlo, usando la funcion SetSQLSelect del datawindow, con la que puedes cambiar el SELECT del DW en tiempo de ejecución.
1. Crea un FreeForm de tipo external con los siguientes datos:
edad_ini (numerico)
edad_fin (numerico)
estciv (string(1))
sueldo_ini (numerico)
sueldo_fin (numerico)
bcp(numerico)
scotiabank(numerico)
interbank(numerico)
Esto lo acomodas de una manera agradable al usuario, por ejemplo en el campo estciv, puedes crear un DropDownLisBox, (en la pestaña edit), ingresando en "Code Table" los elementos del DropDownLisBox:
S = Soltero
C = Casado
V = Viudo
D = Divorciado
T = Todos
Tambien deberias cambiar en StyleType a EditMask (###,###.00) para los datos de sueldo_ini, sueldo_fin, bcp, Scotiabank, Interbank
La edad_ini y edad_fin tambien deberian ser EditMask, pero solo con (##), ya que no se manejan decimales en la edad.
Lo guardas con el nombre dw_1
2. Aquí viene la parte buena, creas un FreeForm que va a contener el cálculo que queremos.
- Te vas a Nuevo / DataWindow / FreeForm,
- le indicas en Data Source a "Quick Select" - Next -
- seleccionas la tabla que contiene los datos (en mi ejemplo se llama a1a)
- seleccionas cualquier campo para que se active el boton OK - le das OK
- Next - Finish
- cuando aparesca el Painter del datawindow, has click en el boton "Data Source", si no lo encuentras, anda al menu Design / DataSource
- Una vez que aparezca el diseño del DataSource, selecciona el menu Design / Convert To Sintaxis
- Aquí aparece el SELECT, que uno puede alterar manualmente cuando nuestra consulta no puede representarse gráficamente.
- borra lo que aparece y reemplazalo por:
SELECT COUNT(*) AS TOTAL FROM a1a
//El Where se lo vamos a meter por codigo segun nuestras condiciones.
- haces click en el boton return
- Acomoda los 2 objetos de manera presentable, ponle un fondo plomo por ejemplo al dato, y en negrita
- Lo guardas con el nombre dw_total
3. Acomodas estos 2 DW en una ventana, dw_1 (dataobject = dw_1), y dw_2 (dataobject = dw_total)
- Le creas 2 botones, uno que diga Consulta, y otro que diga Salir.
- En el boton salir puedes ponerle el codigo :
Close(Parent)
Y marcas la opcion Cancel, para poder cerrarlo pulsando escape
En el evento open de la ventana ingresa:
dw_1.InsertRow(0)
y en el evento clicked del boton Consulta ingresa:
dw_1.AcceptText()
Integer li_edad_ini, li_edad_fin
string ls_estciv
decimal ld_sueldo_ini,ld_sueldo_fin, ld_bcp, ld_scotiabank, ld_interbank
// Capturamos los datos del dw
li_edad_ini = dw_1.object.edad_ini[1]
li_edad_fin = dw_1.object.edad_fin[1]
ls_estciv = dw_1.object.estciv[1]
ld_sueldo_ini = dw_1.object.sueldo_ini[1]
ld_sueldo_fin = dw_1.object.sueldo_fin[1]
ld_bcp = dw_1.object.bcp[1]
ld_scotiabank = dw_1.object.scotiabank[1]
ld_interbank = dw_1.object.interbank[1]
String ls_where = "", ls_sql
// EDAD
If not IsNull(li_edad_ini) and not IsNull(li_edad_fin) and li_edad_ini > 0 and li_edad_fin > 0 then
ls_where = ls_where + " AND (edad >= " + string(li_edad_ini) + " AND edad <= " + string(li_edad_fin) + ")"
end if
// Estado Civil
If not IsNull(ls_estciv) and ls_estciv <> "T" then
ls_where = ls_where + " AND estciv = '" + trim(ls_estciv) + "'"
end if
// SUELDO
If not IsNull(ld_sueldo_ini) and not IsNull(ld_sueldo_fin) and ld_sueldo_ini > 0 and ld_sueldo_fin > 0 then
ls_where = ls_where + " AND (sueldo >= " + string(ld_sueldo_ini) + " AND sueldo <= " + string(ld_sueldo_fin) + ")"
end if
//BCP
If not IsNull(ld_bcp) then
ls_where = ls_where + " AND bcp >= " + string(ld_bcp)
end if
//scotiabank
If not IsNull(ld_scotiabank) then
ls_where = ls_where + " AND scotiabank >= " + string(ld_scotiabank)
end if
//scotiabank
If not IsNull(ld_interbank) then
ls_where = ls_where + " AND interbank >= " + string(ld_interbank)
end if
If len(ls_where) > 0 Then
ls_where = " WHERE "+ right(ls_where, len(ls_where) - 5)
End If
ls_sql = " SELECT COUNT(*) AS TOTAL FROM a1a " + ls_where
messagebox(ls_where,ls_sql)
dw_2.SetSQLSelect(ls_sql)
//Aqui se cambia el SELECT con el WHERE de nuestra consulta
dw_2.SetTransObject(SQLCA)
dw_2.Retrieve()
Ahora pruebalo, debe funcionar.
Verifica el nombre de tu tabla para que puedas ponerla en la variable ls_sql, ya que yo uso el nombre de mi tabla que se llama "a1a"
He tratado de explicarte lo mas claro que pude, espero te sirva.
Fernando
|