Страница 6 из 12
Добавлено: 24 Август 2005, 8:55
Andrew™
Арсений писал(а):На таблице висит тригер на обновление и добавление. Он делает проверки по различным условиям и в случае удовлетворения этим условиям блокирует операцию. Можно ли, что бы пользователю выдавалось сообщение, сгенерированное самим тригером, в котором будет объясняться причина блокировки?
в случае ошибки добавления/изменения записи MAVSHOWERROR
вернёт ошибку, текст которой может быть установлен в тригерре через функцию raiserror, перый параметр в данной функции попадёт в сообщение об ошибке.
Добавлено: 24 Август 2005, 14:15
Арсений
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
Добавлено: 26 Август 2005, 7:00
Арсений
А можно в броузере сделать сортирвку так, как задано в условном поведении, а локатор по какому-то определенному (уникальному) столбцу?
Добавлено: 26 Август 2005, 8:44
Andrew™
Арсений писал(а):А можно в броузере сделать сортирвку так, как задано в условном поведении, а локатор по какому-то определенному (уникальному) столбцу?
Я вроде уже говорил, есть метод
Sortered в котором можно самому отсортировать произвольно
Browse Queue и вернуть не
PARENT.Sortered а 1, в результате библиотека не будет производить пересортировку, а локатор будет работать по колонке на которую нажали, или в этом же методе на входе
*LONG Column присвоить требуемую колонку.
Добавлено: 27 Август 2005, 14:20
Paul
Привет, Андрей!
В историю стоит добавить, что в начале разработки
тебе активно помог Бирюков Александр, который к этому
времени уже разработал свою библиотеку доступа
через ODBC API в Кларионе.
С уважением, Павел.
Добавлено: 28 Август 2005, 7:29
Admin
Paul - это можно было человеку и мылом написать

Добавлено: 28 Август 2005, 11:11
Арсений
Как будет выглядеть в 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)?
Залетный
Добавлено: 28 Август 2005, 11:13
Арсений
Уважаемый Admin, а можно меня из "залетного" переделать во что-то более приличное? А то как-то перед людями не удобно получается

Добавлено: 28 Август 2005, 15:22
Admin
А ты попроси! Я тебе персональное звание сделаю

Я просто не знаю как сказать кратко что человек появляется/пишет периодически. Вот и написал "Залетный"

Добавлено: 29 Август 2005, 8:55
Andrew™
Paul писал(а):Привет, Андрей!
В историю стоит добавить, что в начале разработки
тебе активно помог Бирюков Александр, который к этому
времени уже разработал свою библиотеку доступа
через ODBC API в Кларионе.
Действительно, Александр открыл мне в своё время глаза на те механизмы в SQL акселераторах, благодаря которым работать через которые не очень то и интересно и ужасно и это стало началом в создании библиотеки. В своё время я пытался написать свою библиотеку на FILE,DRIVER, думал смогу соптимизировать код в сторону SQL и получить хорошие результаты, Но увы, выше возможностей FILE,DRIVER просто не прыгнуть, выход один - ODBC API(далее не меняя базовых классов со стороны разработчика безболезненный переход в случае необходимости на OLE DB). Но наличие ТОЛЬКО библиотеки удобного доступа через ODBC API мало, теряется весь смысл в использовании Clarion, нужны полноценные SQL шаблоны, чего и было сделано.
Добавлено: 29 Август 2005, 9:20
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 не дождётесь

), при повторных использованиях структур из словаря проверка уже не производится т к она уже была и вся инфо имеется во внутренних структурах библиотеки.
При использовании MAVLOAD SQLDescribe будет производиться ВСЕГДА.
MAVLOAD по идее нужен для получения данных по структурам, которые не продекларированы в словаре.
MAVGETERROR
Добавлено: 29 Август 2005, 9:48
Andrew™
Арсений писал(а):а в твоей библиотеке какие вообще есть функции для обработки ошибок?
Andrew Myalin писал(а):всё внутри библы, только MAVSHOWERROR
Арсений писал(а):т.е. даже текст, показываемый MAVSHOWERROR пощупать низя?
ОШИБСЯ,
для этого есть функция:
MAVGETERROR(),STRING, которая вернёт инфо об ошибке.
Добавлено: 04 Сентябрь 2005, 16:40
Paul
Paul
Андрей Мялин пишет:
________
Действительно, Александр открыл мне в своё время глаза на те механизмы в SQL акселераторах, благодаря которым работать через которые не очень то и интересно и ужасно и это стало началом в создании библиотеки. В своё время я пытался написать
свою библиотеку на FILE,DRIVER, думал смогу соптимизировать код в сторону SQL и получить хорошие результаты, Но увы, выше возможностей FILE,DRIVER просто не прыгнуть, выход один - ODBC API(далее не меняя базовых классов со стороны разработчика безболезненный переход в случае необходимост на OLE DB).
Но наличие ТОЛЬКО библиотеки удобного доступа через ODBC API мало, теряется весь смысл в использовании Clarion, нужны полноценные SQL шаблоны, чего и было сделано.
_________
Так Александр Бирюков открыл в это же время глаза на то, что есть и другая парадигма в Clarion - работа на основе библиотеки классов, а не на шаблонах.
С уважением, Павел.
Добавлено: 05 Сентябрь 2005, 8:57
Andrew™
Paul писал(а):Paul
Так Александр Бирюков открыл в это же время глаза на то, что есть и другая парадигма в Clarion - работа на основе библиотеки классов, а не на шаблонах.
НЕТ НИКАКОЙ ПАРАДИГМЫ!
Не раз говорили об этом, прелесть Clarion это именно быстрая разработка с использованием шаблонов, нет шаблонов, есть человеческий фактор появления ошибок в одинаковых местах (РУКИ.SYS).
Нет смысла в использовании Clarion без шаблонов, можно найти для этого более подходящий язык, где и библиотеку свою писать то и не надо, всё уже есть, и не только ODBC API но и OLE DB и т д.
Добавлено: 06 Сентябрь 2005, 8:29
Paul
Имел в иду, что можно работать на основе библиотеки классов, а не на шаблонах вполне нормально и эффективно.
----
Кстати, по Вашим сообщениям в форуме можно было ранее судить, что Александр Бирюков поиог Вам запустить своё первое приложение на основе библиотеки ODBC API?
----
С уважением, Павел.