MAV Direct ODBC
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
MAV Direct ODBC
Жду вопросов, господа разработчики!
Раскрытый дистрибутив для всех версий Clarion начиная с C5 выложен на этом сайте для ознакомления
Раскрытый дистрибутив для всех версий Clarion начиная с C5 выложен на этом сайте для ознакомления
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Re: MAV Direct ODBC
Ну ты скоростной, я еще в процессе установки а мы уже пишемAndrew Myalin писал(а):Жду вопросов, господа разработчики!
Re: MAV Direct ODBC
стараемси!Admin писал(а):Ну ты скоростной, я еще в процессе установки а мы уже пишемAndrew Myalin писал(а):Жду вопросов, господа разработчики!
Re: MAV & Clarion 6.2
С5 С55 С6.1 C6.2Admin писал(а):Версия которую ты закачал на сайт под 6.2 последний заточена?
для ABC, Legasy, ШВС классов шаблонов, 32 bit, все режимы сборки
для ШВС есть маленькое условие при использовании
в глобальных настройках приложения имеют место быть выпадающие DROP LISTы в которых присутствуют как рускоязычные так и англоязычные установки, выбирать надо англоязычные
в остальном ограничений нет
MAV Direct ODBC fix
В BrowseBox при загрузке Browse отключается перерисовка LIST контрола, но если возникает ошибочная ситуация загрузки, и появляется сообщение об ошибке (чего в основном не бывает при нормально работающем приложении), то происходит залипание этого MESSAGE, сам понять не смог почему, но как выяснилось надо было выключать блокировку перерисовки перед ошибочными сообщениями, пофиксено.
Огромное спасибо за обнаруженный баг Марине!
Скачайте последнюю версию с http://www.clarionlife.net
Огромное спасибо за обнаруженный баг Марине!
Скачайте последнюю версию с http://www.clarionlife.net
MAV Direct ODBC от 05 июля 2005 года
Добавления: в трассировке библиотеки (MAVTRACE.EXE) появилась дополнительная опция как и в штатном клашином драйверном трассировщике "Show record buffer contents" - отображать содержаие записей при их чтении, можно включать и отключать, раньше всегда отображалась информация в трассе и при больших выборках было не очень удобно читать последовательность SQL операций. И для компактности, если время выполнения SQL операции меньше секунды, то информация о времени выполнения не попадёт в трассу.
В ЦЕЛЯХ КОПМПАКТОНСТИ АРХИВА И ПОСЛЕДУЮЩИХ ВЫКЛАДЫВАЕТСЯ ДЛЯ ОЗНАКОМЛЕНИЯ ТОЛЬКО DLL СБОРКА БИБЛИОТЕКИ.
В ЦЕЛЯХ КОПМПАКТОНСТИ АРХИВА И ПОСЛЕДУЮЩИХ ВЫКЛАДЫВАЕТСЯ ДЛЯ ОЗНАКОМЛЕНИЯ ТОЛЬКО DLL СБОРКА БИБЛИОТЕКИ.
Файлы
MAV Direct ODBC:
http://www.clarionlife.net/cgi-bin//bl_ ... t_odbc.rar
MAV Direct ODBC Example:
http://www.clarionlife.net/cgi-bin//bl_ ... xample.rar
по мере дальнейшего развития продукта будут обновляться и эти файлы, следите за новостями и за форумом
http://www.clarionlife.net/cgi-bin//bl_ ... t_odbc.rar
MAV Direct ODBC Example:
http://www.clarionlife.net/cgi-bin//bl_ ... xample.rar
по мере дальнейшего развития продукта будут обновляться и эти файлы, следите за новостями и за форумом
DirectODBC
Все очень здорово, а я извиняюсь конечно, но если можно - скажите А ЗАЧЕМ ЭТОТ НАБОР НУЖЕН (ЧТО ОН ДЕЛАЕТ) ? Заранее спасибо ...
- Admin
- Администратор
- Сообщения: 3959
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 25 раз
- Поблагодарили: 22 раза
- Контактная информация:
Набор из библиотеки и шаблона позволяющий вам красиво работать с базами данных на SQL серверах...
Если этого мало, автор добавит или вот сюда сходите http://mavcla.arsis.ru/about.htm
Если этого мало, автор добавит или вот сюда сходите http://mavcla.arsis.ru/about.htm
Re: DirectODBC
Предистория данного продукта такова:Света писал(а):Все очень здорово, а я извиняюсь конечно, но если можно - скажите А ЗАЧЕМ ЭТОТ НАБОР НУЖЕН (ЧТО ОН ДЕЛАЕТ) ? Заранее спасибо ...
Был создан большой проект обновременно работающий на двух серверах MSSQL и ORACLE, всё было реализовано штаттно на FILE,DRIVER структурах, шаблоны были немного подрихтованы в сторону SQL. Прошло время, объём базы стал большой и тут полезли проблемы с скоростями доступа к данным, клиенты стали засыпать у экранов мониторов при открытии, скролировании и обновлений Browse.
Начал копать, оказалось, что не я один наступил на эту пробелму, оказалось, что например, применительно к MSSQL серверу, тормоза при чтении происходят потому, что на каждый NEXT происходит вызов ХП на сервере sp_cursorfetch, что и приводило к тормозам. Всё дело в параметрах соединения к серверу, а в эти параметры невозможно влезть извне. Начал искать выход, попробовал ODBC API, БЛОЧНЫЕ ЧТЕНИЯ и т д, понравилось, скорости просто офигительные. Но возник вопрос - а как это всё красиво заюзать в клаше. Решение было найдено, работает штатно DCT + APP, но в результате генерятся не FILE,DRIVER структуры а GROUP, со стороны разработки окон и т д обращение к структурам FILE:RECORD такое же, что и к PRE:GROUP, так что ограничений при разработке форм нет. Соединение устанавливаю сам, Open File как таковой просто отсутсвует, при первом обращении к структуре на сервере происхоит проверка соответствия типов данных один раз - SqlDescribe, и всё (такая ошибка как File Already Open вообще смешная применительно к SQL). Результат - всем рулю сам, никаких ограничений, в частности таких что в качестве приёмного буфера должна выступать FILE:RECORD, могу читать что угодно куда угодно, например в BrowseBox читаю прямо в Queue Browse, как уже говорил скорости доступа просто офигительные, такие же как в Query Analyzer'е. Шаблонов, позволяющих быстро и удобно спроектировать приложение обширное, короче просто теперь не возникает вопросов типа как работать с NULL полями, как вызвать ХП с IN OUT параметрами, как прочитать произвольный SELECT и т д.
Последний раз редактировалось Andrew™ 08 Июль 2005, 10:15, всего редактировалось 1 раз.
кратко о шаблоне BrowseBox
Может выступать как LIST, DROPLIST, DROPCOMBO, TREE
Сортировка по любой колонке, индикация сортировки иконкой в заголовке клолонки, чего штатно в клаше нет, иконки настраиваются через шаблон, заголовки колонок реально нажимаются, поиск по колонке текущей сортировки, не надо плодить кучу условий в шаблоне (хотя такая возможность есть) и кучу табов на экране для каждой сортировки Browse. Локатор вводной инкрементальный, может выступать как фильтрующий для Browse, т е можно урезать выборку загрузки по содержимому в локатое, при этом можно установить два режима фильтрации (через MouseRight в локаторе POPUP меню, которе настраивается через BrowseBox шаблон), ищем с использование других фильтров (есть несколько дочерних фильтрующих контрол шаблонов для BrowseBox) или ищем только по локатору, для чего это надо, ну например, работает с документами типа счёт, фильтр стоит на период - текущая дата, вводим документы, приходит клиент и говорит что с его счётом есть проблемы, счёт старый не входит в данный период, пользователь набирает номер счёта, жмёт рефреш кнопку и находит данный счёт не зависимо от установленного периода, решили проблему со счётом очистили локатор, нажали рефреш кнопку и продолжили работу со своими документами. В Browse нет постраничной загрузки, я в ClaList'е писал почему, грузим либо всё, либо не более определённого количества записей, данная настройка присутсвует в шаблоне и ей можно динамически менять. В Help контроле отображается сколько записей было прочитано, и в скобках сколько записей в БД реально по условию, если прочитали не всё, библа сама понимает, когда прочитано не всё кол-во записей, если требуемый документ не был обнаружен - включаем доп фильтры или используем тот же фильтрующий локатор для урезания выборки для поиска документа. Для каждой колонки можно установить в свойствах шаблона режим поиска в БД, типа =, LIKE... В качестве загрузки данных может строить соответствующие SELECT запросы к БД, так и грузить результат выполнения хранимой процедуры... Browse может работать как штатно, так и как буферизованная, т е в формах редактирования как дочерняя по отношению к редактируемой(ым) записи(ям) в форме, редактироваие которой будет вестись на клиенте и сохраннение в транзационных рамках редактируемой(ых) записи(ях) в форме. О самом шаблоне SaveButton чуть позже...
Сортировка по любой колонке, индикация сортировки иконкой в заголовке клолонки, чего штатно в клаше нет, иконки настраиваются через шаблон, заголовки колонок реально нажимаются, поиск по колонке текущей сортировки, не надо плодить кучу условий в шаблоне (хотя такая возможность есть) и кучу табов на экране для каждой сортировки Browse. Локатор вводной инкрементальный, может выступать как фильтрующий для Browse, т е можно урезать выборку загрузки по содержимому в локатое, при этом можно установить два режима фильтрации (через MouseRight в локаторе POPUP меню, которе настраивается через BrowseBox шаблон), ищем с использование других фильтров (есть несколько дочерних фильтрующих контрол шаблонов для BrowseBox) или ищем только по локатору, для чего это надо, ну например, работает с документами типа счёт, фильтр стоит на период - текущая дата, вводим документы, приходит клиент и говорит что с его счётом есть проблемы, счёт старый не входит в данный период, пользователь набирает номер счёта, жмёт рефреш кнопку и находит данный счёт не зависимо от установленного периода, решили проблему со счётом очистили локатор, нажали рефреш кнопку и продолжили работу со своими документами. В Browse нет постраничной загрузки, я в ClaList'е писал почему, грузим либо всё, либо не более определённого количества записей, данная настройка присутсвует в шаблоне и ей можно динамически менять. В Help контроле отображается сколько записей было прочитано, и в скобках сколько записей в БД реально по условию, если прочитали не всё, библа сама понимает, когда прочитано не всё кол-во записей, если требуемый документ не был обнаружен - включаем доп фильтры или используем тот же фильтрующий локатор для урезания выборки для поиска документа. Для каждой колонки можно установить в свойствах шаблона режим поиска в БД, типа =, LIKE... В качестве загрузки данных может строить соответствующие SELECT запросы к БД, так и грузить результат выполнения хранимой процедуры... Browse может работать как штатно, так и как буферизованная, т е в формах редактирования как дочерняя по отношению к редактируемой(ым) записи(ям) в форме, редактироваие которой будет вестись на клиенте и сохраннение в транзационных рамках редактируемой(ых) записи(ях) в форме. О самом шаблоне SaveButton чуть позже...
Последний раз редактировалось Andrew™ 08 Июль 2005, 11:03, всего редактировалось 3 раза.
BrowseBox в виде дерева
Дерево строится по одному файлу, если надо построить дерево по нескольким файлам, на сервере строится соответсвующая SQL View (если обычный SELECT по нескольким таблицам не спасает) и по ней строится дерево, загрузка идёт одним SELECT запросом, WHERE в шаблоне устанавливается на всю выборку, как и штатно есть фильтрация записей на клиенте, запись прочитали но в список не добавили, рекурсивно дерево раскручвается уже на клиете после загрузки всех записей, т е дерево строится очень быстро, т к если бы была рекурсивная загрузка из БД мы бы тормозили за счёт многих SELECT запросов к БД. Browse многоколоночный, сортировки уровней, внутри уровней, поиск по деревянной колонке, может выступать в качестве SELECT процедуры - выбор записи. Cортировки и поиски возможны только по деревянной колонке, т к если бы были сортировки по не деревянной колонке дерево бы просто развалилось, но если по дереву тяжело найти требуемую запись можно в динамике переключиться в режим НЕ ДЕРЕВО, тогда станут доступны сортировки и поиски по всем колонкам, нашли требуемую запись, включили режим ДЕРЕВО и автоматом спозиционировались в дереве на требуемую запись.
При наличии одинаковых атрибутов DRAG и DROP у контрола ветки автоматом перебрасываются мышкой. После изменения, удаления, добавления записи Browse целиком не перечитывается, происходит перестроение дерева только на клиенте, это касается и обычного Browse.
При наличии одинаковых атрибутов DRAG и DROP у контрола ветки автоматом перебрасываются мышкой. После изменения, удаления, добавления записи Browse целиком не перечитывается, происходит перестроение дерева только на клиенте, это касается и обычного Browse.
SQL Автонумерация
В библиотеки реализованы механизмы автонумерации, настраивается в глобальном EXTENSION шаблоне.
1. Через таблицу в которой есть как миниму два поля, первое(Primary Key Field) - индентификатор таблицы из словаря требующая поддержки автонумерации, второе поле - следующее значение для поля первичого ключа. Идентифиактор таблицы настраивается черех File User Option таблицы в Dictionary NEXTREF = КонстантаДляИдентификатораТаблицыДляИспользованияВпрограммах,ИдентификаторТаблицыВсинтакисиеКларион. Идентификатор таблицы может быть как числовой так и 'строковый'.
2. Через ХП
3. None - вы сами реализуете механизмы автонумерации и в формах редактирования перед добавлением записи в транзакционных рамках инициализируете поля первичного ключа.
Если поле первичного ключа инициализируется на сервере, то в словаре в свойствах данного поля ставите атрибут READONLY, а в Initial Value выставляете SQL запрос необходимый для получения значения поля с сервера, если это необходимо, для BrowseBox - Form это необходимо, т к по завершении ввода в форме редактирования необходимо будет спозиционироваться в Browse, значения полей первичного ключа записи должны быть известны на тот момент.
1. Через таблицу в которой есть как миниму два поля, первое(Primary Key Field) - индентификатор таблицы из словаря требующая поддержки автонумерации, второе поле - следующее значение для поля первичого ключа. Идентифиактор таблицы настраивается черех File User Option таблицы в Dictionary NEXTREF = КонстантаДляИдентификатораТаблицыДляИспользованияВпрограммах,ИдентификаторТаблицыВсинтакисиеКларион. Идентификатор таблицы может быть как числовой так и 'строковый'.
2. Через ХП
3. None - вы сами реализуете механизмы автонумерации и в формах редактирования перед добавлением записи в транзакционных рамках инициализируете поля первичного ключа.
Если поле первичного ключа инициализируется на сервере, то в словаре в свойствах данного поля ставите атрибут READONLY, а в Initial Value выставляете SQL запрос необходимый для получения значения поля с сервера, если это необходимо, для BrowseBox - Form это необходимо, т к по завершении ввода в форме редактирования необходимо будет спозиционироваться в Browse, значения полей первичного ключа записи должны быть известны на тот момент.
Форма редактирования или SaveButton control template
Шаблон имеет три режима редактирования:
1. Table - редактируем штатно одну запись
2. View - редактируем записи учавствующие в формироваии SQL View, в словре такие таблицы должны иметь связь к SQL View как MANY TO ONE, при этом в шаблоне предлагается выбрать какие записи из данного списка подкачивать в форме, и задаётся последовательный список сохранения записей таких таблиц, это очень важно т к на сервере по хорошему должна быть организована поддержка целостности CONSTRAINT'ы, и детку раньше папы добавить нельзя.
3. Queue - редактирование буферизованных Browse, т е идёт редактирование по сути Browse Box Queue записи а не RECORD таблицы, а сохранение будет происходить в транзакционых рамках формы.
При включённой поддержки SQL автонумерации иницализация полей первичных ключей будет происходить автоматически для п.1 и п.2.
Для п.3 т к реально записи Browse будут сохраняться в момент сохранения родительской записи, инициализация полей первичных ключей будет происходить там автоматом.
п.2 и п.3 всегда не хватает как воздух в стандарте, часто работаем Browse по SQL View, форма редактирования по записям таблиц которые учавствуют в формировании данной SQL View, редактирование деток в Queue тоже не хватает И всё это штатно приходится либо реализовывать руками, либо отказываться от таких ситуаций и накладывать на разработку определённые ограничения.
1. Table - редактируем штатно одну запись
2. View - редактируем записи учавствующие в формироваии SQL View, в словре такие таблицы должны иметь связь к SQL View как MANY TO ONE, при этом в шаблоне предлагается выбрать какие записи из данного списка подкачивать в форме, и задаётся последовательный список сохранения записей таких таблиц, это очень важно т к на сервере по хорошему должна быть организована поддержка целостности CONSTRAINT'ы, и детку раньше папы добавить нельзя.
3. Queue - редактирование буферизованных Browse, т е идёт редактирование по сути Browse Box Queue записи а не RECORD таблицы, а сохранение будет происходить в транзакционых рамках формы.
При включённой поддержки SQL автонумерации иницализация полей первичных ключей будет происходить автоматически для п.1 и п.2.
Для п.3 т к реально записи Browse будут сохраняться в момент сохранения родительской записи, инициализация полей первичных ключей будет происходить там автоматом.
п.2 и п.3 всегда не хватает как воздух в стандарте, часто работаем Browse по SQL View, форма редактирования по записям таблиц которые учавствуют в формировании данной SQL View, редактирование деток в Queue тоже не хватает И всё это штатно приходится либо реализовывать руками, либо отказываться от таких ситуаций и накладывать на разработку определённые ограничения.