Clarion и MySQL

ODBC

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

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
ShilakAV
Бывалый
Сообщения: 54
Зарегистрирован: 25 Декабрь 2005, 9:55
Откуда: Амурская область
Благодарил (а): 1 раз

Clarion и MySQL

Сообщение ShilakAV »

Подскажите, пожалуйста, где и что почитать по работе Clarion и MySQL. Существует ли драйвер Clarion для mysql?
Yufil
Ветеран движения
Сообщения: 1277
Зарегистрирован: 16 Май 2006, 14:34
Контактная информация:

Re: Clarion и MySQL

Сообщение Yufil »

MYSQL вполне нормально работает с Кларионом через ODBC. Другой вопрос, что надо перед началом работы выдать несколько команд (навскидку не помню), чтобы нормально считывалась кириллица.
Аватара пользователя
ShilakAV
Бывалый
Сообщения: 54
Зарегистрирован: 25 Декабрь 2005, 9:55
Откуда: Амурская область
Благодарил (а): 1 раз

Re: Clarion и MySQL

Сообщение ShilakAV »

Кириллица считывается нормально. Но почему то сортировка какая то странная... Начальные буквы алфавита в начале, конечные в конце, но как то все равно не по порядку )) Пока даже не знаю в какую сторону копать...
БАИ
Посетитель
Сообщения: 25
Зарегистрирован: 09 Октябрь 2009, 13:05

Re: Clarion и MySQL

Сообщение БАИ »

Эмпирика по ABC +mysql 5. Стараюсь описывать не только как делаю, но и встреченные неожиданности, тк связать эффекты с причинами бывает сложновато. По большому счету во всех рекомендациях исхожу из идеи "совершить наименьшее количество телодвижений", собственно по тому и ABC шаблоны. Пользуемся myisam, для innodb могут быть отличия (навроде commit и rollback расставить где надо)
1) cp1251.
Бывало так, что при попытке подключения прога молча падала.
Это случалось из-за неверной кодировки, в odbc-драйвере следует указать cp1251 и соответственно сами таблицы должны быть в этой кодировке collation также следует указать cp1251_general_ci. Кстати, если указать юникод, работать тоже будет, даже русский можно заставить отображаться, но сортироваться будет по странному. Если в odbc драйвер не понимает, что вы хотите сменить кодировку, то скорее всего вы используете версию 5.1.5, где параметр charset авторы сломали. Используйте v3,51 v5,1,6 или v5,1,8 старшие не проверял.
В драйвере 5.1.7 есть занятный глюк, при определенных условиях клиент отображает не более одной строки: по логу сервера видно, что перед тем как получить данные из рассчитанной таблицы с клиента приходит изменение переменной sql_select_limit.
2) Браузы с более чем 1 зависимой таблицей.
Для 1 зависимой таблицы все ок, но почему-то вместо того, чтобы состряпать сложный select с нескольким Join'aми, кларион начинает ддосить сервер кучей селектов, вытягивая записи по одной. Обычно я строю кудесником брауз и форму по основной табличке, затем в mysql создаю view для отображения в браузе, в которой подтягиваю все необходимые поля других таблиц, и эту вьюху цепляю в листбоксе как custom join вида xxxx:id=yyyy:id. View в mysql тоже следует строить с некоторыми оговорками: при использовании сортировки по header будут пропадать строчки, значение в поле сортировки которых = null просто правлю селект так, чтобы вместо поле_с_null возвращалось COALESCE(`поле_с_null`, '') AS `поле_с_null`.
3) В additonal sort field добавьте поле id
Иначе в браузе все записи продублируются.
4) Автоинкремент через словарь.
С этим делом можно получить неслабый гемор, если работать с триггерами с добавлением в другие таблицы или паралелльными операциями с IDENTITY. Но если всё топорно, да еще и дырки в нумерации не беспокоят, то можно:
На стороне mysql указываем id INT (11) NOT NULL AUTO_INCREMENT
В свойствах таблички на вкладке Options добавьте поле EMULATEAUTONUMKEY типа Boolean. Значение true.
Благодаря этому кларион сгенерит код добавляющий add(Tаблица) при открытии формы редактирования записи и удаляющий эту запись при нажатии cancel.
Заходите в словарь в свойствах таблички в драйверопшнс добавьте
/AUTOINC='SELECT LAST_INSERT_ID()'
Или любой другой запрос, который вернет id (у меня этот работает).
Теперь идем в свойства поля id на вкладку Options, Добавим в User Options новый PropertyLabel, типа boolean. Имя ему укажите IsIdentity. Это надо, чтобы кларогенератор знал, что поле id заполняется на сервере.
Если по полю ID в словаре создали ключ, то в вкладке Attributes надо снять галочку autonumber. Иначе компилятор скажет, что он не согласен.
5) Для сложных случаев пользуемся хранимками
имя_таблицы{prop:sql}='call имя_хранимки(параметры)'
все по help, никаких сюрпризов. если хранимка что-то возвращает(например селект), забрать можно добавив после вызова prop:sql access:имя_таблицы.trynext()
6) Если конечно записей не миллионы, пользуемся fuzzymatch, сейчас клиентские машины мощные, а каналы широкие серверу проще выплюнуть несколько десятков мегабайт данных, чем искать записи по всем полям.
Последний раз редактировалось БАИ 24 Май 2011, 13:55, всего редактировалось 1 раз.
Аватара пользователя
Admin
Администратор
Сообщения: 3959
Зарегистрирован: 05 Июль 2005, 15:59
Откуда: Хабаровск
Благодарил (а): 25 раз
Поблагодарили: 22 раза
Контактная информация:

