Dialog zur Zuordnung von Schlüssel-Wert-Paaren.
Dialog zur Zuordnung von Schlüssel-Wert-Paaren. Der Aufruf öffnet einen Dialog, in dem ein Liste von Schlüssel-Werte-Paaren angezeigt wird. In der dritten Spalte der angezeigten Liste können den Werten neue Schlüssel zugeordnet werden. Die Schlüssel-Werte-Paare können wahlweise aus dem Datenpool oder aus Stringlisten geladen werden. Ist eine Anweisung zum Sichern der neuen Zuordnungen gegeben, werden die Änderungen beim Bestätigen des Dialoges automatisch im Datenpool eingetragen. In einer optionalen Liste können die neuen Schlüssel in der Reihenfolge der Paare zurückgegeben werden.
Name | Typ | Default | Beschreibung |
Return | int | 0 oder Fehlercode |
|
title | String oder char* | - | Titel des Dialoges |
info | String oder char* | - | Beschreibungstext über der Liste |
selectStmt | String oder char* | - | SQL- oder xmlquery-Anweisung zum Laden der Schlüssel-Werte-Paare. Die Anweisung darf leer sein. In diesem Fall werden die Schlüssel-Werte-Paare aus den Listen keys und values geladen. Ansonsten muss die Anweisung drei Ergebnisspalten (int, string, string]) liefern, die id des Eintrages, die zum Sichern von Änderungen verwendet wird und Schlüssel und Wert, z.B, \span[src]{select id, key_, value from tt where id > 0. |
updateStmt | String oder char* | - | SQL- oder xmlquery-Anweisung zum Sichern geänderter Schlüssel. Die Anweisung wird beim Bestätigen des Dialoges ausgeführt. Es werden nur Schlüssel mit einem Wert != "" gesichert. Die Anweisung darf leer sein. Sie wird ignoriert, wenn selectStmt leer ist. Ansonsten muss die Anweisung zwei ? enthalten. Das erste wird durch den neuen Schlüssel ersetzt, das zweite durch die id des Eintrages, etwa update tt set key_ = ? where id = ?. |
keys | StringList | 0 | Liste von Schlüsseln. Diese Liste wird nur verwendet, wenn selectStmt leer ist. |
values | StringList | 0 | Liste von Werten. Diese Liste wird nur verwendet, wenn selectStmt leer ist. Sind keys und valuesunterschiedlich lang, werden Einträge nur bis zum Ende der kürzenen Liste beachtet. un |
result | IDTypeList | 0 | Liste der neuen Schlüssel. Diese Liste wird ausgefüllt, wenn der Dialog mit Okay bestätigt wurde. Die Einträge enthalten folgende Werte: idtype::id : Alte ID (bei Listen aus keys und values die alte (1-basierte) Zeilennummer idtype::id2 : Neu ID (bei Listen aus keys und values die neue (1-basierte) Zeilennummer idtype::stringid : Neuer Schlüssel. Der Schlüssel muss dabei nicht in der Liste existieren |
Beispiel für eine einfache Neuordung von Schlüssel und Wert in einem XMl-Datenpool.
int main () { key_value_mapping ( "ttt", "Zuordnungen der Datei ttt", "'ttt.xml' select id, name2, name node colors.color where id > 0", "'ttt.xml' update name2=? node colors.color where id = ?"); return 0; }
In einem SQL-Datenpool sieht die Anweisung fast gleich aus.
int main () { key_value_mapping ( "ttt", "Zuordnungen der Tabelle ttt", "select id, key_, value from ttt where id > 0", "update ttt set key_ = ? where id = ?"); return 0; }
Für komplizierte Situationen, in denen die Schlüssel-Werte-Paare nicht über ein einfaches select geladen und über ein einfaches update gesichert werden können, können die StringListen und die Ergebnisliste verwendet werden. Hier ein einfaches Gerüst für das Skript.
int main () { StringList keys = stringlist::alloc (); StringList values = stringlist::alloc (); IDTypeList mappings = idtypelist::alloc (); IDType map = idtype::alloc (); int result; int i;
//Wertepaare sammeln for (i = 0; i < 10; i++) { char key[256], value[256];
sprintf (key, "Key %d", i+1); sprintf (value, "Value %d", i+1); stringlist::append (keys, key); stringlist::append (values, value); }
result = key_value_mapping ( "Leitnummerntausch", "Zuordung neuer Leitnummern", "", "", keys, values, mappings);
//Zuordnungen auswerten if (result == 0) { i = 0; map = idtypelist::first (mappings); while (map) { if (strcmp (idtype::stringid (map), "") != 0) { wlog ("", "Mapping : Entry %d --> '%s', old id %d, new id %d\n", i+1, idtype::stringid (map), idtype::id (map), idtype::id2 (map)); } map = idtypelist::next (mappings); i = i+1; } } return 0; }
Alphabetic index HTML hierarchy of classes or Java