MAV Direct ODBC

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

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

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

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

Арсений писал(а):На таблице висит тригер на обновление и добавление. Он делает проверки по различным условиям и в случае удовлетворения этим условиям блокирует операцию. Можно ли, что бы пользователю выдавалось сообщение, сгенерированное самим тригером, в котором будет объясняться причина блокировки?
в случае ошибки добавления/изменения записи MAVSHOWERROR
вернёт ошибку, текст которой может быть установлен в тригерре через функцию raiserror, перый параметр в данной функции попадёт в сообщение об ошибке.
Арсений

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

Andrew Myalin писал(а):в случае ошибки добавления/изменения записи MAVSHOWERROR
вернёт ошибку, текст которой может быть установлен в тригерре через функцию raiserror, перый параметр в данной функции попадёт в сообщение об ошибке.
Реил выложить пример, вдруг кому пригодится:

begin
set nocount on
declare @err_msg char(1000)
set @err_msg = 'Сообщение об ошибке'
raiserror (@err_msg,16,1)
rollback transaction
return
end

и clarion-код:

MAVLogout
if MAVInsert(MyTable) then
MAVShowError
else
MAVCommit
end
Арсений

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

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

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

Арсений писал(а):А можно в броузере сделать сортирвку так, как задано в условном поведении, а локатор по какому-то определенному (уникальному) столбцу?
Я вроде уже говорил, есть метод Sortered в котором можно самому отсортировать произвольно Browse Queue и вернуть не PARENT.Sortered а 1, в результате библиотека не будет производить пересортировку, а локатор будет работать по колонке на которую нажали, или в этом же методе на входе *LONG Column присвоить требуемую колонку.
Paul

Сообщение Paul »

Привет, Андрей!


В историю стоит добавить, что в начале разработки
тебе активно помог Бирюков Александр, который к этому
времени уже разработал свою библиотеку доступа
через ODBC API в Кларионе.

С уважением, Павел.
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

Paul - это можно было человеку и мылом написать :)
Арсений

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

Как будет выглядеть в MAV следующий код:

my_file.field1 = my_value
my_file.field2 = my_other_value

set(my_file.Field1Field2Key, my_file.Field1Field2Key)

loop
next(my_file)
if errorcode() or (my_file.field1 <> my_value) or (my_file.field1 <> my_other_value) then break .

some statement

end

т.е. как организовать проход по определенному набору записей таблицы без использования MAVLoad('select bla-bla-bla', my_Queue)?
Арсений

Залетный

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

Уважаемый Admin, а можно меня из "залетного" переделать во что-то более приличное? А то как-то перед людями не удобно получается :)
Аватара пользователя
Admin
Администратор
Сообщения: 4010
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 53 раза
Поблагодарили: 33 раза
Контактная информация:

Сообщение Admin »

А ты попроси! Я тебе персональное звание сделаю :)
Я просто не знаю как сказать кратко что человек появляется/пишет периодически. Вот и написал "Залетный" :)
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Paul писал(а):Привет, Андрей!
В историю стоит добавить, что в начале разработки
тебе активно помог Бирюков Александр, который к этому
времени уже разработал свою библиотеку доступа
через ODBC API в Кларионе.
Действительно, Александр открыл мне в своё время глаза на те механизмы в SQL акселераторах, благодаря которым работать через которые не очень то и интересно и ужасно и это стало началом в создании библиотеки. В своё время я пытался написать свою библиотеку на FILE,DRIVER, думал смогу соптимизировать код в сторону SQL и получить хорошие результаты, Но увы, выше возможностей FILE,DRIVER просто не прыгнуть, выход один - ODBC API(далее не меняя базовых классов со стороны разработчика безболезненный переход в случае необходимости на OLE DB). Но наличие ТОЛЬКО библиотеки удобного доступа через ODBC API мало, теряется весь смысл в использовании Clarion, нужны полноценные SQL шаблоны, чего и было сделано.
Последний раз редактировалось Andrew™ 29 Август 2005, 9:22, всего редактировалось 1 раз.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

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

Арсений писал(а):Как будет выглядеть в MAV следующий код:

my_file.field1 = my_value
my_file.field2 = my_other_value

set(my_file.Field1Field2Key, my_file.Field1Field2Key)

loop
next(my_file)
if errorcode() or (my_file.field1 <> my_value) or (my_file.field1 <> my_other_value) then break .

some statement

