Страница 1 из 3
Table struct local в интерфейсе и отчёте
Добавлено: 11 апр 2008, 10:30
RAJAH
Здравствуйте все!
Заметил странную особенность - почему-то одна и та же таблица в памяти (table struct local) при её заполнении в фейсе оказывается пустой в отчёте, и наоборот - при заполнении в отчёте, фейс не видит в ней ни одной записи. И таблица, и интерфейс, и отчёт подключаются к одному проекту (include и make). Это у всех так? Таблица же должна быть одна и та же в пределах проекта. У нас Галактика 8.10.53.0, Support 5.3.18.0 на MSSQL.
Добавлено: 11 апр 2008, 11:04
Алексей
таблица описана в проекте?
если наполнять её в випе, потом получать отчет и обратиться к таблице, данные в ней должны сохраниться и быть доступными из фрм.
Добавлено: 11 апр 2008, 12:18
RAJAH
Содержание файла проекта:
var
nr1: comp;
#include C:\Forms\TPP\SpecTree.vpp
#include C:\Forms\TPP\SpecTree2.vpp
#include C:\Forms\TPP\SpecTree3.vpp
#make 'C:\Forms\TPP2\TreePS.vip'
#make 'C:\Forms\TPP\Specif.vip'
#make 'c:\Forms\TPP2\PodNorm.slk'
Файл SpecTree2.vpp с таблицей:
table struct local tlist2
(
fnum: longint,
fmc: string,
fnn: string[18],
fin: integer,
fmcnr: comp,
fpar: comp,
ftip: string[150],
fwtip: word,
fkoef: double,
fend: boolean,
fob: string[30],
fchar: string[21],
fnrp: comp,
fizg: string,
fizgk: string[15],
fskl: string,
fsklk: string[15],
fkol: double,
fued: string[15],
foed: string[15],
fotk: double,
fokdp: string[11],
frazm: string[20]
)
with index
(
iipw = fin+fpar+fwtip,
inum = fnum
);
В интерфейсе TreePS.vip происходит insert в tlist2. Специально ставлю message(tlist2.fmc) после каждого insert tlist2 set.... - выдаётся.
А когда в PodNorm.slk делаю цикл по вьюхе create view sost2 * from tlist2 (c помощью .{table ) - ничего нет.
Добавлено: 11 апр 2008, 12:41
Алексей
1. а что за описание переменных в проекте?
2. а в slk при описании логической таблицы на tlist2 ограничений никаких не наложено?
3. попробуйте логическую таблицу в слк
т.е. жестко указать индекс...
ну и тэйбл делать как
Добавлено: 11 апр 2008, 12:42
edward_K
mtChangeRefCount посмотрите и на форуме поищите.
весь вопрос - откуда отчет запускается. Если в том же фейсе где и наполняется то должно и так работать.
Добавлено: 11 апр 2008, 13:07
RAJAH
Для Алексея:
1. а что за описание переменных в проекте?
Глобальная переменная, для проекта.
2. а в slk при описании логической таблицы на tlist2 ограничений никаких не наложено?
Нет, беру всё.
3. попробуйте логическую таблицу в слк
Попробовал так с индексом - всё равно нет записей.
Для edward_k:
В интерфейсе TreePS.vip есть строка RunForm('PodNorm'), после которой следует CloseInterface(0). В том то и дело, что должно, а не работает.
Добавлено: 11 апр 2008, 13:37
Den
Если фейс запускается из формы, то тока поможет :
Процедура mtChangeRefCount
Назначение
Увеличивает /уменьшает счетчик ссылок на экземпляр данных таблицы в памяти. Если счетчик ссылок = 0, то экземпляр освобождается. Система ведет два счетчика ссылок - один для прикладного, другой для системного использования. Таким образом, система не позволяет освободить экземпляр таблицы в памяти до тех пор, пока на нее есть хотя бы одна реальная ссылка.
Описание
function mtChangeRefCount(iTable : integer;
iCount : integer
) : longInt;
Параметры
iTable - номер узла в логической таблице.
iCount - значение, на которое надо увеличить /уменьшить значение счетчика ссылок на экземпляр таблицы в памяти.
Возвращаемое значение
Возвращает новое значение счетчика ссылок.
Добавлено: 11 апр 2008, 14:21
RAJAH
А где её написать?
Пробовал в интерфейсе двумя способами
Код: Выделить всё
mtChangeRefCount(#sost2.tlist2, 1);
RunForm('PodNorm');
CloseInterface(0);
И так:
Код: Выделить всё
RunForm('PodNorm');
mtChangeRefCount(#sost2.tlist2, 1);
CloseInterface(0);
Не помогло...
Добавлено: 11 апр 2008, 15:12
Den
Дак прямо в интерсе пеерд вызовом формы..
Только у Вас как то странно mtChangeRefCount(#sost2.tlist2, 1);
tlist2 то вроде название таблицы....
Добавлено: 11 апр 2008, 15:20
edward_K
mtChangeRefCount(sost2.tntlist2, 1); попробуйте. ну и ест.перед runform.
вообще перед run еще раз проверте, что записи есть (цикл сделайте ).
Добавлено: 11 апр 2008, 15:20
RAJAH
Если перед tlist2 не писать имя вьюхи ругается - "нет такой функции, поля или метода #tlist2". Перед RunForm и пишу - не помогает.
Добавлено: 11 апр 2008, 15:34
RAJAH
Непонятно...
При вставке записей много - срабатывает множество message:
Код: Выделить всё
sost2.insert tlist2 set
tlist2.fmc := probel(sost.tlist.fin)+sost.tlist.fmc,
tlist2.fnum := j,
tlist2.fnn := sost.tlist.fnn,
tlist2.fmcnr:= sost.tlist.fmcnr,
tlist2.fin := sost.tlist.fin,
tlist2.ftip := sost.tlist.ftip,
tlist2.fwtip:= sost.tlist.fwtip,
tlist2.fob := sost.tlist.fob,
tlist2.fchar:= sost.tlist.fchar,
tlist2.fend := sost.tlist.fend,
tlist2.fnrp := sost.tlist.fnrp,
tlist2.fizg := sost.tlist.fizg,
tlist2.fizgk:= sost.tlist.fizgk,
tlist2.fskl := sost.tlist.fskl,
tlist2.fsklk:= sost.tlist.fsklk,
tlist2.fkol := sost.tlist.fkol,
tlist2.fkoef:= sost.tlist.fkoef,
tlist2.fued := sost.tlist.fued,
tlist2.foed := sost.tlist.foed,
tlist2.fotk := sost.tlist.fotk,
tlist2.fokdp:= sost.tlist.fokdp,
tlist2.frazm:= sost.tlist.frazm,
tlist2.fpar := sost.tlist.fpar;
j:=j+1;
message(sost2.tlist2.fmc);
До вызова RunForm - только один message (самый первый):
Код: Выделить всё
sost2._loop
{
message(sost2.tlist2.fmc);
}
mtChangeRefCount(sost2.tntlist2, 100);
RunForm('TreePodNorm');
CloseInterface(0);
А в форме - ни одного...
Код: Выделить всё
.{table 'sost2' by sost2.tlist2.fnum
.begin
message(sost2.tlist2.fmc);
dopar:=ispar;
ispar:=sost2.tlist2.fpar;
nrc:=ispar;
obz:=sost2.tlist2.fob;
wtip:=sost2.tlist2.fwtip;
razmer:=sost2.tlist2.frazm;
mcnr:=sost2.tlist2.fmcnr;
nn:=' '+sost2.tlist2.fnn;
mc:=sost2.tlist2.fmc;
ediz:=sost2.tlist2.fued;
kol:=sost2.tlist2.fkol*sost2.tlist2.fkoef*sost2.tlist2.fotk;
pdrk:=' '+sost2.tlist2.fizgk;
sklk:=' '+sost2.tlist2.fsklk;
end.
Как так?!
Добавлено: 11 апр 2008, 15:40
Den
RAJAH писал(а):Если перед tlist2 не писать имя вьюхи ругается - "нет такой функции, поля или метода #tlist2". Перед RunForm и пишу - не помогает.
У Вас в интерфейсе логическая таблица поименованная что ли sost2 ?
Ой да, не заметил..сорри
Добавлено: 11 апр 2008, 15:45
RAJAH
Прошу прощения, во втором случае message также, как и в первом, выводятся в большом количестве, но в форме всё равно нет ни одного.
Добавлено: 11 апр 2008, 15:49
Den
А что возвращает после вставок необходимых в tlist2
Message(Recodsintable(sost2.tntlist2));