MySQL - для чайника

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Аватара пользователя
morkovin
Ветеран
Сообщения: 611
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

MySQL - для чайника

Сообщение morkovin » 28 Март 2019, 23:07

Чтение в очередь с отбором
Вместо очереди проще использовать In-Memory файл.
1.Определи в DCT свой файл-приемник (для начала как TPS, потом заменишь на In-memory).
2.Создай типовую (шаблонную) процедуру типа Process.
3. Выбери для неё входную таблицу с сервера.
4. В Other добавь свой приемный файл.
5. Укажи фильтр для входной таблицы
6. В Embeds для Activity for each record и делай здесь свою обработку (назначение полей и запись в свой файл)
WBR, morkovin

Аватара пользователя
Дед Пахом
Старичок
Сообщения: 2248
Зарегистрирован: 07 Июль 2005, 15:51
Откуда: Москва, Россия

MySQL - для чайника

Сообщение Дед Пахом » 28 Март 2019, 23:17

следующий совет будет уйти с mysql на tps и терминальный сервер.
С уважением, ДП

Аватара пользователя
morkovin
Ветеран
Сообщения: 611
Зарегистрирован: 20 Июль 2005, 13:53
Откуда: Volgograd, Russia
Контактная информация:

MySQL - для чайника

Сообщение morkovin » 29 Март 2019, 8:10

Начал было разбираться с LoadQueueFromSQL, но потом понял, что не смогу использовать ?, так как в базу не могу вносить изменений.
следующий совет будет уйти с mysql на tps и терминальный сервер.
WBR, morkovin

Yufil
Ветеран движения
Сообщения: 1109
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

MySQL - для чайника

Сообщение Yufil » 29 Март 2019, 10:22

LoadQueueFromSQL требует создания фиктивной таблицы с одним полем, куда реально ничего не пишется. Можно, наверное, использовать и другую имеющуюся подходящую таблицу ( нужно, чтобы у неё было одно текстовое поле достаточной длины ), исправив при этом текст программы. Все равно никаких изменений в этой таблице не будет.

kreator
✯ Ветеран ✯
Сообщения: 3256
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

MySQL - для чайника

Сообщение kreator » 29 Март 2019, 10:51

Андрей, стандартный броуз работает как надо. Непонятно, что всё-таки с ним не так. Сделайте броуз попроще для начала. Стратегию Page надо изменить на File. Локатор какой? Давайте конкретику. Не ищет любую букву (есть нюансы с большими/маленькими буквами)? Сортировка реально правильная (опять же, есть нюансы с большими/маленькими буквами)? Что с locale?
В очередь в Вашем случае (совсем упрощённо) надо грузить так:

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

MyTable{prop:SQL} = 'select * from mytable'
loop
 if Access:MyTable.Next()
   break
 end 
 MyQueue.Field1 = MyTable.Field1
 ...
 add(MyQueue)
 ... 		
end
Для начала что-то такое. Только запоминать это особо не нужно, потому что конструкция "select * from..." опасна и не рекомендуется. Если нужен такой же ручной запрос по нескольким таблицам, то нужно сделать клариновскую вьюху (не скульную!!!) с нужными полями, и к ней применить prop:SQL. Но там могут быть нюансы с порядком полей. Второй вариант ручного запроса - применить prop:SQL к "виртуальной" таблице (на сервере должна быть таблица с одним стринговым полем, а в словаре кларионовском она же, только с сотней таких же полей). У Юрия подобный подход.
Дед Пахом писал(а):
28 Март 2019, 23:17
следующий совет будет уйти с mysql на tps и терминальный сервер.
+100500.
We are hard at work… for you. :)

kreator
✯ Ветеран ✯
Сообщения: 3256
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

MySQL - для чайника

Сообщение kreator » 29 Март 2019, 11:10

Андрей, в разделе форума "Clarion for Windows/FAQ" есть кое-что на эту тему.
We are hard at work… for you. :)

Алексей- Софт-Центр
Ветеран
Сообщения: 375
Зарегистрирован: 26 Август 2009, 11:41
Откуда: Moscow
Контактная информация:

