MAV Direct ODBC

Обсуждение MAV Direct ODBC

Модератор: Andrew™

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion и MAV который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Арсений

Сообщение Арсений »

Andrew Myalin писал(а):...так добро пожаловать в официальные пользователи ;)
Отлично. Что для этого нужно? Т.е. сколько и куда?
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Insert, Identity

Сообщение Andrew™ »

Арсений писал(а):
Tolmachev Igor писал(а): Значение, которое вернул запрос - в этом поле
пример запроса: Select @@identity
Спасибо. А как в программе пощупать это значение после добавления?
как уже говорилось в словаре ставишь у поля атрибут ReadOnly
в в поле Initial Value пишешь SELECT @@IDENTITY

и после добавления записи библиотека автоматом подчитает в данное поле требуемое значение с помощью данного SQL запроса
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Арсений писал(а):
Andrew Myalin писал(а):...так добро пожаловать в официальные пользователи ;)
Отлично. Что для этого нужно? Т.е. сколько и куда?
Либо через фирму АРСИС - 6000 руб (со всеми вытикающими финансовыми документами)
Либо прямо мне - 5100 руб (6000-15%), счёт в Сбербанке России
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Re: Первый глюк

Сообщение Andrew™ »

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()))

Программа падает
Это я тоже заметил, конечно же я с этим разберусь, вставлю проверку на наличие файла в демку, но не думаю что это большой криминал т к это сторонный не SQL объект, а объект работы с ASCII/DOS файлами

2.
Аналогично предыдущему письму - в конторольном примере не работает SingleTree - виден первый уровень, как увидеть остальные
непонятно. При попытке изменить, удалить запись на этом уровне все падает
С этим всё понятно, много дополнительных возможностей было реализовано для дерева перед отпуском, до конца эти возможности не были оттестированы, вот вышел из отпуска и уже получил примеры с пойманами багами в дереве, сегодня/завтра пофиксю.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Обновление от 25.07.2005, фиксация предотпускных багов

Сообщение Andrew™ »

1. Ведение лога работы библиотеки было расширено, выяснилось, что при попытке закрыть несуществующую транзакцию при отключённом логе вываливался GPF, попытка записи в лог(NULL), пофиксено
2. В Browse при перезагрузке данных отключается перерисовка (через WIN API) LIST контрола, чтобы LIST не моргал, всё работало корректно, кроме одного места, для Tree Browse, при переключении Tree / Not Tree флажок отключения перерисовки не сбрасывался, пофиксено
3. Для SaveButton шаблона введено как и в штатном шаблоне три режима удаления: Form (было), Standartd Warning (новое), Automatic delete (новое), так в последних двух при ошибочном удалении записи(ей) выходили из формы всегда по RequestCompleted, что приводило к удалению записи из Browse, хотя реально в БД она не удалилась, при обновлении Browse она снова появлялась, пофиксено.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Обновление от 25.07.2005, для официальных пользователей

Сообщение Andrew™ »

Доработан шаблон 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.
Последний раз редактировалось Andrew™ 26 Июль 2005, 8:35, всего редактировалось 1 раз.
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Добавлю от себя ...
Файл качаем с http://www.clarionlife.net
Ищем в разделе http://www.clarionlife.net/cgi-bin/bl_s ... ?7&DateRev
Арсений

Сообщение Арсений »

А есть ли возможность быстрой переработки стандартных процедур browse и form (конкретно интерисует ШВС) под dODBC?

PS Подозреваю, конечно, что нет :(
Арсений

Сообщение Арсений »

Форма для подключения к серверу БД. На кнопочке "Ок" висит следующий код:

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 родных кларионовских функций?
Хотя тоже подозреваю, что не получится.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

IF DbManager.Connect('SQL Server',GlobalConnectionString)
message('Невозможно подключиться к серверу!')
cycle
else
Бла-бла-бла...
end

Если, например, я кажу неправильный пароль, то вылезет сообщение об ошибке и система откроет стандартное окошка для ввода логина и пароля. Как этого избежать?
в текущем варианте нельзя, но понятно что надо реализовать данную возможность, расширю данный метод, и функцию MAVCONNECT на один параметр, показывать или нет стандартное логин окошко при ошибке.
И второе: можно ли использовать созданное соединение для работы через обычный драйвер ODBC родных кларионовских функций?
Хотя тоже подозреваю, что не получится.
хоть и есть PROP:henv и PROP:hdbc, но они Read Only, унаследовать открытое MAV соединение не получиться, да и параметры соединения там разные.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Арсений писал(а):А есть ли возможность быстрой переработки стандартных процедур browse и form (конкретно интерисует ШВС) под dODBC?

PS Подозреваю, конечно, что нет :(
Конечно можно попробовать через TXD, но думаю ничего хорошего из этого не получится.
В любом случае, при реализации аналогичного функционала на MAV Direct, процедуры будут строится куда быстрее, многие решения реализованы в шаблонах и классах. Что в стандарте делали руками, тут будете делать только кликаньем мышкой в Window Formater'е.;)

Можно в одном проекте использовать и то и другое и по мере возможности потихоньку переводить старый функционал на новые рельсы, что я и делал когда то.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

MAV Direct ODBC от 27 июля 2005 года

Сообщение Andrew™ »

Изменён алгоритм сохранения записей дочерних буферизованных Browse в формах редактирования родительской записи, оптимизация кода.
Арсений

Re: MAV Direct ODBC от 27 июля 2005 года

Сообщение Арсений »

Andrew Myalin писал(а):Изменён алгоритм сохранения записей дочерних буферизованных Browse в формах редактирования родительской записи, оптимизация кода.
Хорошо ве это :) Быстрее бы бабосики до тебя дошли :wink:
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Обновление от 29 июля 2005 года

Сообщение Andrew™ »

Расширен пример 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 кнопки.
Арсений

Возврат из UPDATE

Сообщение Арсений »

Все таки при возврате в броузер из процедуры обновления не обновляются поля связанных таблиц. Кстати, смотрел трасу, так понял, что после возврящения из апдейта програмулина зачитывает в очередь только одну запись. Дык вот, зачитываются только поля одной таблицы.
Какие вижу выходы? Можно либо все броузеры по нескольким таблицам создавать по вьюшкам сервера, либо после возврата из редактирования, вызвать обновление очереди броузера, но browse.load() отправляет курсор на начало. Конечно и тут можно воспользоваться связкой choose() - select(). Но хотелось бы понять причину и найти чисто библиотечное решение.

Спасибо за внимание :)
Ответить