Вопрос

Работа с 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, то его при желании тоже можно программно создать, наложить фильтр, открыть и считать значения полей.

 

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