end
cursor MAVSelect
CODE
cursor.Init(,0) !читаем всё БЛОКАМИ, количество записей в блоке устанавливается через первый параметр (default =100)
cursior.BindFields(my_file) ! читаем все поля файла, но через метод .BindField можно указать только те поля, которые необходимы, например, в данной задаче инфо о двух полях просто не нужна это field1 и field2. Для этих двух методов опущен второй параметр, куда читаем, т е читать можно в произвольные буфера, например сразу в поля очереди, если второй параметр опущен то читаем в поля файла
cursor.Where(my_file.field1,my_value) ! контсруктор Where, опущены два последних параметра, это условие сравнения (default =) и правило склеивания с пред условием Where (default AND)
cursor.Where(my_file.field2,my_other_value)

cursor.OrderBy(my_file.field1) ! конструктор ORDER BY, опущен второй параметр - тип сортировки (default ASC)
cursor.OrderBy(my_file.field2)
IF cursor.Run()
MAVSHOWERROR
RETURN
END
LOOP
CASE cursor.Fetch()
OF NoError
OF NoRecErr
BREAK
ELSE
MAVSHOWERROR
BREAK
END
END

хочу напомнить, если хотим прочитать ВСЮ выборку по определённым условиям, то ORDER BY по идее и не требуется, т к всё равно прочитаем всё, хотя всё зависит от задачи, если уж нужен последовательный проход то выставляйте, я стараюсь этого не делать, если требуется последовательный проход, то сначало заливаю результат в Queue, далее её сортирую и работаю с ней, чтобы бессмысленно не нагружать сервак.
Арсений писал(а):т. е. как организовать проход по определенному набору записей таблицы без использования MAVLoad('select bla-bla-bla', my_Queue)?
много раз говорил, но думаю надо повторить всем, при работе со структурами из словаря нелогично использовать MAVLOAD, объясняю почему:
в технологии MAV при первом использовании структуры из словаря происходит проверка соответсивия структуры в словаре и на сервере (SQLDescribe), а-ля OPEN(FILE), которого нет в кодах т к библиотека делает это на автомате (ошибки File Already Open не дождётесь ;) :D ), при повторных использованиях структур из словаря проверка уже не производится т к она уже была и вся инфо имеется во внутренних структурах библиотеки.
При использовании MAVLOAD SQLDescribe будет производиться ВСЕГДА. MAVLOAD по идее нужен для получения данных по структурам, которые не продекларированы в словаре.
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

MAVGETERROR

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

Арсений писал(а):а в твоей библиотеке какие вообще есть функции для обработки ошибок?
Andrew Myalin писал(а):всё внутри библы, только MAVSHOWERROR
Арсений писал(а):т.е. даже текст, показываемый MAVSHOWERROR пощупать низя?
ОШИБСЯ,
для этого есть функция:
MAVGETERROR(),STRING, которая вернёт инфо об ошибке.
Paul

Сообщение Paul »

Paul

Андрей Мялин пишет:

________
Действительно, Александр открыл мне в своё время глаза на те механизмы в SQL акселераторах, благодаря которым работать через которые не очень то и интересно и ужасно и это стало началом в создании библиотеки. В своё время я пытался написать
свою библиотеку на FILE,DRIVER, думал смогу соптимизировать код в сторону SQL и получить хорошие результаты, Но увы, выше возможностей FILE,DRIVER просто не прыгнуть, выход один - ODBC API(далее не меняя базовых классов со стороны разработчика безболезненный переход в случае необходимост на OLE DB).
Но наличие ТОЛЬКО библиотеки удобного доступа через ODBC API мало, теряется весь смысл в использовании Clarion, нужны полноценные SQL шаблоны, чего и было сделано.
_________

Так Александр Бирюков открыл в это же время глаза на то, что есть и другая парадигма в Clarion - работа на основе библиотеки классов, а не на шаблонах.

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

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

Paul писал(а):Paul
Так Александр Бирюков открыл в это же время глаза на то, что есть и другая парадигма в Clarion - работа на основе библиотеки классов, а не на шаблонах.
НЕТ НИКАКОЙ ПАРАДИГМЫ!

Не раз говорили об этом, прелесть Clarion это именно быстрая разработка с использованием шаблонов, нет шаблонов, есть человеческий фактор появления ошибок в одинаковых местах (РУКИ.SYS).
Нет смысла в использовании Clarion без шаблонов, можно найти для этого более подходящий язык, где и библиотеку свою писать то и не надо, всё уже есть, и не только ODBC API но и OLE DB и т д.
Paul

Сообщение Paul »

Имел в иду, что можно работать на основе библиотеки классов, а не на шаблонах вполне нормально и эффективно.

----
Кстати, по Вашим сообщениям в форуме можно было ранее судить, что Александр Бирюков поиог Вам запустить своё первое приложение на основе библиотеки ODBC API?
----
С уважением, Павел.
Ответить