Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
Разбирая завалы, нашел старый экспортный файл с реализацией поиска по всем таблицам в строковых полях. Понятно, что он уже не актуален, при наличие средств глобального поиска, но когда-то был нужен :)
static void findStrInAllTables(Args _args)
{
Dictionary dictionary;
DictTable dictTable;
DictField dictField;
Dialog dlg;
DialogGroup dlgg;
DialogField dlgf;
Common common;
int i, cnt, ret, res;
str fieldValue, findStr;
;
dlg = new Dialog("Поиск по всем полям");
dlgg = dlg.addGroup("Критерий");
dlgf = dlg.addField(typeid(Name), "Строка поиска");
dlgg.columns(2);
if (! dlg.run())
return;
findStr = dlgf.value(); // Нашли что искать будем
dictionary = new Dictionary();
setPrefix("Поиск соответствия");
for (i=1; i<=dictionary.tableCnt(); i++)
{
dictTable = new DictTable(dictionary.tableCnt2Id(i));
common = dictTable.makeRecord();
res = 0;
// Для каждой записи
while select common
{
// Перебор полей для таблицы
for (cnt=1; cnt<=dictTable.fieldCnt(); cnt++)
{
// Получение идентификатора поля
dictField = new DictField(dictTable.id(),
fieldId2Ext(dictTable.fieldCnt2Id(cnt),1));
if (dictField.baseType() == Types::String)
{
fieldValue = common.(dictField.id());
ret = strscan(fieldValue, findStr, 1, strlen(fieldValue));
if (ret)
{
// Вывод названия поля и его значения
info(strfmt("%1 : %2 : %3", dictTable.name(),
dictField.name(),
fieldValue));
res++;
}
}
}
}
print "Обработана таблица " + dictTable.name() +
(res ? (" Соответствий " + int2str(res)) : "");
//Для тестирования только 100 таблиц
//if (i > 100)
// break;
}
}