Вопрос

Работа с sq_ вывод в DataGrid

Добрый день.

Хочу реализовать такие функции. Данные, которые я планирую получать,  это значения с таблицы. Есть ли в террасофт возможнось напрямую сделать запрос к БД для получения нужных результатов?

К примеру, как на php mysql_query + mysql_feach_array

function FillMemoryDataset(Dataset) {

    var Items = GetAttribute(Dataset, 'Items');

    if (!Assigned(Items)) { return; }

    Dataset.DisableEvents();

    try {

        for (var i = 0; i < Items.length; i++) {

            var Item = Items[i];                    

            Dataset.Append();

            Dataset.ValAsInt('id') = Item['id'];

            Dataset.ValAsStr('type') = Item['type'];

            Dataset.ValAsStr('pricecode') = Item['pricecode'];

            Dataset.ValAsStr('title') = Item['title'];

            Dataset.ValAsStr('text_method') =

                PrepareTestInfoStringToSearch(Item['text_method']);

            Dataset.ValAsStr('material') =

                PrepareTestInfoStringToSearch(Item['material']);                

            Dataset.ValAsStr('is_block') = GetBlockedTestInformation(Item['pricecode']);                

            Dataset.ValAsStr('is_day') = GetDayTestInformation(Item['pricecode']);                

            Dataset.ValAsStr('is_stop') = GetStopedTestInformation(Item['pricecode']);

            Dataset.ValAsBool('is_custom') = (Item['is_custom'] == true);

            Dataset.Post();

        }

    }

    finally {

        Dataset.EnableEvents();  

        Dataset.GoToFirst();

    }

}

function GetBlockedTestInformation(pricecode)

{

    Result = '';

//Тут нужно получить данные из другого запроса sq_

    return Result;

}

function GetDayTestInformation(pricecode)

{

    Result = '';

    return Result;

}

function GetStopedTestInformation(pricecode)

{

    Result = '';

    return Result;

}

Нравится

7 комментариев
Лучший ответ

Сделал так

var ds = Services.GetNewItemByUSI('mds_KsCallInvitroApiTestAdds');

            ApplyDatasetFilter(ds, 'pricecode', Item['pricecode'], true); 

            var IsBlock = '';

            var IsDay = '';

            var IsStop = '';

            ds.Open();                

            IsBlock = ds.ValAsStr('is_block');

            IsDay = ds.ValAsStr('is_day');

            IsStop = ds.ValAsStr('is_stop');            

            ds.close();

            Dataset.ValAsStr('is_block') = IsBlock;                

            Dataset.ValAsStr('is_day') = IsDay;                

            Dataset.ValAsStr('is_stop') = IsStop;

Добрый день.

 

Вы можете реализовать представление (view) и использовать его в Вашем гриде.

 

Посмотрите похожая тема обсуждается здесь.

Возможно ли это функциями Террасофта провернуть без использования Dataset?

Сделал так

var ds = Services.GetNewItemByUSI('mds_KsCallInvitroApiTestAdds');

            ApplyDatasetFilter(ds, 'pricecode', Item['pricecode'], true); 

            var IsBlock = '';

            var IsDay = '';

            var IsStop = '';

            ds.Open();                

            IsBlock = ds.ValAsStr('is_block');

            IsDay = ds.ValAsStr('is_day');

            IsStop = ds.ValAsStr('is_stop');            

            ds.close();

            Dataset.ValAsStr('is_block') = IsBlock;                

            Dataset.ValAsStr('is_day') = IsDay;                

            Dataset.ValAsStr('is_stop') = IsStop;

Для тех кто хочет получить данные из другого dataset это прост отлично подходит

Алексей, кроме предложенного Аллой варианта есть и более простой штатный способ: можно в дизайнере sq настроить колонку-подзапрос или колонку с произвольным SQL-кодом, где и реализовать вычисление нужного значения или вызов SQL-функции.

Спасибо. Но для моей задачи подошел мой вариант. Так как основной dataset формируется не по sql, а с выборки в api и мне нужно было к нему приплюсовать еще и sq.

Алексей, сразу не заметил, что Вам нужно обязательно через программное наполнение полей MemoryDataset.

Если оба источника данных, и основной, и вспомогательный типа MemoryDataset, то так, как Вы написали.

А если вспомогательный — обычный Dataset, считывающий из базы по sq и ds, то его при желании тоже можно программно создать, наложить фильтр, открыть и считать значения полей.

 

Показать все комментарии