MySQL - для чайника

Сообщение Алексей- Софт-Центр » 29 Март 2019, 12:29

Добрый день!
Кларион 10 с MySql работает без проблем. Задача крутиться уже лет много, переходя с 6 кла на 10.
Kreator прав: сделайте простой броуз без локаторов и фильтров. Убедитесь, что скролы работают. Ну, и далее по шагам.
А чтобы Вам помогли, более конкретики, что, где и как.

Алексей

Yufil
Ветеран движения
Сообщения: 1109
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

MySQL - для чайника

Сообщение Yufil » 29 Март 2019, 13:48

Первый же вопрос - в Словаре у каждой таблицы обязательно должен быть уникальный ключ с атрибутом PRIMARY. Скорее всего, такой ключ есть и в базе данных, но это разные вещи. Поля первичного ключа и только они используются для любого поиска записи ( в tps можно искать, например, по номеру записи ). Это не обязательно для TPS-файлов, но крайне важно для SQL. Если этот ключ отсутствует - необходимо добавить. А потом пробовать...

kreator
✯ Ветеран ✯
Сообщения: 3256
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

MySQL - для чайника

Сообщение kreator » 29 Март 2019, 14:07

Yufil писал(а):
29 Март 2019, 13:48
Поля первичного ключа и только они используются для любого поиска записи ( в tps можно искать, например, по номеру записи ).
Не совсем верно. Первичный ключ (лучше не составной) нужен для редактирования записи. В поиске локатором он не нужен. Для броуза нужен просто уникальный ключ. Грубо говоря - Броуз по сотрудникам должен быть по ключу с фамилией, именем, отчеством, id-шником. И да, на сервере может быть индекс с фамилией, именем, отчеством, но в кларионовский словарь нужно к этому ключу добавить id-шник для уникальности.
We are hard at work… for you. :)

Андрей
Старожил
Сообщения: 254
Зарегистрирован: 30 Октябрь 2005, 3:58

MySQL - для чайника

Сообщение Андрей » 29 Март 2019, 14:33

kreator писал(а):
29 Март 2019, 10:51
Андрей, стандартный броуз работает как надо. Непонятно, что всё-таки с ним не так. Сделайте броуз попроще для начала. Стратегию Page надо изменить на File. Локатор какой? Давайте конкретику. Не ищет любую букву (есть нюансы с большими/маленькими буквами)? Сортировка реально правильная (опять же, есть нюансы с большими/маленькими буквами)? Что с locale?
Спасибо ! Уже подвинулось слегка, оказывается locale не подцепил. Он такой

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

CLACHARSET=204
CLASYSTEMCHARSET=204
CLACOLSEQ="ABCDEFGHIJKLMNOPQRSTUVWXYZАБВГДЕЁЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"
CLACASE="QWERTYUIOPASDFGHJKLZXCVBNMЙЦУКЕНГШЩЗХЁФЫВАПРОЛДЖЭЯЧСМИТЬБЮ,qwertyuiopasdfghjklzxcvbnmйцукенгшщзхёфывапролджэячсмитьбю"
А в свойствах таблицы MySQL-> Кодировка:Utf8 Сопоставление:utf8_general_ci
Скроллинг вверх заработал, остался поиск. Оставил Step, при вводе загл. символа кидает наверх броуза, при вводе прописного кидает вниз.

Yufil
Ветеран движения
Сообщения: 1109
Зарегистрирован: 16 Май 2006, 13:34
Контактная информация:

MySQL - для чайника

Сообщение Yufil » 29 Март 2019, 14:58

