09.08.2013, 18:48 | #1 |
Участник
|
Сравнение Query.pack()
Здравствуйте!
Есть таблица, где есть поле типа контейнер. Туда я пишу query.pack(). Мне надо узнать, есть ли уже в этом поле данный запрос. Как это сделать? X++: void compareFunc(container _packedQuery) { ; for (i = 1; i<= conpeek(this.ContainerField); i++) { if (conPeek(this.containerField, i) == conpeek(_packedQuery, 1)) { info(""); } } } |
|
10.08.2013, 00:47 | #2 |
Участник
|
Добрый вечер!
myQueryTable - таблица с полем типа контейнер. У меня следующий джоб сравнивает верно: X++: static void Job30(Args _args) { // Таблица, содержащая контейнер запроса AssetTable QueryTable myQueryTable; // AssetTable - Эквивалентны container packedQuery = new Query(querystr(AssetTable)).pack(); // AxdAddress - неэквивалентны // container packedQuery = new Query(querystr(AxdAddress)).pack(); ; // Наполнил исходными данными /* QueryTable.QueryCon = (new Query(querystr(AssetTable)).pack()); QueryTable.write(); */ select firstonly myQueryTable; // Сравниваю if (myQueryTable.QueryCon == packedQuery) { info("Equal"); } } Последний раз редактировалось Cardagant; 10.08.2013 в 01:15. |
|
10.08.2013, 23:10 | #3 |
Участник
|
Добрый! Дело в том, что у меня в этом поле может храниться много query.pack(). Заполнение поля идет следующим образом
X++: this.containerField += query.pack() |
|
10.08.2013, 23:57 | #4 |
Участник
|
Цитата:
Сообщение от kit22
Добрый! Дело в том, что у меня в этом поле может храниться много query.pack(). Заполнение поля идет следующим образом
X++: this.containerField += query.pack() X++: static void EqualQueries(Args _args) { // Таблица, содержащая контейнер запроса AssetTable QueryTable myQueryTable; container containerField; // AssetTable - Эквивалентны container packedQuery = new Query(querystr(AssetTable)).pack(); // AxdAddress - неэквивалентны // container packedQuery = new Query(querystr(AxdAddress)).pack(); ; // Наполнил исходными данными /* containerField += (new Query(querystr(AssetTable)) .pack()); containerField += (new Query(querystr(AssetBudgetModel)).pack()); containerField += (new Query(querystr(AssetProposal)) .pack()); containerField += (new Query(querystr(AxdExpense)) .pack()); myQueryTable.QueryCon = containerField; myQueryTable.write(); */ select firstonly myQueryTable; containerField = myQueryTable.QueryCon; // Сравниваю while (conlen(containerField)) { if (new Query(containerField).pack() == packedQuery) { info("Equal"); } containerField = condel(containerField, 1, 1); } } Последний раз редактировалось Cardagant; 11.08.2013 в 00:39. |
|
|
За это сообщение автора поблагодарили: kit22 (1). |
11.08.2013, 13:35 | #5 |
Программатор
|
юзайте это
for (i = 1; i <= conlen(con); i++) { variable = conpeek(con, i); } |
|
11.08.2013, 14:31 | #6 |
Участник
|
|
|
11.08.2013, 20:04 | #7 |
Участник
|
Спасибо! Действительно работает, хотя и немного искусственно Но других способов не нашел. Странно, что conpeek падает на сравнение. Видимо, дело в том, что query.pack() пакуется как контейнер с BLOB данными.
|
|
12.08.2013, 09:38 | #8 |
Участник
|
Цитата:
Может кто-то предложит более красивый вариант решения данной задачи. Рад помочь! |
|
13.08.2013, 11:41 | #9 |
Участник
|
Цитата:
Напрашивается один простой способ: X++: if (
query1.dataSourceNo(1).toString() == query2.dataSourceNo(1).toString();
) |
|