You are here

Свободная библиотека «msArrayServer»

ArrayServerЧто значит эта картинка? Да ничего не значит, просто люблю «поприкалываться». Как в том мультфильме:
 
- Вам «с пользой» или «так»?
- Так, с пользой…   :)
Я дам вам парабеллум!
 
Совсем недавно я попытался провести опрос по поводу bArrayServer. Ясное дело, что многих это поставило в тупик: а что это такое и «с чем его едят». Другие прямо сказали: «Нам чужого не надь. Нас и тут неплохо кормят». Потому, дальше разговор – для неравнодушных.
 
Никто не спорит, что среда разработки КаВо бедна. Поэтому появились «сторонние» разработки, которые решают разнообразные проблемы или вносят существенные дополнения. Но, к сожалению, ситуация развернулась от плохой к очень плохой. Т.е., практически все такие разработки – платные… Ну и кому такое нравится?
 
Одно из таких дополнений – bArrayServer. Говоря простым языком, этот класс позволяет работать с массивом, как с сервером. Зачем это? Не знаю, как кому, а мне – надо. Рассказываю зачем.
 
Допустим, я работаю с SQL. Здесь работа с индексами идёт несколько по-другому, чем в DBF. В худшем случае – их нет (всё зависит от конструктора базы данных). Мне могут заметить, что вообще-то я могу сделать любую сортировку прямо в запросе. Могу. А если мне нужно менять сортировку часто? А зачем? А можете посмотреть мою демо-версию программы «Автосервис». Здесь у меня изменяется сортировка данных при нажатии на заголовки колонок в браузере, в браузере справочников у меня есть быстрый поиск по первым буквам (автопоиск) и т.д. и т.п. Так мы «закидаем» запросами всю «сетку».
 
Значит, надо увеличивать мощность сети и сервера… А зачем? Можно пойти другим путём! Сделать, допустим, статическую выборку и уже в ней извращаться, как нам заблагорассудится. Так я и делаю: создаю выборку-массив и по мере необходимости, добавляю необходимые виды сортировки. Т.е., работаю, как с сервером.
 
bArrayServer – вещь платная. Как я уже писал в одной из своих заметок, многое меня в ней не устраивает. Можно сделать свой класс-наследник. А если ошибка «в ДНК»? Так я пришёл к идее написать свой класс. Да, Bieler меня предупредил, что будет преследовать меня за нарушения копирайта. Поэтому, я постараюсь быть оригинальным.
 
Прежде всего, конечно нужен здравый смысл и оригинальная идея. Да, я видел SDK bArrayServer. Но, нам также доступен в CA-Vo SDK исходный код DataServer и DbServer. Я также видел и другие разработки. Вот, навскидку:
  • ArrayServer by Mark D. Lincoln из «Vo25Lib» (Copyright (c) 1997-1998 by Mark D. Lincoln).
  • ArrayServer by Michael Fischer (Copyright (c) 1995 Michael Fischer), которому подарил идею некто Anurag Prassad и методологически «разжевал» небезызвестный Michael Ferber.
И множество других библиотек с начала 90-х, авторы которых оказались настолько скромными, что даже не вписали свои имена, не говоря уже о копирайтах.
 
Сейчас у меня отпуск. Но, мне нужна «гимнастика для ума». Не люблю сидеть без дела. Писать свой класс для «себя любимого» - это «работать в стол». Сделать это только для двоих проголосовавших… Но, дело в том, что сайт начал притягивать и других КаВо-шников. Поэтому, это будет для всех. Класс будет бесплатным и открытым.
 
Я предлагаю всем, кто хочет поучаствовать – скачивать, смотреть, предлагать, править самим. Короче, активно участвовать. Так я узнаю, кто чего стоит, и от кого что ждать. Да и вообще, если бы каждый взял на себя разработку хотя бы одного альтернативного (платному) классу – у нас бы появился целый пласт бесплатных библиотек, который бы решил все наши проблемы.
 
«Назвался груздем – полезай в короб!» Раз, я предложил, то мне первому и камень. С сегодняшнего дня, я на глазах у всех начну разработку одного из этих классов. Если кто чем хочет помочь или поучаствовать – работаем вместе.
 
Писать здесь или в «личку». Сообщения об обновлениях будут регулярно. Постараюсь закончить за несколько дней. Как и говорил – это будет бесплатно и открыто.
 
 
19.07.2012 г.   Карандаш.
 
Состояние проекта «msArrayServer» на 09.11.2012 :
 
