Кто-нибудь сталкивался с Sh4Ole?

Подогнали 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_*"?

З.Ы. Я понимаю, что тот, кто уже разобрался, не один раз сломал себе голову при работе с этой фигней и может не захотеть делиться знанием.
  • Вопрос задан
  • 812 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы