Отлично. Что для этого нужно? Т.е. сколько и куда?Andrew Myalin писал(а):...так добро пожаловать в официальные пользователи
MAV Direct ODBC
Модератор: Andrew™
Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Re: Insert, Identity
как уже говорилось в словаре ставишь у поля атрибут ReadOnlyАрсений писал(а):Спасибо. А как в программе пощупать это значение после добавления?Tolmachev Igor писал(а): Значение, которое вернул запрос - в этом поле
пример запроса: Select @@identity
в в поле Initial Value пишешь SELECT @@IDENTITY
и после добавления записи библиотека автоматом подчитает в данное поле требуемое значение с помощью данного SQL запроса
Re: Первый глюк
Это я тоже заметил, конечно же я с этим разберусь, вставлю проверку на наличие файла в демку, но не думаю что это большой криминал т к это сторонный не SQL объект, а объект работы с ASCII/DOS файламиwowa писал(а):Контрольный пример для С6.1 шаблонная версия
1.
Процедура RunSQLscript
Метод MAV:WindowManager.Process
File = c:\temp\mssql.sql
Если такого файла по какой либо причине нет, то:
IF SELF.File._Open(File)
SELF.ShowError('Open file - ' & File)
RETURN
END
ошибка не возвращается, а создается пустой файл
с заданным именем
SELF.File._Bytes() возвращает 0
SELF.Buffer.Reset(ALL('<0>',SELF.File._Bytes()))
Программа падает
С этим всё понятно, много дополнительных возможностей было реализовано для дерева перед отпуском, до конца эти возможности не были оттестированы, вот вышел из отпуска и уже получил примеры с пойманами багами в дереве, сегодня/завтра пофиксю.2.
Аналогично предыдущему письму - в конторольном примере не работает SingleTree - виден первый уровень, как увидеть остальные
непонятно. При попытке изменить, удалить запись на этом уровне все падает
Обновление от 25.07.2005, фиксация предотпускных багов
1. Ведение лога работы библиотеки было расширено, выяснилось, что при попытке закрыть несуществующую транзакцию при отключённом логе вываливался GPF, попытка записи в лог(NULL), пофиксено
2. В Browse при перезагрузке данных отключается перерисовка (через WIN API) LIST контрола, чтобы LIST не моргал, всё работало корректно, кроме одного места, для Tree Browse, при переключении Tree / Not Tree флажок отключения перерисовки не сбрасывался, пофиксено
3. Для SaveButton шаблона введено как и в штатном шаблоне три режима удаления: Form (было), Standartd Warning (новое), Automatic delete (новое), так в последних двух при ошибочном удалении записи(ей) выходили из формы всегда по RequestCompleted, что приводило к удалению записи из Browse, хотя реально в БД она не удалилась, при обновлении Browse она снова появлялась, пофиксено.
2. В Browse при перезагрузке данных отключается перерисовка (через WIN API) LIST контрола, чтобы LIST не моргал, всё работало корректно, кроме одного места, для Tree Browse, при переключении Tree / Not Tree флажок отключения перерисовки не сбрасывался, пофиксено
3. Для SaveButton шаблона введено как и в штатном шаблоне три режима удаления: Form (было), Standartd Warning (новое), Automatic delete (новое), так в последних двух при ошибочном удалении записи(ей) выходили из формы всегда по RequestCompleted, что приводило к удалению записи из Browse, хотя реально в БД она не удалилась, при обновлении Browse она снова появлялась, пофиксено.
Обновление от 25.07.2005, для официальных пользователей
Доработан шаблон BrowseBox на тему:
1. Удаление записей дочерних Browse в формах редактирования родительских записей удалялись по первым полям первичного ключа, что в 90% случаев срабатывало, т к связь обычно происходит по полям первичного ключа со стороны деток, но есть случаи когда связь родителя с детками может быть и не по полям первичного ключа со стороны деток, теперь при удалении дочерних записей используется то условие WHERE, которое определено в Browse для закачки таких дочерних Browse.
2. Если Browse присутствует в форме редактирования родительской записи как дочерняя, и в форме для Delete режима выставлен режим Standard Warning или Automatic Delete, записи таких Browse не подкачиваются, а только удаляются при соответсвующем подтверждении удаления для режима Standard Warning и автоматически при Automatic Delete.
3. в UpdateButtons шаблоне появились точки вставки до и после вызова Update процедуры, часто бывает полезно что то сделать сразу после отработки Update процедуры до перестроения записи в Queue Browse.
1. Удаление записей дочерних Browse в формах редактирования родительских записей удалялись по первым полям первичного ключа, что в 90% случаев срабатывало, т к связь обычно происходит по полям первичного ключа со стороны деток, но есть случаи когда связь родителя с детками может быть и не по полям первичного ключа со стороны деток, теперь при удалении дочерних записей используется то условие WHERE, которое определено в Browse для закачки таких дочерних Browse.
2. Если Browse присутствует в форме редактирования родительской записи как дочерняя, и в форме для Delete режима выставлен режим Standard Warning или Automatic Delete, записи таких Browse не подкачиваются, а только удаляются при соответсвующем подтверждении удаления для режима Standard Warning и автоматически при Automatic Delete.
3. в UpdateButtons шаблоне появились точки вставки до и после вызова Update процедуры, часто бывает полезно что то сделать сразу после отработки Update процедуры до перестроения записи в Queue Browse.
Последний раз редактировалось Andrew™ 26 Июль 2005, 8:35, всего редактировалось 1 раз.
- Admin
- Администратор
- Сообщения: 4010
- Зарегистрирован: 05 Июль 2005, 15:59
- Откуда: Хабаровск
- Благодарил (а): 53 раза
- Поблагодарили: 33 раза
- Контактная информация:
Добавлю от себя ...
Файл качаем с http://www.clarionlife.net
Ищем в разделе http://www.clarionlife.net/cgi-bin/bl_s ... ?7&DateRev
Файл качаем с http://www.clarionlife.net
Ищем в разделе http://www.clarionlife.net/cgi-bin/bl_s ... ?7&DateRev
Форма для подключения к серверу БД. На кнопочке "Ок" висит следующий код:
GlobalConnectionString = |
'DRIVER=SQL Server;'&|
'SERVER='&clip(ServerName)&';'&|
'UID='&clip(UserName)&';'&|
'PWD='&clip(Password)&';'&|
'DATABASE='&clip(DatabaseName)&';'&|
'SWID='&clip(UserName)
IF DbManager.Connect('SQL Server',GlobalConnectionString)
message('Невозможно подключиться к серверу!')
cycle
else
Бла-бла-бла...
end
Если, например, я кажу неправильный пароль, то вылезет сообщение об ошибке и система откроет стандартное окошка для ввода логина и пароля. Как этого избежать?
И второе: можно ли использовать созданное соединение для работы через обычный драйвер ODBC родных кларионовских функций?
Хотя тоже подозреваю, что не получится.
GlobalConnectionString = |
'DRIVER=SQL Server;'&|
'SERVER='&clip(ServerName)&';'&|
'UID='&clip(UserName)&';'&|
'PWD='&clip(Password)&';'&|
'DATABASE='&clip(DatabaseName)&';'&|
'SWID='&clip(UserName)
IF DbManager.Connect('SQL Server',GlobalConnectionString)
message('Невозможно подключиться к серверу!')
cycle
else
Бла-бла-бла...
end
Если, например, я кажу неправильный пароль, то вылезет сообщение об ошибке и система откроет стандартное окошка для ввода логина и пароля. Как этого избежать?
И второе: можно ли использовать созданное соединение для работы через обычный драйвер ODBC родных кларионовских функций?
Хотя тоже подозреваю, что не получится.
в текущем варианте нельзя, но понятно что надо реализовать данную возможность, расширю данный метод, и функцию MAVCONNECT на один параметр, показывать или нет стандартное логин окошко при ошибке.IF DbManager.Connect('SQL Server',GlobalConnectionString)
message('Невозможно подключиться к серверу!')
cycle
else
Бла-бла-бла...
end
Если, например, я кажу неправильный пароль, то вылезет сообщение об ошибке и система откроет стандартное окошка для ввода логина и пароля. Как этого избежать?
хоть и есть PROP:henv и PROP:hdbc, но они Read Only, унаследовать открытое MAV соединение не получиться, да и параметры соединения там разные.И второе: можно ли использовать созданное соединение для работы через обычный драйвер ODBC родных кларионовских функций?
Хотя тоже подозреваю, что не получится.
Конечно можно попробовать через TXD, но думаю ничего хорошего из этого не получится.Арсений писал(а):А есть ли возможность быстрой переработки стандартных процедур browse и form (конкретно интерисует ШВС) под dODBC?
PS Подозреваю, конечно, что нет
В любом случае, при реализации аналогичного функционала на MAV Direct, процедуры будут строится куда быстрее, многие решения реализованы в шаблонах и классах. Что в стандарте делали руками, тут будете делать только кликаньем мышкой в Window Formater'е.

Можно в одном проекте использовать и то и другое и по мере возможности потихоньку переводить старый функционал на новые рельсы, что я и делал когда то.
MAV Direct ODBC от 27 июля 2005 года
Изменён алгоритм сохранения записей дочерних буферизованных Browse в формах редактирования родительской записи, оптимизация кода.
Re: MAV Direct ODBC от 27 июля 2005 года
Хорошо ве этоAndrew Myalin писал(а):Изменён алгоритм сохранения записей дочерних буферизованных Browse в формах редактирования родительской записи, оптимизация кода.


Обновление от 29 июля 2005 года
Расширен пример ABCMAVT.APP, старый вариант не демонстрировал всех возможностей библиотеки.
Добавлены процедуры
Multi filter browse - Маркированная Browse выступает в качестве фильтрующей для другой Browse
Marked Browse - Маркировка записей в Browse и дальнейшая работа с маркированными записями - печать маркированных записей в отчёте
Single Tree Browse - расширена процедура, показан весь возможный функционал Tree, без единого EMBED'а
Derived Select - Показать результат в LIST контроле по произвольному SELECT запросу, а-ля MS Query Analyzer.
И все эти возможности демонстрируют разработку без единого EMBED'а, или с минимальным количеством таковых.
Сама библиотека притерпела незначительные изменения:
в C6.2 дерево некорректно работало, пофиксено
Если в Select Browse процедуре стоит в свойствах кнопки условие не выбирать запись, т е кнопка DISABLE, то по MouseLeft2 выбор всё равно происходил, пофиксено.
Для Tree Browse при имеющихся управляющих кнопок Contract, Expand, Up Root, Down Root, если Tree Browse переключалось в Not Tree, то при нажатии на эти кнопки приводили к непредсказуемым ситуациям, теперь если Tree Browse работает в режиме Not Tree такие кнопки DISABLE, и в качестве таких кнопок могут выступать только шаблонные BrowseButton кнопки.
Добавлены процедуры
Multi filter browse - Маркированная Browse выступает в качестве фильтрующей для другой Browse
Marked Browse - Маркировка записей в Browse и дальнейшая работа с маркированными записями - печать маркированных записей в отчёте
Single Tree Browse - расширена процедура, показан весь возможный функционал Tree, без единого EMBED'а
Derived Select - Показать результат в LIST контроле по произвольному SELECT запросу, а-ля MS Query Analyzer.
И все эти возможности демонстрируют разработку без единого EMBED'а, или с минимальным количеством таковых.
Сама библиотека притерпела незначительные изменения:
в C6.2 дерево некорректно работало, пофиксено
Если в Select Browse процедуре стоит в свойствах кнопки условие не выбирать запись, т е кнопка DISABLE, то по MouseLeft2 выбор всё равно происходил, пофиксено.
Для Tree Browse при имеющихся управляющих кнопок Contract, Expand, Up Root, Down Root, если Tree Browse переключалось в Not Tree, то при нажатии на эти кнопки приводили к непредсказуемым ситуациям, теперь если Tree Browse работает в режиме Not Tree такие кнопки DISABLE, и в качестве таких кнопок могут выступать только шаблонные BrowseButton кнопки.
Возврат из UPDATE
Все таки при возврате в броузер из процедуры обновления не обновляются поля связанных таблиц. Кстати, смотрел трасу, так понял, что после возврящения из апдейта програмулина зачитывает в очередь только одну запись. Дык вот, зачитываются только поля одной таблицы.
Какие вижу выходы? Можно либо все броузеры по нескольким таблицам создавать по вьюшкам сервера, либо после возврата из редактирования, вызвать обновление очереди броузера, но browse.load() отправляет курсор на начало. Конечно и тут можно воспользоваться связкой choose() - select(). Но хотелось бы понять причину и найти чисто библиотечное решение.
Спасибо за внимание
Какие вижу выходы? Можно либо все броузеры по нескольким таблицам создавать по вьюшкам сервера, либо после возврата из редактирования, вызвать обновление очереди броузера, но browse.load() отправляет курсор на начало. Конечно и тут можно воспользоваться связкой choose() - select(). Но хотелось бы понять причину и найти чисто библиотечное решение.
Спасибо за внимание
