Guión de consultaEstoy creando un script que comienza con una ventana modal, ejecuta un par de procedimientos almacenados y se une automáticamente a las tablas resultantes. Estas son tablas bastante grandes, y quiero agregar una opción para que el usuario ejecute algo similar al Generador de consultas, donde pueden seleccionar columnas como filtros e ingresar los datos que desean filtrar.
¿Cómo haría esto antes de que las mesas estén abiertas? Quiero minimizar el tiempo que lleva ejecutar los procedimientos y unirme a las tablas, por lo que filtrar los datos después de abrir la mesa final no es realmente lo que quiero hacer.
Cualquier sugerencia sería muy apreciada!
Re: script de consultaUna solución general a esto sería bastante complicada. Podría crear un cuadro de diálogo con un número fijo de selecciones para realizar.
// Get numeric column names from sample data
dt = open("$sample_data\Boston Housing.jmp");
col_list = dt << get column names("String", numeric);
insertinto(col_list, "<NO selection="">", 1);
nw = new window("Get Data2",
panel box("Filter Data",
lineup box(ncol(3),
text box("Column"), text box("Low Value"), text box("High Value"),
cb1 = combo box(col_list),
low1 = number edit box(),
high1 = number edit box(),
cb2 = combo box(col_list),
low2 = number edit box(),
high2 = number edit box(),
cb3 = combo box(col_list),
low3 = number edit box(),
high3 = number edit box(),
// Add more columns if needed...
)
)
);</NO>

Re: script de consulta¿Podría construir un filtro si ejecutara los procedimientos almacenados, obtuviera una lista completa de columnas y sus tipos de datos, y de alguna manera los usara como opciones? Termina siendo alrededor de 45 columnas, así que si hay algo mejor, ¡por favor hágamelo saber!
Re: script de consulta¿Cómo conseguiría que el usuario seleccione el filtro? Como si quisiera abrir las tablas de datos, pero solo quería dónde: la longitud estaba entre 20-40 y: la escala era de 25 nanomoles. Pero quiero que el usuario pueda seleccionar qué filtros desea aplicar de las columnas disponibles.
Re: script de consultaPuede agregar solicitudes a su ventana modal para prefiltrar los datos. Aquí hay un ejemplo simple que le permite a un usuario preseleccionar productos y ubicaciones antes de que se ejecute la consulta. He codificado la lista de valores para elegir, pero idealmente obtendría esto dinámicamente con consultas SQL.
// Hardcode or get dynamically from the database
product_list = {"AAAA", "BBBB", "CCCC", "DDDD"};
// Hardcode or get dynamically from the database
location_list = {"China", "England", "Germany", "Italy", "Japan", "USA"};
nw = new window("Get Data", << modal,
panel box("Pre-Filter",
hlistbox(
product_cb = listbox(product_list),
location_cb = listbox(location_list)
),
),
panel box("Actions",
hlistbox(
button box("OK",
ok_pushed = 1;
selected_products = product_cb << get selected;
selected_locations = location_cb << get selected
),
button box("Cancel",
ok_pushed = 0;
)
)
)
);
if (ok_pushed,
product_in_list = "";
location_in_list = "";
print(selected_products, selected_locations);
if (nitems(selected_products) > 0,
product_in_list = "t.products IN ('" ||
concat items(selected_products, "', '") || "')";
);
if (nitems(selected_locations) > 0,
location_in_list = "t.locations IN ('" ||
concat items(selected_locations, "', '") || "')";
);
print(product_in_list, location_in_list);
// run SQL query
);

Salida de registro:
{"AAAA", "CCCC"}
{"England", "Germany", "Italy"}
"t.products IN ('AAAA', 'CCCC')"
"t.locations IN ('England', 'Germany', 'Italy')"