Script de requêteJe crée un script qui commence par une fenêtre modale et exécute quelques procédures stockées et joint automatiquement les tables résultantes. Ce sont des tables assez volumineuses et je souhaite ajouter une option permettant à l'utilisateur d'exécuter quelque chose de similaire au générateur de requêtes, dans lequel il peut sélectionner des colonnes comme filtres et saisir les données qu'il souhaite filtrer.
Comment dois-je procéder avant que les tables ne soient ouvertes ? Je veux minimiser le temps nécessaire pour exécuter les procédures et joindre les tables, donc filtrer les données après l'ouverture de la table finale n'est pas vraiment ce que je veux faire.
Toutes les suggestions seraient grandement appréciées!
Re : Script de requêteUne solution générale à cela serait assez compliquée. Vous pouvez créer une boîte de dialogue avec un nombre fixe de sélections à effectuer.
// 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 requêteSerais-je capable de créer un filtre si j'exécutais les procédures stockées, obtenais une liste complète des colonnes et de leurs types de données, et les utilisais d'une manière ou d'une autre comme options? Il finit par faire environ 45 colonnes, donc s'il y a quelque chose de mieux, faites-le moi savoir !
Re : Script de requêteComment amener l'utilisateur à sélectionner le filtre ? Comme si je voulais ouvrir les tables de données mais je voulais seulement où :Length était entre 20-40 et :Scale était de 25 nanomoles. Mais je veux que l'utilisateur puisse sélectionner les filtres qu'il souhaite appliquer à partir des colonnes disponibles.
Re : Script de requêteVous pouvez ajouter des invites à votre fenêtre modale pour préfiltrer les données. Voici un exemple simple qui permet à un utilisateur de présélectionner des produits et des emplacements avant l'exécution de la requête. J'ai codé en dur la liste des valeurs parmi lesquelles choisir, mais idéalement, vous obtiendriez cela dynamiquement avec des requêtes 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
);

Sortie du journal :
{"AAAA", "CCCC"}
{"England", "Germany", "Italy"}
"t.products IN ('AAAA', 'CCCC')"
"t.locations IN ('England', 'Germany', 'Italy')"