Страница 1 из 1

Clarion и MySQL

Добавлено: 10 Апрель 2008, 8:30
ShilakAV
Подскажите, пожалуйста, где и что почитать по работе Clarion и MySQL. Существует ли драйвер Clarion для mysql?

Re: Clarion и MySQL

Добавлено: 10 Апрель 2008, 10:13
Yufil
MYSQL вполне нормально работает с Кларионом через ODBC. Другой вопрос, что надо перед началом работы выдать несколько команд (навскидку не помню), чтобы нормально считывалась кириллица.

Re: Clarion и MySQL

Добавлено: 14 Апрель 2008, 13:46
ShilakAV
Кириллица считывается нормально. Но почему то сортировка какая то странная... Начальные буквы алфавита в начале, конечные в конце, но как то все равно не по порядку )) Пока даже не знаю в какую сторону копать...

Re: Clarion и MySQL

Добавлено: 24 Май 2011, 7:45
БАИ
Эмпирика по 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, сейчас клиентские машины мощные, а каналы широкие серверу проще выплюнуть несколько десятков мегабайт данных, чем искать записи по всем полям.

Re: Clarion и MySQL

Добавлено: 24 Май 2011, 9:10
Admin
ShilakAV писал(а):Подскажите, пожалуйста, где и что почитать по работе Clarion и MySQL. Существует ли драйвер Clarion для mysql?
Не знаю. Могу предложить этот тред.
http://forum.clarionlife.net/phpbb/view ... ilit=MySQL
Все в силе и для локальных приложений.

Re: Clarion и MySQL

Добавлено: 12 Март 2012, 11:43
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

Re: Clarion и MySQL

Добавлено: 16 Апрель 2012, 18:48
morkovin
Как перевести дату из Clarion-а (LONG) в формат MySQL? Чтобы правильно отображалась на страничках, сгенрированных PHP-мейкером или аналогичными средствами?
Задача простая: создать урезанный MySQL-вариант БД для Web-сервера, полная рабочая БД крутится на MS SQL в локальной сети.

Re: Clarion и MySQL

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

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

  SqlDate = FORMAT(ClaDate, @d10-)

Re: Clarion и MySQL

Добавлено: 17 Апрель 2012, 17:38
morkovin
Вроде канонический ODBC формат даты 'yyyy-mm-dd' работает в любом SQL
Получается, что на стороне MySQL я должен изменить все поля с датами с типа INTEGER на STRING(). Ну если нет формулы для перевода (как, например, для MSSQL), то видимо придется так и делать.

Re: Clarion и MySQL

Добавлено: 17 Апрель 2012, 17:53
Дед Пахом
Я предлагал это для случая, когда MySQL даты хранятся в полях типа DATE. Тогда ничего менять не надо, table.datefield = 'yyyy-mm-dd' работает.
А какой смысл в INTEGER для дат, тем более в INTEGER, который не совпадает с кларионовской датой?

Re: Clarion и MySQL

Добавлено: 26 Апрель 2012, 9:59
morkovin
Вроде бы мелькали забугорные темплейты для "правильного" создания Browse в MySQL. Там учитывались какие-то тонкости. Не могу найти...

Re: Clarion и MySQL

Добавлено: 06 Май 2012, 13:35
George
Clarion 8.0.8973
При соединении с базой выдает ошибку "Invalid record declaration (47)".
Базу создавал, используя DCT2SQL.
В чем может быть дело ?

Re: Clarion и MySQL

Добавлено: 14 Май 2012, 11:24
morkovin
Вроде бы мелькали забугорные темплейты для "правильного" создания Browse в MySQL
Нашел такой темплейт, но для Legacy. А для АВС переделать у меня не получается . :cry:
Может кто-нибудь сумеет?

Re: Clarion и MySQL

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