Обсуждение:«Быстрые» выборки из базы данных
0 (0)
Обсуждение:«Быстрые» выборки из базы данных ( Обсуждение примера 02.02.2011 12:21 )
0(0)Класс RowSet облегчает написание выборок из баз данных с помощью фильтров и механизмов обратного вызова. Поддерживает метод CreateEnum, поэтому может использоваться в цикле for.
Описание методов класса с примерами внутри архива.
Посмотреть пример
>> ОтветитьОчень понравилось, буду использовать, спасибо ( Vic_Tomsk 03.02.2011 07:47 )
0(0)Not specified
>> ОтветитьСегодня исправил баги ( ironjava 04.02.2011 17:56 )
0(0)с совместным использованием методов Key и Field.
с падением программы из-за удаления сборщиком мусора объекта, который используется в Filter и Map
>> Ответитьневыходит :( ( Vic_Tomsk 07.02.2011 11:09 )
0(0)задача - вывести значения счетов "47411" и их остатки на дату 31/01/2011
var dt = date(31,1,2011); class Account macro check(acc) return true; // чтобы не усложнять код end; end; var accs; var acc; accs = RowSet("account").Field("Balance", "47411").Filter(Account, "check"); for(acc, accs) println(string(acc.Account:f), ";", RestA(acc.Account, dt)); end;
терминал валится в эксепшен.
>> ОтветитьRe: задача - вывести значения счетов "47411" и их остатки на дату 31/01/2011 ( ironjava 07.02.2011 11:33 )
0(0)способ 1) я уже нашёл этот баг и исправлял его, там проблемы были со сборщиком мусора
способ 2) но можно сделать и так
var dt = date(31,1,2011); class AccountSingleton macro check(acc) return true; // чтобы не усложнять код end; end; Account = AccountSingleton; var accs; var acc; accs = RowSet("account").Field("Balance", "47411").Filter(Account, "check"); for(acc, accs) println(string(acc.Account:f), ";", RestA(acc.Account, dt)); end;
>> ОтветитьОба способа работают. Спасибо. ( Vic_Tomsk 07.02.2011 11:57 )
0(0)Not specified
>> Ответить
еще проблемка ( Vic_Tomsk 24.02.2011 07:52 )
0(0)docs = RowSet("arhdoc").Key("Date_Carry", dt1, dt2).Filter(Document, "check");
при
var dt1 = date(1,1,2011),
dt2 = date(31,1,2011);
Выборка не срабатывает, делаю dt1 = date(11,1,2011) - рабочий день, ключ в БД существует - все работает.
Как бы сделать универсально? Есть период дат (ключ) - получаю выборку не зависимо от присутствия значений?
docs = RowSet("arhdoc").Key("Date_Carry", dt1).Filter(Document, "check"); - пустая выборка, тут все верно, если dt1 = date(1,1,2011) - нет архива, пустая выборка, а вот если диапазон значений ключа...
>> Ответитьпока сделал так ( Vic_Tomsk 24.02.2011 10:50 )
0(0)line 194:return _table.GetGE() and (_table.(_fieldName) <= _maxValue);
>> Ответитьспасибо, так действительно правильнее ( ironjava 24.02.2011 12:53 )
0(0)Not specified
>> Ответитьподскажите!!! ( Evgeniy Firsov 04.04.2011 14:29 )
0(0)Как сделать фильтр по значению поля таблицы??
в таблице ctgval есть поле CtgID
Мне надо вывести все записи,которые равны 314 (СtgID==314)
>> Ответить