Маркеры + таблицы в памяти
Модераторы: m0p3e, edward_K, Модераторы
Маркеры + таблицы в памяти
Уважаемые коллеги, правильно ли я понимаю, что маркеры не работают на временных таблицах (созданных по Table struct)?
Из "Опыта" взял пример по маркерам, скомпилировал - все отлично работает. Подставляю вместо таблицы x$Files временную, заполняю ее в CmInit значениями из x$Files - не работает. В броуз выкидывает, по записям ходит, однако в маркер ничего не добавляет.
Из "Опыта" взял пример по маркерам, скомпилировал - все отлично работает. Подставляю вместо таблицы x$Files временную, заполняю ее в CmInit значениями из x$Files - не работает. В броуз выкидывает, по записям ходит, однако в маркер ничего не добавляет.
Галактика 8.10, Oracle 10g / 10.2.0.4
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Re: Маркеры + таблицы в памяти
Совершенно неправильно...
Работают без проблем ...
Работают без проблем ...
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Re: „M„p„‚„{„u„‚„Ќ + „„„p„q„|„y„€„Ќ „r „Ѓ„p„}„‘„„„y
„^„„„Ђ „‡„Ђ„‚„Ђ„Љ„Ђ, „‰„„„Ђ „q„u„x „Ѓ„‚„Ђ„q„|„u„}
„P„‚„y„r„Ђ„w„… „ѓ„r„Ђ„z „y„ѓ„‡„Ђ„t„~„y„{ - „t„|„‘ „r„Ђ„x„}„Ђ„w„~„Ќ„‡ „{„Ђ„}„}„u„~„„„p„‚„y„u„r. „N„p cmMarkUnMark „‘ „Ѓ„Ђ„r„u„ѓ„y„| „ѓ„Ђ„Ђ„q„‹„u„~„y„u „Ђ „{„Ђ„|„y„‰„u„ѓ„„„r„u „Џ„|„u„}„u„~„„„Ђ„r „r „}„p„‚„{„u„‚„u „t„|„‘ „Ѓ„‚„Ђ„r„u„‚„{„y.
////// „I„~„{„|„…„t „ѓ „{„Ђ„~„ѓ„„„p„~„„„p„}„y:
const
sci178InsPM = 6959;
cmMarkUnMark = 2243;
cmSelectAll = 2244;
cmUnSelectAll = 2245;
cmInvertAll = 2247;
End;
/////// „R„p„} „y„~„„„u„‚„†„u„z„ѓ:
Interface Dict '„S„p„q„|„y„€„Ќ „ѓ„y„ѓ„„„u„}„Ќ'
(,,sci178InsPM) EscClose, Cyan;
show at ( 3, 1, 76, 26);
table struct tmp_db
(
nrec : Comp,
code : String,
name : String,
title: String
)
with index
(
tmp_db01 = nrec(unique,surrogate)
);
create view AllDictTables
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, tmp_db.code, IndexNo) = True, 'Ѓг', ' '),
* from tmp_db;
Panel pnTablesList;
Table tmp_db;
Browse bwTableList;
Fields
MarkerStr '' :[1], Skip;
tmp_db.code '„K„Ђ„t' : Protect, {Font = {Color = if(MarkerStr = 'Ѓг', 2, 0)}};
tmp_db.Name '„I„}„‘ „„„p„q„|„y„€„Ќ' : Protect, {Font = {Color = if(MarkerStr = 'Ѓг', 2, 0)}};
tmp_db.Title '„H„p„s„|„p„r„y„u „„„p„q„|„y„€„Ќ' : Protect, {Font = {Color = if(MarkerStr = 'Ѓг', 2, 0)}};
end;
HandleEvent
cmMarkUnMark : begin
InvertMarker(Markers, tmp_db.code);
if ((GetNext tmp_db) = tsOk) {};
RescanPanel(tntmp_db);
Message (GetMarkerCount(Markers));
end;
cmSelectAll : begin
StartNewVisual( vtRotateVisual, vfTimer, '„P„Ђ„}„u„‰„p„ђ „r„ѓ„u', 1);
PushPos(tntmp_db);
if ((Modifier GetFirst tmp_db) = tsOk)
begin
do
begin
InsertMarker(Markers, tmp_db.code);
NextVisual;
end;
while (Modifier GetNext tmp_db = tsOk)
end;
PopPos(tntmp_db);
StopVisual('', 0);
RescanPanel(tntmp_db);
end;
cmInvertAll : begin
StartNewVisual( vtRotateVisual, vfTimer, '„I„~„r„u„‚„„„y„‚„…„ђ „ѓ„Ѓ„y„ѓ„Ђ„{', 1);
PushPos(tntmp_db);
if ((Modifier GetFirst tmp_db) = tsOk)
begin
do
begin
InvertMarker(Markers, tmp_db.code);
NextVisual;
end;
while (Modifier GetNext tmp_db = tsOk)
end;
PopPos(tntmp_db);
StopVisual( '', 0);
RescanPanel(tntmp_db);
end;
cmUnSelectAll: begin
ClearMarker(Markers);
RescanPanel(tntmp_db);
end;
end;
end; // panel
HandleEvent
cmInit : begin
Markers:=InitMarker('ViewDictMarkers', 2, 1000, 100);
FieldMarkers:=InitMarker('', 2, 20, 20);
StartNewVisual( vtRotateVisual, vfTimer, '„P„Ђ„t„s„Ђ„„„Ђ„r„{„p „ѓ„Ѓ„y„ѓ„{„p...', 1);
_loop x$Files
{
tmp_db.code := x$Files.xf$Code;
tmp_db.name := x$Files.xf$Name;
tmp_db.title := x$Files.xf$Title;
insert current tmp_db;
}
GetFirst tmp_db;
StopVisual('', 0);
end;
cmDone : begin
DoneMarker(Markers, 'ViewDictMarkers');
DoneMarker(FieldMarkers, '');
end;
end;
end.
„P„‚„y„r„Ђ„w„… „ѓ„r„Ђ„z „y„ѓ„‡„Ђ„t„~„y„{ - „t„|„‘ „r„Ђ„x„}„Ђ„w„~„Ќ„‡ „{„Ђ„}„}„u„~„„„p„‚„y„u„r. „N„p cmMarkUnMark „‘ „Ѓ„Ђ„r„u„ѓ„y„| „ѓ„Ђ„Ђ„q„‹„u„~„y„u „Ђ „{„Ђ„|„y„‰„u„ѓ„„„r„u „Џ„|„u„}„u„~„„„Ђ„r „r „}„p„‚„{„u„‚„u „t„|„‘ „Ѓ„‚„Ђ„r„u„‚„{„y.
////// „I„~„{„|„…„t „ѓ „{„Ђ„~„ѓ„„„p„~„„„p„}„y:
const
sci178InsPM = 6959;
cmMarkUnMark = 2243;
cmSelectAll = 2244;
cmUnSelectAll = 2245;
cmInvertAll = 2247;
End;
/////// „R„p„} „y„~„„„u„‚„†„u„z„ѓ:
Interface Dict '„S„p„q„|„y„€„Ќ „ѓ„y„ѓ„„„u„}„Ќ'
(,,sci178InsPM) EscClose, Cyan;
show at ( 3, 1, 76, 26);
table struct tmp_db
(
nrec : Comp,
code : String,
name : String,
title: String
)
with index
(
tmp_db01 = nrec(unique,surrogate)
);
create view AllDictTables
var
Markers : LongInt;
FieldMarkers : LongInt;
IndexNo : LongInt;
(MarkerStr)
As Select
if (SearchMarker(Markers, tmp_db.code, IndexNo) = True, 'Ѓг', ' '),
* from tmp_db;
Panel pnTablesList;
Table tmp_db;
Browse bwTableList;
Fields
MarkerStr '' :[1], Skip;
tmp_db.code '„K„Ђ„t' : Protect, {Font = {Color = if(MarkerStr = 'Ѓг', 2, 0)}};
tmp_db.Name '„I„}„‘ „„„p„q„|„y„€„Ќ' : Protect, {Font = {Color = if(MarkerStr = 'Ѓг', 2, 0)}};
tmp_db.Title '„H„p„s„|„p„r„y„u „„„p„q„|„y„€„Ќ' : Protect, {Font = {Color = if(MarkerStr = 'Ѓг', 2, 0)}};
end;
HandleEvent
cmMarkUnMark : begin
InvertMarker(Markers, tmp_db.code);
if ((GetNext tmp_db) = tsOk) {};
RescanPanel(tntmp_db);
Message (GetMarkerCount(Markers));
end;
cmSelectAll : begin
StartNewVisual( vtRotateVisual, vfTimer, '„P„Ђ„}„u„‰„p„ђ „r„ѓ„u', 1);
PushPos(tntmp_db);
if ((Modifier GetFirst tmp_db) = tsOk)
begin
do
begin
InsertMarker(Markers, tmp_db.code);
NextVisual;
end;
while (Modifier GetNext tmp_db = tsOk)
end;
PopPos(tntmp_db);
StopVisual('', 0);
RescanPanel(tntmp_db);
end;
cmInvertAll : begin
StartNewVisual( vtRotateVisual, vfTimer, '„I„~„r„u„‚„„„y„‚„…„ђ „ѓ„Ѓ„y„ѓ„Ђ„{', 1);
PushPos(tntmp_db);
if ((Modifier GetFirst tmp_db) = tsOk)
begin
do
begin
InvertMarker(Markers, tmp_db.code);
NextVisual;
end;
while (Modifier GetNext tmp_db = tsOk)
end;
PopPos(tntmp_db);
StopVisual( '', 0);
RescanPanel(tntmp_db);
end;
cmUnSelectAll: begin
ClearMarker(Markers);
RescanPanel(tntmp_db);
end;
end;
end; // panel
HandleEvent
cmInit : begin
Markers:=InitMarker('ViewDictMarkers', 2, 1000, 100);
FieldMarkers:=InitMarker('', 2, 20, 20);
StartNewVisual( vtRotateVisual, vfTimer, '„P„Ђ„t„s„Ђ„„„Ђ„r„{„p „ѓ„Ѓ„y„ѓ„{„p...', 1);
_loop x$Files
{
tmp_db.code := x$Files.xf$Code;
tmp_db.name := x$Files.xf$Name;
tmp_db.title := x$Files.xf$Title;
insert current tmp_db;
}
GetFirst tmp_db;
StopVisual('', 0);
end;
cmDone : begin
DoneMarker(Markers, 'ViewDictMarkers');
DoneMarker(FieldMarkers, '');
end;
end;
end.
Галактика 8.10, Oracle 10g / 10.2.0.4
Re: Маркеры + таблицы в памяти
Упс, кодировка подвела.
Размещаю свой исходник для возможных комментариев.
На cmMarkUnMark я повесил сообщение о количестве элементов в маркере - для проверки.
Размещаю свой исходник для возможных комментариев.
На cmMarkUnMark я повесил сообщение о количестве элементов в маркере - для проверки.
Галактика 8.10, Oracle 10g / 10.2.0.4
-
- Местный житель
- Сообщения: 474
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: Сибирь-матушка
- Контактная информация:
Re: Маркеры + таблицы в памяти
Код таблицы сделай типа word и будет тебе счастье
Объявленный текущий тип String для этого поля будет иметь размер 255 байт, а в маркере будет храниться только 2 байта из них (если вообще будет, не знаю как обрабатывается несовпадение размеров элемента маркера со вставляемым в него значением, вполне может быть что никак, просто отпинывается подобное и ничего не вставляется) и, соответсвенно, ни одного из имеющихся значений в нем найдено не будет ...
Передупреждений разве на присваивание не выдавалось о преобразовании к строке ?
Объявленный текущий тип String для этого поля будет иметь размер 255 байт, а в маркере будет храниться только 2 байта из них (если вообще будет, не знаю как обрабатывается несовпадение размеров элемента маркера со вставляемым в него значением, вполне может быть что никак, просто отпинывается подобное и ничего не вставляется) и, соответсвенно, ни одного из имеющихся значений в нем найдено не будет ...
Передупреждений разве на присваивание не выдавалось о преобразовании к строке ?
Питаю патологические отвращение и ненависть в особо тяжелой и крайне запущенной формах к семейству программ Microsoft Business Solution !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
Восславим господа Кришну за то, что у нас есть ГАЛАКТИКА !
-
- Заслуженный деятель интернет-сообщества
- Сообщения: 5188
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: SPB galaxy spb
Re: Маркеры + таблицы в памяти
а для переменной comp нужно писать
InitMarker('ViewDictMarkers', 8, 1000, 100);
при этом желательно DSK подчистить
InitMarker('ViewDictMarkers', 8, 1000, 100);
при этом желательно DSK подчистить
Re: Маркеры + таблицы в памяти
Блин, слона-то я и не увидел ))
Передупреждений о преобразовании к строке не выдавалось, как ни странно.
Действительно, все замечательно работает, спасибо
Передупреждений о преобразовании к строке не выдавалось, как ни странно.
Действительно, все замечательно работает, спасибо
Галактика 8.10, Oracle 10g / 10.2.0.4
-
- Абориген
- Сообщения: 943
- Зарегистрирован: 29 мар 2005, 17:49
- Откуда: External Developer
- Контактная информация:
Re: Маркеры + таблицы в памяти
При работе с маркерами нужно помнить
а) строковые значения не рранятся в маркерах
б) тип маркера, а сл-но и его длина в байтах должна совпадать с типом (длиной в байтах) запихиваемого параметра
а) строковые значения не рранятся в маркерах
б) тип маркера, а сл-но и его длина в байтах должна совпадать с типом (длиной в байтах) запихиваемого параметра