Страница 1 из 1

Выборка данных из таблицы в памяти

Добавлено: 28 ноя 2023, 13:55
Espada
Доброго времени суток. Подскажите пожалуйста такой вопрос: Разрабатываю интерфейс, хочу выгрузить данные из интерфейса в таблицу в памяти. Есть ли возможность обратиться к этой таблице из frm формы? Структура prj:

Код: Выделить всё

#include "g:\Рабочая папка\TablesForUPLMC.tbl"

#make 'g:\Рабочая папка\интерфейс Замены МЦ.vip'
#make 'g:\Рабочая папка\КатМЦ_Замена МЦ(УПЛ).frm' 
в TablesForUPLMC.tbl - структура, в интерфейс Замены МЦ.vip идёт запись данных в таблицу, в КатМЦ_Замена МЦ(УПЛ).frm хотелось бы использовать данные...

Re: Выборка данных из таблицы в памяти

Добавлено: 28 ноя 2023, 14:43
RAJAH
Описать в файле таблицу table struct, включить этот файл по #include в проект и можно использовать.

Re: Выборка данных из таблицы в памяти

Добавлено: 28 ноя 2023, 15:14
Espada
RAJAH писал(а): 28 ноя 2023, 14:43 Описать в файле таблицу table struct, включить этот файл по #include в проект и можно использовать.
пробую так сделать, описал структуру:

Код: Выделить всё

Table Struct mt_All
(
Nrec          : comp, 
...)
в проекте прописал #include "g:\Рабочая папка\TablesForUPLMC.tbl"
в интерфейсе записал данные в таблицу, закрываю интерфейс, потом идёт запрос из frm файла:

Код: Выделить всё

.create view _MT
from mt_All
;
пишу вывод:

Код: Выделить всё

if(_MT.getfirst mt_All = tsOk)
{
  Message('1:  ' + _MT.mt_All.OsnMC_Name + ' -- ' +  _MT.mt_All.ZamMC_Name);
}; 
но ничего не происходит, такое чувство что таблица очищается после закрытия интерфейса, либо я что-то делаю не так :cry:

Re: Выборка данных из таблицы в памяти

Добавлено: 28 ноя 2023, 16:37
RAJAH
Espada писал(а): 28 ноя 2023, 15:14 if(_MT.getfirst mt_All
Если без указания таблицы, просто getfirst?

Re: Выборка данных из таблицы в памяти

Добавлено: 28 ноя 2023, 17:42
KVS
Если вы закроете все фейсы, которые открыли таблицу в памяти, она уничтожится.
Чтобы этого не произошло, следует увеличить счётчик ссылок на таблицу: function mtChangeRefCount(iTable, iCount: integer): longInt;
После окончания работы с таблицей, соответственно установить значение счётчика на 0.

Второй способ: запускать сначала frm, в которой через runinterface запускать фейс, который заполнит ТП;
Третий способ: табличные объекты/врапперы;
Четвёртый способ: sqlCreateTmpTableAs + ReinitTableAsTmp(позволит ТП превратить в полноценную таблицу, как будно она существует в словаре)

Re: Выборка данных из таблицы в памяти

Добавлено: 28 ноя 2023, 17:42
Espada
RAJAH писал(а): 28 ноя 2023, 16:37
Espada писал(а): 28 ноя 2023, 15:14 if(_MT.getfirst mt_All
Если без указания таблицы, просто getfirst?
тоже не отрабатывало, переделал через цикл:

Код: Выделить всё

_MT._loop mt_All
{
  Message('1:  ' + _MT.mt_All.OsnMC_Name + ' -- ' +  _MT.mt_All.ZamMC_Name);
}; 
но вот что интересно, код сам запускается из каталога МЦ. когда я помечаю одну позицию и запускаю код, проявляется эта проблема. но если я помечаю несколько позиций, то начиная со второй позиции всё работает нормально! т.е. запускается ещё раз интерфейс, записываю даттые в таблицу в памяти, и потом в frm они видны... а с первой позицией что-то не так...

Re: Выборка данных из таблицы в памяти

Добавлено: 28 ноя 2023, 18:14
Irina_
Посмотрите заполнение ТП. Возможно, у Вас стоят какие-то условия на вставку записей. Можно параллельно вывести в протокол все записи, которые вставляете в ТП.

Re: Выборка данных из таблицы в памяти

Добавлено: 29 ноя 2023, 12:11
oiko
Не мучайтесь, а прикрутите форму к интерфейсу, тогда передадите в форму любой нужный вам массив данных.

Re: Выборка данных из таблицы в памяти

Добавлено: 29 ноя 2023, 15:10
Espada
не знаю, что произошло, но после очередного компилирования, всё заработало :grin:
всем спасибо за помощь)