kreator писал(а):
29 Март 2019, 14:07
Yufil писал(а):
29 Март 2019, 13:48
Поля первичного ключа и только они используются для любого поиска записи ( в tps можно искать, например, по номеру записи ).
Не совсем верно. Первичный ключ (лучше не составной) нужен для редактирования записи. В поиске локатором он не нужен. Для броуза нужен просто уникальный ключ. Грубо говоря - Броуз по сотрудникам должен быть по ключу с фамилией, именем, отчеством, id-шником. И да, на сервере может быть индекс с фамилией, именем, отчеством, но в кларионовский словарь нужно к этому ключу добавить id-шник для уникальности.
Это да, но для листания Browse туда-сюда необходимо ещё уметь позиционироваться на конкретную запись, а это делается сохранением POSITION и восстановлением записи через RESET или REGET. И вот тут встаёт вопрос - а КАК выполнить эти самые RESET или REGET? Только зная, какой ключ первичный и каково сохранённое значение полей первичного ключа. Можно, например, посмотреть на трассировку...

kreator
✯ Ветеран ✯
Сообщения: 3256
Зарегистрирован: 28 Май 2009, 14:54
Откуда: Москва

MySQL - для чайника

Сообщение kreator » 29 Март 2019, 15:14

Неправильно. Сделайте так:

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

CLASYSTEMCHARSET=WINDOWS
CLACHARSET=WINDOWS
CLACOLSEQ=WINDOWS
CLACASE=WINDOWS
Винда сама разберётся.
Локатор давайте попробуем инкрементный. Степ я не помню. По-моему для строк он не годится. При инкрементном локаторе поиграйтесь с параметром индекса "Case Sensitive". Ну и политику загрузки броуза переключите пока на "File".
We are hard at work… for you. :)

Андрей
Старожил
Сообщения: 254
Зарегистрирован: 30 Октябрь 2005, 3:58

MySQL - для чайника

Сообщение Андрей » 29 Март 2019, 16:48

Придется вернуться к началу... а именно импортированию описаний MySQL таблиц.
Каким то образом в словаре у меня загружено несколько таблиц (по наименованию соседних). А как делал не помню, давно была попытка.
Пытаюсь следующие подгрузить - Import Tables-ODBC-MyDataSource и .... ничего - ни ошибок, ни таблиц. Пробую на новом словаре - то же...
Что попробовать ?

Алексей- Софт-Центр
Ветеран
Сообщения: 375
Зарегистрирован: 26 Август 2009, 11:41
Откуда: Moscow
Контактная информация:

MySQL - для чайника

Сообщение Алексей- Софт-Центр » 29 Март 2019, 17:02

Сначала войдите в администрирование источников ODBC, откройте настройки необходимого источника и нажмите кнопку TEST.
Должен дать ок.
Далее в словаре делаем импорт :
Безымянный.jpg
Безымянный1.jpg
Выбираем необходимую таблицу и импортируем ее.
Последний раз редактировалось Алексей- Софт-Центр 29 Март 2019, 17:16, всего редактировалось 3 раза.

Ал
Ветеран
Сообщения: 793
Зарегистрирован: 08 Июль 2005, 5:48
Откуда: Россия

MySQL - для чайника

Сообщение Ал » 29 Март 2019, 17:07

Yufil писал(а):
29 Март 2019, 14:58
kreator писал(а):
29 Март 2019, 14:07
Yufil писал(а):
29 Март 2019, 13:48
Поля первичного ключа и только они используются для любого поиска записи ( в tps можно искать, например, по номеру записи ).
Не совсем верно. Первичный ключ (лучше не составной) нужен для редактирования записи. В поиске локатором он не нужен. Для броуза нужен просто уникальный ключ. Грубо говоря - Броуз по сотрудникам должен быть по ключу с фамилией, именем, отчеством, id-шником. И да, на сервере может быть индекс с фамилией, именем, отчеством, но в кларионовский словарь нужно к этому ключу добавить id-шник для уникальности.
Это да, но для листания Browse туда-сюда необходимо ещё уметь позиционироваться на конкретную запись, а это делается сохранением POSITION и восстановлением записи через RESET или REGET. И вот тут встаёт вопрос - а КАК выполнить эти самые RESET или REGET? Только зная, какой ключ первичный и каково сохранённое значение полей первичного ключа. Можно, например, посмотреть на трассировку...
+
:wink:

Ответить