Re: Clarion и MySQL

Сообщение Admin »

ShilakAV писал(а):Подскажите, пожалуйста, где и что почитать по работе Clarion и MySQL. Существует ли драйвер Clarion для mysql?
Не знаю. Могу предложить этот тред.
http://forum.clarionlife.net/phpbb/view ... ilit=MySQL
Все в силе и для локальных приложений.
Рай совершает ошибки ничуть не реже чем ад. Просто у него хорошая пресса
svru
Посетитель
Сообщения: 27
Зарегистрирован: 29 Февраль 2012, 13:49
Откуда: Е-бург

Re: Clarion и MySQL

Сообщение svru »

Искал пример использования sqlfile{prop:sql} = ' select ....' . Не нашел(((
Написал сам. Может кому пригодится, кто на стадии:" Есть представление - нет понимания".
С6.3 + MySQL5.
Задача: Заполнить листбох, связанный с очередью, из таблицы MySQL.
1.Создаем таблицу в MySQ.
personal:
cod int4 - PRIMARYKEY
name varchar(45)
prog varchar(45)
c_pro int4

2. Импортируем в словарь кларион.
personal:
per:cod long - PRIMARYKEY
per:name cstring(46)
per:dolg cstring(46)
per:c_pro long

3. Посредством template Window создаем окно.
4. Добавляем Listbox.
5. В data секции создаем переменные

qview queue ! очередь связанная с listbox
q:c long
q:n cstring(46)
q:p cstring(46)
q:c_p long
end


v_view VIEW(personal) ! виртуальный файл
PROJECT(per:codd)
PROJECT(per:name)
! PROJECT(per:dolg)
! PROJECT(per:c_prof)
end

6. В секцию CODE добавляем код.

CODE
? DEBUGHOOK(personal:Record)

.
.
.
.
.
open(v_view) ! привязываем к кнопке "Заполнить список "
do fill_list
close(v_view)

.
.
.

fill_list routine

v_view{prop:sql} = 'select cod, name from personal '
! или v_view{prop:sql} = 'select dolg, c_prof from personal '

free(qview)
set(v_view)
loop
next(v_view)
if errorcode()
! message('error = '&errorcode())
break
else
clear(qview)
q:c = per:cod
q:n = per:name
q:p = per:dolg
q:c_p = per:c_prof
add(qview)
end
end
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Clarion и MySQL

Сообщение morkovin »

Как перевести дату из Clarion-а (LONG) в формат MySQL? Чтобы правильно отображалась на страничках, сгенрированных PHP-мейкером или аналогичными средствами?
Задача простая: создать урезанный MySQL-вариант БД для Web-сервера, полная рабочая БД крутится на MS SQL в локальной сети.
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Re: Clarion и MySQL

Сообщение Дед Пахом »

morkovin писал(а):Как перевести дату из Clarion-а (LONG) в формат MySQL? Чтобы правильно отображалась на страничках, сгенрированных PHP-мейкером или аналогичными средствами?
Задача простая: создать урезанный MySQL-вариант БД для Web-сервера, полная рабочая БД крутится на MS SQL в локальной сети.
Вроде канонический ODBC формат даты 'yyyy-mm-dd' работает в любом SQL, так что

Код: Выделить всё

  SqlDate = FORMAT(ClaDate, @d10-)
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Clarion и MySQL

Сообщение morkovin »

Вроде канонический ODBC формат даты 'yyyy-mm-dd' работает в любом SQL
Получается, что на стороне MySQL я должен изменить все поля с датами с типа INTEGER на STRING(). Ну если нет формулы для перевода (как, например, для MSSQL), то видимо придется так и делать.
WBR, morkovin
Аватара пользователя
Дед Пахом
Старичок
Сообщения: 3131
Зарегистрирован: 07 Июль 2005, 16:51
Откуда: Москва, Россия
Благодарил (а): 10 раз
Поблагодарили: 28 раз
Контактная информация:

Re: Clarion и MySQL

Сообщение Дед Пахом »

Я предлагал это для случая, когда MySQL даты хранятся в полях типа DATE. Тогда ничего менять не надо, table.datefield = 'yyyy-mm-dd' работает.
А какой смысл в INTEGER для дат, тем более в INTEGER, который не совпадает с кларионовской датой?
С уважением, ДП
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Clarion и MySQL

Сообщение morkovin »

Вроде бы мелькали забугорные темплейты для "правильного" создания Browse в MySQL. Там учитывались какие-то тонкости. Не могу найти...
WBR, morkovin
George
Активист
Сообщения: 100
Зарегистрирован: 04 Август 2009, 10:48

Re: Clarion и MySQL

Сообщение George »

Clarion 8.0.8973
При соединении с базой выдает ошибку "Invalid record declaration (47)".
Базу создавал, используя DCT2SQL.
В чем может быть дело ?
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Clarion и MySQL

Сообщение morkovin »

Вроде бы мелькали забугорные темплейты для "правильного" создания Browse в MySQL
Нашел такой темплейт, но для Legacy. А для АВС переделать у меня не получается . :cry:
Может кто-нибудь сумеет?
Вложения
mysqlpageloadedbrowses.zip
(3.52 КБ) 359 скачиваний
WBR, morkovin
Аватара пользователя
morkovin
Ветеран
Сообщения: 908
Зарегистрирован: 20 Июль 2005, 14:53
Откуда: Volgograd, Russia
Благодарил (а): 2 раза
Поблагодарили: 3 раза
Контактная информация:

Re: Clarion и MySQL

Сообщение morkovin »

В драйвере 5.1.7 есть занятный глюк, при определенных условиях клиент отображает не более одной строки
Может имеется ввиду версия сервера MySql 5.1.7? У меня сервер 5.1.62, odbc v3.51 - и тоже такой глюк. Но после каждого нажатия "стрелка вниз" список дополняется на одну строку. Все сгенерировано стандартными АВС-шаблонами
(С6.2.9049)
WBR, morkovin
Ответить