1.            METHOD        __AcceptSelectiveRelation( )                Готово
2.            METHOD        __BuildDataField( )                              Готово
3.            METHOD        __DBDelete( )                                      Готово             *
4.            METHOD        __DBOrderInfo( )                                Готово             *
5.            METHOD        __DBRecall( )                                      Готово             *
6.            METHOD        __DbServerEval( )                               Готово             *
7.            METHOD        __DBSGoBottom( )                             Готово             *
8.            METHOD        __DBSGoTo( )                                    Готово            *
9.            METHOD        __DBSGoTop( )                                  Готово             *
10.        METHOD        __DBSSeek( )                                     Готово             *
11.        METHOD        __DBSSkip( )                                      Готово             *
12.        METHOD        __Destruct( )                                        В разработке   *
13.        METHOD        __ClearChildRelation( )                        Готово
14.        METHOD        __GenerateStatusHL( )                         Готово
15.        METHOD        __GetSelectionValue( )                         Готово            *
16.        METHOD        __IsSelectionSynchr( )                          Готово            *
17.        ACCESS         __IsViewDeleted                                  Готово             *
18.        METHOD        __NotifyBufferFlush( )                          Готово
19.        METHOD        __OrderKeyAdd( )                              Готово             *
20.        METHOD        __OrderKeyDel( )                                Готово             *
21.        METHOD        __OrderKeyUpd( )                              Готово             *
22.        METHOD        Append( )                                            Готово
23.        METHOD        Axit( )                                                  Готово
24.        ACCESS         BoF                                                     Готово
25.        METHOD        ClearFilter( )                                         Готово
26.        METHOD        ClearOrder( )                                       Готово
27.        METHOD        ClearOrderScope( )                             Готово
28.        METHOD        ClearRelation( )                                    Готово
29.        METHOD        ClearSelection( )                                   Готово            *
30.        METHOD        Close( )                                                Готово
31.        METHOD        Commit( )                                             Готово
32.        METHOD        Count( )                                               Готово
33.        METHOD        CreateOrder( )                                     Готово
34.        ACCESS         Data                                                     Готово             *
35.        ACCESS         DataFormat                                          Готово             *
36.        ASSIGN          DataFormat( )                                      Готово             *
37.        METHOD        Delete( )                                               Готово
38.        ACCESS         Deleted                                                Готово
39.        ACCESS         DbStruct                                              Готово
40.        ASSIGN          DbStruct( )                                           Готово             *
41.        ACCESS         EoF                                                      Готово
42.        ACCESS         ErrInfo                                                 Готово
43.        METHOD        Error( )                                                 Готово
44.        METHOD        FieldGet( )                                            Готово
45.        METHOD        FieldPos( )                                           Готово
46.        METHOD        FieldPut( )                                            Готово
47.        METHOD        FieldSpec( )                                         Готово
48.        METHOD        FieldSym( )                                          Готово
49.        ACCESS         Filter                                                    Готово
50.        ASSIGN          Filter( )                                                 Готово
51.        METHOD        Flock( )                                                Готово
52.        METHOD        GoBottom( )                                         Готово
53.        METHOD        GoTo( )                                                Готово
54.        METHOD        GoTop( )                                              Готово
55.        METHOD        IndexKey( )                                          Готово
56.        METHOD        IndexOrd( )                                          Готово
57.        METHOD        Info( )                                                   Готово
58.        METHOD        Init( )                                                    Готово
59.        ACCESS         LastRec                                                Готово
60.        METHOD        Notify( )                                               Готово
61.        ACCESS         OrderBottomScope                              Готово
62.        ASSIGN          OrderBottomScope( )                          Готово
63.        METHOD        OrderInfo( )                                         Готово
64.        METHOD        OrderKeyAdd( )                                  Готово
65.        ACCESS         OrderKeyCount                                   Готово
66.        METHOD        OrderKeyDel( )                                    Готово
67.        ACCESS         OrderKeyNo                                       Готово
68.        METHOD        OrderKeyNo( )                                    Готово
69.        ACCESS         OrderKeyVal                                       Готово
70.        METHOD        OrderScope( )                                      Готово
71.        ACCESS         OrderTopScope                                   Готово
72.        ASSIGN          OrderTopScope( )                               Готово
73.        METHOD        Pack( )                                                 Готово
74.        ACCESS         ReadOnly                                             Готово
75.        ASSIGN          ReadOnly( )                                         Готово             *
76.        METHOD        Recall( )                                               Готово
77.        METHOD        RecallAll( )                                           Готово
78.        ACCESS         RecCount                                             Готово
79.        ACCESS         RecNo                                                 Готово
80.        ASSIGN          RecNo( )                                              Готово
81.        METHOD        Refresh( )                                             Готово
82.        METHOD        Relation( )                                            Готово
83.        METHOD        ResetNotification( )                               Готово
84.        METHOD        RLock( )                                              Готово
85.        METHOD        RLockVerify( )                                     Готово
86.        METHOD        Seek( )                                                 Готово
87.        METHOD        SetFilter( )                                            Готово
88.        METHOD        SetOrder( )                                          Готово
89.        METHOD        SetOrderCondition()                            Готово
90.        METHOD        SetRelation( )                                       Готово
91.        METHOD        SetSelectiveRelation( )                          Готово
92.        ACCESS         SetViewDeleted                                   Готово             *
93.        ASSIGN          SetViewDeleted( )                                Готово             *
94.        METHOD        Skip( )                                                  Готово
95.        ACCESS         Status                                                   Готово
96.        METHOD        SuspendNotification( )                          Готово
97.        METHOD        UnLock( )                                            Готово
98.        METHOD        Use()                                                   Готово             *
99.        ACCESS         Used                                                    Готово
100.    METHOD        Zap( )                                                   Готово
Легенда:
* - Дополнительные методы, которых нет в оригинальном классе DbServer.
Зелёный – готовый метод.
Голубой – метод готов, но возможны изменения.
Жёлтый – метод в работе.
 
