Подогнали ActiveX библиотеку Sh4Ole для чтения данных StoreHouse4.
Возникла 2 вопроса:
1) Какая вообще идеология запросов? На SQL совсем не похоже, такое ощущение, что окунулся с головой во времена Win2000. Один язык, на котором это все написано, чего стоит. Я понимаю, в то время WinForms вообще ужасно выглядел, по сравнению с Delphi, но все-таки...
2) Я правильно понимаю, что есть 2 эквивалентных пути получения данных:
- вызов функций вида Список накладных
function DocList( DateFrom, // начало периода
DateTo: double; // окончание периода
SysFlag, // 0- учет 1 - спец учет
Get_Active, // <>0 - Показывать активные док-ты, 0 - нет
Get_Non_Active, // <>0 - Показывать неактивные документы, 0 - нет
Get_Sum: integer):integer; safecall; // <>0 - Показывать суммы, 0 - нет
- формировать запросы вида:
IndQuery := sh.pr_CreateProc( 'GoodsTree' ) ;
sh.pr_SetValByName ( IndQuery, 0, '209.2.0', NULL);
sh.pr_Post( IndQuery,0 );
sh.pr_ExecuteProc(IndQuery); // Получаю полное дерево товарных групп
sh.pr_AddIndex(IndQuery,1,'I_Rid','209.1.0'); // Создаю индекс I_RID по полю '209.1.0' датасета 1
sh.pr_AddIndex(IndQuery,1,'I_NAME','209.3.0'); // Создаю индекс I_NAME по полю '209.3.0' датасета 1 ( в примере не используется )
sh.pr_SetIndexName(IndQuery,1,'I_Rid'); // Назначаю датасету 1 индекс I_RID Буду искать по риду
if sh.pr_FindKey(IndQuery,1,28,NULL,NULL) = 1 then //Позиционирование на записи с ридом 28
ShowMessage(sh.pr_ValByName(IndQuery,1,'209.3.0')+ ' '+ sh.pr_ValByName(IndQuery,1,'209.4.0'))
else Showmessage('Not Found');
if sh.pr_FindKey(IndQuery,1,30,NULL,NULL) = 1 then //Позиционирование на запись с ридом 30
ShowMessage(sh.pr_ValByName(IndQuery,1,'209.3.0')+ ' '+ sh.pr_ValByName(IndQuery,1,'209.4.0'))
else Showmessage('Not Found');
sh.pr_CloseProc(IndQuery);
при помощи функций вида
"pr_*"?
З.Ы. Я понимаю, что тот, кто уже разобрался, не один раз сломал себе голову при работе с этой фигней и может не захотеть делиться знанием.