AbfrageskriptIch erstelle ein Skript, das mit einem modalen Fenster beginnt und einige gespeicherte Prozeduren ausführt und die resultierenden Tabellen automatisch verbindet. Dies sind ziemlich große Tabellen, und ich möchte eine Option für den Benutzer hinzufügen, um etwas Ähnliches wie den Abfragegenerator auszuführen, wo er Spalten als Filter auswählen und die Daten eingeben kann, die er filtern möchte.
Wie würde ich vorgehen, bevor die Tische geöffnet sind? Ich möchte die Zeit minimieren, die zum Ausführen der Prozeduren und zum Verbinden der Tabellen benötigt wird, daher ist das Filtern der Daten nach dem Öffnen der letzten Tabelle nicht wirklich das, was ich tun möchte.
Irgendwelche Vorschläge würden sehr geschätzt!
Betreff: AbfrageskriptEine allgemeine Lösung dafür wäre ziemlich kompliziert. Sie könnten ein Dialogfeld mit einer festen Anzahl von Auswahlmöglichkeiten erstellen.
// 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>

Betreff: AbfrageskriptWäre ich in der Lage, einen Filter zu erstellen, wenn ich die gespeicherten Prozeduren ausführe, eine vollständige Liste der Spalten und ihrer Datentypen erhalte und diese irgendwie als Optionen verwende? Am Ende sind es ungefähr 45 Spalten. Wenn es also etwas Besseres gibt, lassen Sie es mich bitte wissen!
Betreff: AbfrageskriptWie würde ich den Benutzer dazu bringen, den Filter auszuwählen? Als ob ich die Datentabellen öffnen wollte, aber ich wollte nur, wo :Length zwischen 20-40 und :Scale 25 Nanomol war. Aber ich möchte, dass der Benutzer aus den verfügbaren Spalten auswählen kann, welche Filter er anwenden möchte.
Betreff: AbfrageskriptSie können Eingabeaufforderungen zu Ihrem modalen Fenster hinzufügen, um die Daten vorzufiltern. Hier ist ein einfaches Beispiel, das es einem Benutzer ermöglicht, Produkte und Standorte vorab auszuwählen, bevor die Abfrage ausgeführt wird. Ich habe die Liste der Werte fest codiert, aus denen Sie auswählen können, aber idealerweise erhalten Sie diese dynamisch mit SQL-Abfragen.
// 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
);

Ausgabe aus dem Protokoll:
{"AAAA", "CCCC"}
{"England", "Germany", "Italy"}
"t.products IN ('AAAA', 'CCCC')"
"t.locations IN ('England', 'Germany', 'Italy')"