Примечание:
Класс пока без методов: Scope( ) и Eval( ).
В принципе, ядро для использования методов Scope( ) и Eval( ) – сделано. Уже созданные методы – учитывают их использование. Заинтересованные лица могут спокойно это доделать. Что для этого надо:
1.      ClearScope( )
2.      Eval( )
3.      ForBlock:Access
4.      ForBlock:Assign
5.      Scope:Access
6.      Scope:Assign
7.      WhileBlock:Access
8.      WhileBlock:Assign
 
 
18.09.2012 – Класс в основном готов. Прошу всех тестировать и присылать мне ошибки. Всем удачи!!!   :))
P.S.: (20.09.2012)
Получил ответ от Joachim Bieler-а. Претензий не высказал, и пожелал удачи!
 
P.P.S.: (09.11.2012)
По наводке камрада (Sega1999) сделал языковый модуль для класса. Теперь каждый может переводить сообщения на нужные ему языки. Добавил пару методов. Класс успел оттестировать на одной из своих программ. Основные ошибки устранены, класс рабочий. Недостаток – несколько более медленная работа (по сравнению с bArrayServer-ом) в браузере bBrowser. Так что, буду «дотачивать».
Класс можно теперь использовать в КаВо 2.6 (2.5?) – 2.8. В Каво ранее 2.7 надо только включить одну строку в модуле «_Define Ca-Vo 2.6». 
 
 
 
11.01.2013.   Сегодня я решил "закрыть" исходники этой библиотеки от посторонних людей. Библиотека останется бесплатной. Но, мои друзья всегда смогут получить исходники этой библиотеки по первому требованию. Для этого им надо лишь обратиться ко мне.
 
Информация о проекте msArrayServer перенесена в раздел "Проекты". Там можно обсуждать и комментировать. Там будет всегда самая свежая версия .dll-файла библиотеки с описанием методов и особенностей разработки.
 
Исходя из этого, эта запись в моём дневнике сегодня снимается с главной страницы. А внесение комментариев к ней - окончено.
 
 
AttachmentSize
File ms and bArrayServer_0016.rar6.38 KB

Comments

Уезжаю, ориентировочно на месяц. Регулярность обновлений - не гарантирую.
По возвращению - обновлю. Обещаю закончить.
 
Вижу, регулярно читают и скачиваются обновления.
Всё правильно, всех всё устраивает? Есть предложения, поправки?

Хорошего отдыха! Буду смотреть, спасибо!

Только не очень могу понять как часто обновляется ваш блог

Обновляется по мере появления авторов и готовности материалов.

Слушайте, давайте махнем в ближайшие выходные за город и там все это обсудим. Вы ведь из Москвы?

Стол и транспорт - за Ваш счёт!

Подскажите, можно ли разместить на своем сайте данный пост?

Можете пользоваться этим материалом как заблагорассудится.
Только ссылка на сайт и автора(ов) - крайне приветствуется.

Вопрос ко всем заинтересованным.
 
Я несколько застрял на ряде сложных методов (Delete, Recall, RecallAll), которые имеют в оригинальном классе DbServer множество параметров. В bArrayServer они столько параметров не имеют.
 
Вопрос: Вас устроит сделать как в bArrayServer (это много проще), или всё-таки помучиться (и сделать как в DbServer)?
 

   Если у кого есть замечания-пожелания - не стесняемся, пишем.
Я постараюсь оперативно отреагировать и дописать недостающее.
 
   Всем спасибо!

Спасибо. Прочитал с интересом. Блог в избранное занес=)

Восхитительно

Theme by Danetsoft and Danang Probo Sayekti inspired by Maksimer