Установка С8/9 и SQLite драйвер.

76 views
Skip to first unread message

Nikolay Tsigouro

unread,
Nov 19, 2014, 5:29:26 AM11/19/14
to ClaList
Всем доброго здоровья.

Пожелалось мне тут конвертнуть (написать конвертор) tps базки в SQLite, дабы поиграться с ней на Андройде. Вспомнилось, что вроде было сообщение, что в последних релизах клаши такой драйвер появился.

В связи с этим два вопроса:
1. Как поставить на W7-64 C8/9? Скачал с файлового архива ClarionLife дистрибутивы, но при запуске установщика имею грабли:

---------------------------
Critical error (Logging service defect?)
---------------------------
System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "ICSharpCode.Core, Version=2.1.0.2447, Culture=neutral, PublicKeyToken=f829da5c02be14ee" или один из зависимых от них компонентов. Не удается найти указанный файл.

Имя файла: "ICSharpCode.Core, Version=2.1.0.2447, Culture=neutral, PublicKeyToken=f829da5c02be14ee"

   в ICSharpCode.SharpDevelop.SharpDevelopMain.HandleMainException(Exception ex)

   в ICSharpCode.SharpDevelop.SharpDevelopMain.Main(String[] args)



Предупреждение: регистрация привязки сборок выключена.

Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.

Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.

Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].


---------------------------
ОК   
---------------------------


И что с этим делать? Где эту сборку брать и куда класть?

Вопрос второй. А кто-нибудь с этим драйвером игрался? Как оно? Конверсия 1251 в UTF-8 каким-нибудь флажком управляется или нужно ручками строки конвертить? Стоит пользовать, или лучше поставить ODBC для SQLite, или просто поюзать С/С++ API из С6?


WBR, Nikolay Tsigouro

Вячеслав Черников

unread,
Nov 19, 2014, 9:52:33 AM11/19/14
to cla...@googlegroups.com
Привет.
Зачем тебе это глюкалово, есть класс для работы с sqlite от Ричарда Тейлора, он с C6 работает без проблем.

среда, 19 ноября 2014 г. пользователь Nikolay Tsigouro написал:
> --
> Вы получили это сообщение, поскольку подписаны на группу "ClaList".
> Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+u...@googlegroups.com.
> Чтобы настроить другие параметры, перейдите по ссылке https://groups.google.com/d/optout.
>

Nikolay Tsigouro

unread,
Nov 19, 2014, 10:03:41 AM11/19/14
to ClaList
19 ноября 2014 г., 17:50 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Привет.
Зачем тебе это глюкалово, есть класс для работы с sqlite от Ричарда Тейлора, он с C6 работает без проблем.

У меня C6 по известным причинам не идет, а XP Mode по неизвестным причинам не ставится ;-(( Ну, а по удаленке на домашнем компе да еще и в XP Mode - как-то совсем грустно... ;-((
Вот и захотелось двух зайцев сразу. 

Если есть ссылка на эту статью не в ClaMag-e, то скинь плиз в личку. Или саму статью с классом, а то мне говорят, что подписка нужна.

WBR, Nikolay Tsigouro

Вячеслав Черников

unread,
Nov 19, 2014, 10:50:07 AM11/19/14
to cla...@googlegroups.com
Искать в архивах долго, под рукой нет. Я выдрал нужные файлы и пример использования: http://www.finsoftrz.ru/tmp/sqlite_example.7z
Там все понятно по примеру кода.

Vitaly B.

unread,
Nov 19, 2014, 12:48:20 PM11/19/14
to Nikolay Tsigouro
Привет, Nikolay.

> Пожелалось мне тут конвертнуть (написать конвертор) tps базки в
> SQLite, дабы поиграться с ней на Андройде. Вспомнилось, что вроде
> было сообщение, что в последних релизах клаши такой драйвер появился.
есть такой:
SQLite is a very portable file format particularly useful for data that needs to be accessible locally from various devices include PCs running various operating systems or smart phones.
SQLite is not designed for multi-user access. It is not a client/server system like most SQL systems. There is no engine that needs to be installed. It is much more like the TopSpeed Driver than MSSQL.
To run a Clarion program that uses the SQLite driver all that you need are the Clarion libraries that you use, plus sqlite3.dll. This can be downloaded from www.sqlite.org. The driver requires version 3.3.1 or later of sqlite3.dll.
SQLite stores all tables and keys in a single data file.
SQLite does not support stored procedures.
Warning:
Although the SQLite driver supports DECIMAL and PDECIMAL data types, the SQLite data format does not properly support these. It stores the values as binary numbers. Normally this will not cause any problems. You may encounter problems if you use SQL code to retrieve data and in this SQL code use rounding functions. For example, ROUND(9.95,1) evaluates to 10, not 9.9 as expected. This only affects any SQL code. It does not affect standard Clarion code.
> В связи с этим два вопроса:
> 1. Как поставить на W7-64 C8/9? Скачал с файлового архива
> ClarionLife дистрибутивы, но при запуске установщика имею грабли:
у меня официальный ставится норм :(
> Вопрос второй. А кто-нибудь с этим драйвером игрался? Как оно?
> Конверсия 1251 в UTF-8 каким-нибудь флажком управляется или нужно
> ручками строки конвертить? Стоит пользовать, или лучше поставить
> ODBC для SQLite, или просто поюзать С/С++ API из С6?
флажков не видел руками прийдется

> WBR, Nikolay Tsigouro






--
Всего наилучшего,
poruchik mailto:fighti...@mail.ru
-------------------------------------------------------------------
Советские боевые слоны - самые боевые слоны в мире!

Nikolay Tsigouro

unread,
Nov 20, 2014, 4:01:22 AM11/20/14
to ClaList
Спасибо. Бегло посмотрел, вроде действительно все понятно.

WBR, Nikolay Tsigouro

19 ноября 2014 г., 18:50 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Nikolay Tsigouro

unread,
Nov 20, 2014, 5:34:31 AM11/20/14
to ClaList
Посмотрел чуть внимательней. Код класса оставляет желать... Будьте осторожны:

Search "CP_ACP" (4 hits in 1 file)
  D:\sqlite_example\sqlite.clw (4 hits)
Line 53: CP_ACP                                EQUATE(0)!          // default to ANSI code page
Line 229:                                     Loc:WLen = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Address(pInOut), -1, 0, 0)
Line 232:                                         Loc:RC = MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, Address(pInOut), -1, Address(Loc:WideCharStr), Loc:WLen)
Line 282:                                             Loc:RC = WideCharToMultiByte(CP_ACP,0,Address(Loc:WideCharStr),-1,Address(pInOut),Size(pInOut),0,0)

Можно подумать, что другие кодовые страницы никому не нужны. Ну что бы не сделать это свойством класса?...

SQLiteType.Exec         Procedure(<String pSQL>,Long pUseFieldMatching=False)
[...]
                        If ~Omitted(pSQL)
                            Self.SQL = pSQL
                        End

                        If ~Self.ACPtoUTF8(Self.SQL)
                            Return False
                        End

Странный фрагмент. Что будет с кодировкой, если я напишу 

SQLite.Exec('...')
SQLite.Exec()
SQLite.Exec()
SQLite.Exec()
...? - Flip-flop?

И вообще, почему, раз они Private-ные

ACPtoUTF8           Procedure(*cString pInOut),Long,Private,Proc
UTF8toACP           Procedure(*cString pInOut),Long,Private,Proc

,  SQL публичный?
 
SQL                 cString(2048)

Это-ж дыра, которая позволяет выполнять неперекодированную команду.

Да еще и ограниченной длины? Я экспортировал табличку EMS-ом в sql формат для последующей вставки, а теперь мне еще и разбирать ее на строки/блоки? Зачем? Почему не ссылка? И почему Self.SQL = pSQL без CLIP?

PS. Я видел, что ВЧ такую конвертацию отключил и делает ее сам. Наверно это один из простейших вариантов необходимой рихтовки для 1251.

WBR, Nikolay Tsigouro

20 ноября 2014 г., 12:01 пользователь Nikolay Tsigouro <n.tsi...@gmail.com> написал:

Юрий Философов

unread,
Nov 20, 2014, 5:57:43 AM11/20/14
to cla...@googlegroups.com
Добрый день, Николай!

Существует функция Getacp() , возвращающая текущую кодовую страницу.  Если поправить классы-шаблоны... 
И существует EMS для Sqlite (есть на Rutracker),  мож поможет чем? 

P.S. Как там контора, стоит? 

С уважением, 
Юрий Философов 

20 ноября 2014 г., 13:34 пользователь Nikolay Tsigouro <n.tsi...@gmail.com> написал:

Nikolay Tsigouro

unread,
Nov 20, 2014, 5:59:40 AM11/20/14
to ClaList


WBR, Nikolay Tsigouro

20 ноября 2014 г., 13:57 пользователь Юрий Философов <padre...@gmail.com> написал:

Вячеслав Черников

unread,
Nov 20, 2014, 6:06:30 AM11/20/14
to cla...@googlegroups.com
Ага, с кодировками в классе были траблы. Я не стал вникать, что там Тейлор накрутил и использую отдельный класс (если не ошибаюсь, Юры Философова).

четверг, 20 ноября 2014 г. пользователь Nikolay Tsigouro написал:

Nikolay Tsigouro

unread,
Nov 20, 2014, 6:18:22 AM11/20/14
to ClaList
Сори за предыдущее, промахнулся мышкой и попал по кнопке "Отправить"

20 ноября 2014 г., 13:57 пользователь Юрий Философов <padre...@gmail.com> написал:
Добрый день, Николай!

Существует функция Getacp() , возвращающая текущую кодовую страницу.  Если поправить классы-шаблоны... 

Если поправить, то конечно... Я уже думал о таком варианте, но пришел к выводу, что всегда текущая - это не совсем верно.
 
И существует EMS для Sqlite (есть на Rutracker),  мож поможет чем? 

Что-то я у EMS-ов такого не видел. Мускул, Постгресс есть, а этого не нашел. Но это не суть. Фришных менеджеров для SQLite в инете много. И разовую конвертацию можно сделать экспортировав tps в csv TopScan-ом. Надо только по дороге notepad++ - ом (например) в UTF-8 конвертнуть. Тут нет вопроса. Для разработки достаточно - у меня не сотни таблиц - два десятка.
Надо будет конвертор сделать, чтобы на сторону можно было отдать. (У меня-ж не база по маркам стали...;-)  Данные у людей меняются, хотя и довольно редко).
 

P.S. Как там контора, стоит? 

Стоит. Сам то, как?

WBR, Nikolay Tsigouro
 

С уважением, 
Юрий Философов 


Юрий Философов

unread,
Nov 20, 2014, 6:34:28 AM11/20/14
to cla...@googlegroups.com
EMS хороша своим генератором скриптов на обновление структуры. Всякая модификация не выполняется напрямую, а генерится скрипт, хотя и не всегда правильно. Остальное - да, не очень... 

Может быть, выгрузить базу в совокупность операторов Insert, а потом их скушать, всё одним шагом меньше ... 

P.S. Вернулся на своё старое место, вроде жить можно...

С уважением, 
Юрий Философов 

20 ноября 2014 г., 14:18 пользователь Nikolay Tsigouro <n.tsi...@gmail.com> написал:

Nikolay Tsigouro

unread,
Nov 20, 2014, 6:43:53 AM11/20/14
to ClaList
20 ноября 2014 г., 14:34 пользователь Юрий Философов <padre...@gmail.com> написал:
EMS хороша своим генератором скриптов на обновление структуры. Всякая модификация не выполняется напрямую, а генерится скрипт, хотя и не всегда правильно. Остальное - да, не очень... 

Интересно, а как можно иначе? 
 

Может быть, выгрузить базу в совокупность операторов Insert, а потом их скушать, всё одним шагом меньше ... 

Чем выгрузить? EMS-ом для tps? ;-) Да и зачем, если импорт из csv - это штатная фича SQLite? Кстати, некоторые менеджеры позволяют указать кодовую страницу для csv. Вот этот например: http://sqlitestudio.pl/  

Вячеслав Черников

unread,
Nov 20, 2014, 6:52:08 AM11/20/14
to cla...@googlegroups.com
Николай, я не понял, зачем нужно выгружать что-то в csv, если можно из клариной пороги сразу сформировать sqlite нужной структуры. Класс для конвертации в utf8 я специально подложил в архив.

четверг, 20 ноября 2014 г. пользователь Nikolay Tsigouro написал:

Юрий Философов

unread,
Nov 20, 2014, 7:43:36 AM11/20/14
to cla...@googlegroups.com
Ну, если все равно писать Кларионовскую программу и не работает SQLite - то сделать только выгрузку... 
Кстати, Topscan умеет в csv. 

Кстати, сам занимаюсь конвертацией старых приложений Clarion + Tps -> HTML + javascript + Sqlite , с автоматической компиляцией на javascript некоторых кларионовских фрагментов, приходится в два этапа - сначала в XML, потом удавами...

C уважением,
Юрий Философов 

20 ноября 2014 г., 14:43 пользователь Nikolay Tsigouro <n.tsi...@gmail.com> написал:

Nikolay Tsigouro

unread,
Nov 20, 2014, 7:57:48 AM11/20/14
to ClaList
Кларину прогу нужно писать, что мне делать не удобно, да и сейчас совсем неохота кларион реанимировать. Мне проще было бы через tps-ODBC на шарпе или джаве. Клашу еще вспоминать надо, и привыкать на ней писать, и даже не 6-ю, а 5-ю. Тогда можно будет готовую dll с файловыми буферами и менеджерами заюзать. Так не хочется к этому убогому старью возвращаться... (Я IDE имею ввиду и клашин ООП)

Мне сейчас важнее опробовать идеи в Андройде. Может еще ничего и не состоится. Может структуру БД будет целесообразно пересмотреть... Мало ли что.

PS. Базу для разработки на А я уже конвертнул как есть. Это был вопрос в задел.

WBR, Nikolay Tsigouro

20 ноября 2014 г., 14:52 пользователь Вячеслав Черников <fins...@gmail.com> написал:

Nikolay Tsigouro

unread,
Nov 20, 2014, 8:09:12 AM11/20/14
to ClaList
20 ноября 2014 г., 15:43 пользователь Юрий Философов <padre...@gmail.com> написал:

Ну, если все равно писать Кларионовскую программу и не работает SQLite - то сделать только выгрузку... 

Что значит не работает? Eсть родная dll с С API. ИМХО именно через нее все менеджеры, включая класс Тейлора работают.
И есть родная утилита командной строки. Пользуй что хочешь. Все работает. Только сильно не охота в клашу опять лезть.

 
Кстати, Topscan умеет в csv. 

Ну да. Я с него и начал и им пока закончил. Если бы topscan еще и режим командной строки поддерживал, я бы вообще вопрос не поднимал. Запустил бы батником выгрузку, а потом загрузку.

WBR, Nikolay Tsigouro

Вячеслав Черников

unread,
Nov 20, 2014, 9:30:43 AM11/20/14
to cla...@googlegroups.com
Тебе виднее. А я просто отдыхаю, когда пишу на кларионе. Настолько все откатано, быстро и просто делается...

Seawolf

unread,
Nov 20, 2014, 11:07:15 AM11/20/14
to cla...@googlegroups.com
А чем путь  Clarion + Tps -> HTML + javascript + Sqlite отличается от clarion TPS -> ODBC -> Sqlite ? или есть тайный смысл ?

четверг, 20 ноября 2014 г., 15:43:36 UTC+3 пользователь Юрий Философов написал:

Губин Игорь

unread,
Nov 20, 2014, 11:15:38 AM11/20/14
to cla...@googlegroups.com
20.11.2014 19:07, Seawolf пишет:
> А чем путь Clarion + Tps -> HTML + javascript + Sqlite отличается от
> clarion TPS -> ODBC -> Sqlite ? или есть тайный смысл ?

В первом случае перегоняется весь проект, а во втором - база

>
> четверг, 20 ноября 2014 г., 15:43:36 UTC+3 пользователь Юрий Философов
> написал:
>
> Ну, если все равно писать Кларионовскую программу и не работает
> SQLite - то сделать только выгрузку...
> Кстати, Topscan умеет в csv.
>
> Кстати, сам занимаюсь конвертацией старых приложений Clarion + Tps
> -> HTML + javascript + Sqlite , с автоматической компиляцией на
> javascript некоторых кларионовских фрагментов, приходится в два
> этапа - сначала в XML, потом удавами...
>
> C уважением,
> Юрий Философов
>
> 20 ноября 2014 г., 14:43 пользователь Nikolay Tsigouro
> <n.tsi...@gmail.com <javascript:>> написал:
>
> 20 ноября 2014 г., 14:34 пользователь Юрий Философов
> <padre...@gmail.com <javascript:>> написал:
>
> EMS хороша своим генератором скриптов на обновление
> структуры. Всякая модификация не выполняется напрямую, а
> генерится скрипт, хотя и не всегда правильно. Остальное -
> да, не очень...
>
>
> Интересно, а как можно иначе?
>
>
> Может быть, выгрузить базу в совокупность операторов Insert,
> а потом их скушать, всё одним шагом меньше ...
>
>
> Чем выгрузить? EMS-ом для tps? ;-) Да и зачем, если импорт из
> csv - это штатная фича SQLite? Кстати, некоторые менеджеры
> позволяют указать кодовую страницу для csv. Вот этот например:
> http://sqlitestudio.pl/
>
> WBR, Nikolay Tsigouro
>
>
> С уважением,
> Юрий Философов
>
>
> --
> Вы получили это сообщение, поскольку подписаны на группу "ClaList".
> Чтобы отменить подписку на эту группу и больше не получать от
> нее сообщения, отправьте письмо на электронный адрес
> clalist+u...@googlegroups.com <javascript:>.
> Чтобы настроить другие параметры, перейдите по ссылке
> https://groups.google.com/d/optout
> <https://groups.google.com/d/optout>.
>
>
> --
> Вы получили это сообщение, поскольку подписаны на группу "ClaList".
> Чтобы отменить подписку на эту группу и больше не получать от нее
> сообщения, отправьте письмо на электронный адрес
> clalist+u...@googlegroups.com
> <mailto:clalist+u...@googlegroups.com>.
> Чтобы настроить другие параметры, перейдите по ссылке
> https://groups.google.com/d/optout.


--
------------------------------------------------------------
Губин Игорь
Тел./факс: (+7 495) 989 7021
ICQ: 258187926
Google Talk: metaldata.info
WEB: http://www.metaldata.info

Oleg Fomin

unread,
Nov 20, 2014, 11:56:27 AM11/20/14
to cla...@googlegroups.com
> А чем путь Clarion + Tps -> HTML + javascript + Sqlite отличается от clarion TPS -> ODBC -> Sqlite ?
> или есть тайный смысл ?

Я так думаю, кроссплатформенность.
HTML + javascript + Sqlite работает на любом дивайсе.
Однако, подробности от Юрия будут не лишними.
Интересно,
-насколько получается воспроизвести функционал?
-насколько широка кроссплатформенность?
-какова трудоемкость создания таких приложений?
-какой инструментарий используется?
-да и как оно вообще выглядит в итоге?

Кстати, сегодня смотрел новинку Sencha Space
http://www.sencha.com/products/space/
Sencha Space Secure HTML5 Applications on Any Screen
... applications and data on desktops, tablets, and phones.

Уж кто-кто, а Sencha знает толк в HTML+JavaScript.
До 10 юзеров бесплатно. Дальше $3.99/user.
Для сравнения, у Оракла $110/user. Недавно обсуждали.

С уважением,
---
Oleg Fomin <ol...@fomin.info>

Oleg Fomin

unread,
Nov 20, 2014, 12:19:28 PM11/20/14
to cla...@googlegroups.com
> До 10 юзеров бесплатно. Дальше $3.99/user.
> Для сравнения, у Оракла $110/user. Недавно обсуждали.

Сравнение не совсем корректное. Есть уточнение:
Workforce version US$4.99 per user, per month
Enterprise version US$$7.99 per user, per month

Идея Sencha Space заключается в том, что клиент устанавливает на свой дивайс из магазина (AppStore,GooglePlay..) приложение, которое является хостом для HTML+javascript кроссплатформеных приложений, предоставляет API к нативным функциям, шифрованию данных и т.д. Весь этот зоопарк централизованно управляется, регламентируется доступ...

С уважением,
---
Oleg Fomin <ol...@fomin.info>

Настройки подписки и доставки писем: https://groups.google.com/d/optout.

Юрий Философов

unread,
Nov 20, 2014, 5:15:49 PM11/20/14
to cla...@googlegroups.com
Я по разным личным причинам 7 лет отсутствовал в Саратове, а сейчас вот вернулся. 

Я занимался ( и занимаюсь) обучающими приложениями. Их сейчас накопилось около ста, на самые разные темы. Кроме того, движок поддерживает разные варианты распространения - один пользователь, учебный класс, панель демонстратора, приложение на web-сервере (через CGI), автономное приложение на компакт-диске ( с диска же запускаемое). 

Вот, в тупик зашли. Заказчик хочет кросплатформности, красоты и много чего ещё. Красоту делаем на Unity, работают свои технические писатели, редакторы, корректоры, дизайнеры, звукооператоры. 

Наняли людей, которые делают новую оболочку (что-то слышится родное в долгих песнях ямщика). Делают, красиво, долго, сложно и непригодно к работе, бо требует много телодвижений и напряга мозгов. 

А что делать с существующими приложениями?  Вот и ваяю конвертор, преобразующий специфические обучающие приложения ( никоим образом не  стандартные кларионовские), в  пакет файлов, пригодных для работы в интернете. Самый первый вариант  (на тестировании) - просто полностью автономное web-приложение, для пуска с флэшки или компакта. Экраны автоматически конвертируются в HTML( там мало чего остаётся) и javascript для заполнения. Скрипты, управляющие работой программы, написанные на ограниченном подмножестве Clarion, тоже преобразуются в Javascript. Сохранения на диске нет вообще, только web storage. В тех местах, где был сложный рукописный код, не поддающийся прямой конвертации, будуи писаться по необходимости новые модули, HTML5, jQuery и Bootstrap очень сильно упрощают жизнь, раньше просто надорвался бы.

Особых красот нет, практически полная копия Windows-приложения. 

Сейчас схема такая - приложение делается на своём редакторе, потом  экспортируется в один из вариантов деплоймента.  Закончу отладку - добавлю и этот. 

Язык конвертора - Python 3 (пакеты lxml, beatifulsoup, jinja2, jsonlib, pklite3) , на более сложные нет ни сил, ни времени. Кларионовская программа выбрасывает а данные из TPS в XML, и вызывает конвертор... Конвертор использует SQLite, но пока только для внутренних потребностей. 

С уважением,
Юрий Философов 
 

 

20 ноября 2014 г., 19:55 пользователь Oleg Fomin <ol...@fomin.info> написал:

Oleg Fomin

unread,
Nov 21, 2014, 4:55:27 AM11/21/14
to cla...@googlegroups.com
Юрий,

Прими поздравления с возвращением!
И спасибо за развернутый ответ.

Насколько я смог понять, на Кларионе ты более 7 лет назад наваял движок для интерпретации Кларион подобного языка скриптов, который предназначен для создания обучающих программ. Сейчас ты сделал конвертор скриптов этого языка в веб приложение HTML+JavaScript, которое выполняется в веб браузере.

> Самый первый вариант (на тестировании) - просто полностью автономное web-приложение, для пуска с флэшки или компакта.

Если это веб-приложение, и для сохранения данных используется «только web storage», то о какой автономности речь? И зачем флешка или компакт? Почему веб-приложение не грузится обычным способом с веб-сайта?

С уважением,
---
Oleg Fomin <ol...@fomin.info>


Oleg Fomin

unread,
Nov 21, 2014, 5:32:26 AM11/21/14
to cla...@googlegroups.com
Юрий,

Еще вопрос вдогонку. Для построения модели веб-приложения ты избрал jQuery.
Рассматривал ли ты Sencha ExtJS как базовый фреймворк? Если да, то почему выбрал jQuery?

С уважением,
---
Oleg Fomin <ol...@fomin.info>


From: cla...@googlegroups.com [mailto:cla...@googlegroups.com] On Behalf Of Юрий Философов
Sent: Friday, November 21, 2014 12:16 AM

Rimantas Nedzinskas

unread,
Nov 21, 2014, 5:49:40 AM11/21/14
to cla...@googlegroups.com
На Extjs смотреть есть смысл только для проектов с открытым кодом. Sencha недавно кинула мелких разработчиков. Раньше коммерческую лицензию можно было купить за 325 баксов, а теперь только пакетом на 5 лицензий с поддержкой что выливается на 3225. У них на форуме стоит вой по этому поводу. Агитируют уходить на альтернативные фреймворки типа qooxdoo и dojo. 

Юрий Философов

unread,
Nov 21, 2014, 5:50:33 AM11/21/14
to cla...@googlegroups.com
Добрый день! 

>> Прими поздравления с возвращением!
Спасибо, уже 4 месяца как ... 


>>Насколько я смог понять, на Кларионе ты более 7 лет назад наваял движок для интерпретации Кларион подобного языка 

 "Более 7" - это около 12 :), постепенно развивалось по мере появления адекватных заказов. Собственно, контора (www.tacis-dipol.ru) издаёт разные приложения на этом движке и живёт с этого 

>>скриптов, который предназначен для создания обучающих программ. Сейчас ты сделал конвертор скриптов этого языка в веб >> приложение HTML+JavaScript, которое выполняется в веб браузере.

Ну да, примерно так. 


> Самый первый вариант  (на тестировании) - просто полностью автономное web-приложение, для пуска с флэшки или компакта.
>>Если это веб-приложение, и для сохранения данных используется «только web storage», то о какой автономности речь? И >>

Web storage хранится в браузере на клиентской стороне. Имелось в виду полное отсутствие сервера. 

>> зачем флешка или компакт? Почему веб-приложение не грузится обычным способом с веб-сайта?

И так можно, разумеется. Даже лучше, IE8, например, требует домена...  Обычно всё-таки приложения продаются на компактах, из этого и исхожу. 

С уважением,
Юрий Философов 


21 ноября 2014 г., 12:54 пользователь Oleg Fomin <ol...@fomin.info> написал:

Alexander Stepanets

unread,
Nov 21, 2014, 6:17:29 AM11/21/14
to cla...@googlegroups.com
21.11.2014 20:50, Юрий Философов пишет:

>>>Насколько я смог понять, на Кларионе ты более 7 лет назад наваял движок для интерпретации Кларион подобного языка
>
> "Более 7" - это около 12 :), постепенно развивалось по мере появления
> адекватных заказов. Собственно, контора (www.tacis-dipol.ru
> <http://www.tacis-dipol.ru>) издаёт разные приложения на этом движке и
> живёт с этого

Бедно живёт? Или денег на web-разработчиков жалко? :)
(См. вложенную картинку).
tacis-dipol.ru.1.png

Юрий Философов

unread,
Nov 21, 2014, 7:35:38 AM11/21/14
to cla...@googlegroups.com
> Еще вопрос вдогонку. Для построения модели веб-приложения ты избрал jQuery.

Не избирал. Просто сэкономил кучу сил. Вот позавчера развлекался имитацией Disable для Windows-объектов. 
Добавил для каждого полупрозрачную пластиночку и перекрываю контрол этой пластиночкой. Всего несколько строк... 
Или автоматический ресайзинг - пестня... 

> Рассматривал ли ты Sencha ExtJS как базовый фреймворк? Если да, то почему выбрал jQuery?

Это разные вещи. Jquery-это, грубо говоря, просто библиотека для JavaScript, сильно упрощающая жизнь, а 
Sencha - фреймворк для разработки приложений, таких сейчас много развелось. Пока вопрос разработки учётных задач на JS не стоит, если будет небольшая задача - тряхну стариной,  возьму питоновский фреймворк (Django или Web2py). Там на начальном этапе формы просто строятся на автомате, достаточно описать модель данных и указать список полей (напоминает Screen Wizard), а  всяких аддонов/плагинов/инструментов - как грязи. 

А вот работ Enterprise-масштаба вроде не предвидится.  

С уважением,
Юрий Философов 



21 ноября 2014 г., 13:30 пользователь Oleg Fomin <ol...@fomin.info> написал:

Юрий Философов

unread,
Nov 21, 2014, 7:36:30 AM11/21/14
to cla...@googlegroups.com
А это не я делал... 

21 ноября 2014 г., 14:16 пользователь Alexander Stepanets <clal...@partizansk.com> написал:
--
Вы получили это сообщение, поскольку подписаны на группу ClaList.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+unsubscribe@googlegroups.com.

Alexander Stepanets

unread,
Nov 21, 2014, 7:56:35 AM11/21/14
to cla...@googlegroups.com
21.11.2014 22:35, Юрий Философов пишет:
>> Еще вопрос вдогонку. Для построения модели веб-приложения ты избрал jQuery.
>
> Не избирал. Просто сэкономил кучу сил. Вот позавчера развлекался
> имитацией Disable для Windows-объектов.
> Добавил для каждого полупрозрачную пластиночку и перекрываю контрол этой
> пластиночкой. Всего несколько строк...

Это в HTML-то??.. :)
А штатными средствами это сделать — не судьба? Обязательно надо через
жо... гммм... через "призрак Windows" что-то "изображать"?

P.S.
https://www.google.ru/?gws_rd=ssl#newwindow=1&q=jquery%20html5%20disabled%20attribute


Alexander Stepanets

unread,
Nov 21, 2014, 7:57:26 AM11/21/14
to cla...@googlegroups.com
21.11.2014 22:36, Юрий Философов пишет:
> А это не я делал...

Да я понимаю, что не ты. :)
Но ты вроде с ними дело имел когда-то? Намекни, что ли... :)

Юрий Философов

unread,
Nov 21, 2014, 2:50:25 PM11/21/14
to cla...@googlegroups.com
У меня многие вещи не настоящие, например, обычная строка в роли гиперссылки, table или Div в роли кнопки. На них стандартный Disable может и не действовать или действует не совсем адекватно. Будет время, разберусь. А пока и так устраивает. 

C уважением,
Юрий Философов

21 ноября 2014 г., 15:55 пользователь Alexander Stepanets <clal...@partizansk.com> написал:
--
Вы получили это сообщение, поскольку подписаны на группу ClaList.

Чтобы отменить подписку на эту группу и больше не получать от нее сообщения, отправьте письмо на электронный адрес clalist+unsubscribe@googlegroups.com.

Юрий Философов

unread,
Nov 21, 2014, 2:58:11 PM11/21/14
to cla...@googlegroups.com
Я вернулся назад в ту же контору, где и раньше работал. Более того, был причастен к её созданию и работал с самого начала (1991 год). Семь лет я отсутствовал, большую часть народа и не знаю теперь, они меня аналогично.  Но программная часть практически всех проектов моя.

А вот сайт заказной...

С уважением,
Юрий Философов

21 ноября 2014 г., 15:56 пользователь Alexander Stepanets <clal...@partizansk.com> написал:

Alexander Stepanets

unread,
Nov 21, 2014, 3:46:36 PM11/21/14
to cla...@googlegroups.com
22.11.2014 05:50, Юрий Философов пишет:
> У меня многие вещи не настоящие, например, обычная строка в роли
> гиперссылки, table или Div в роли кнопки. На них стандартный Disable
> может и не действовать или действует не совсем адекватно. Будет время,
> разберусь. А пока и так устраивает.

Вот я и говорю — "через жо...". :)

Любите вы везде и всюду винду и клару за собой тянуть... а потом
искренне удивляетесь...


Nikolay Tsigouro

unread,
Dec 22, 2014, 8:07:29 AM12/22/14
to ClaList
Всем привет!

Выдалось тут внезапно немного свободного времени и поюзал я SQLite3 и класс SQLiteType, что ВЧ поделился.
Вот и я решил от нечего делать (лежу на койке) поделиться своим опытом. Может кому пригодится.

Как я уже писал, оригинальный класс оставляет желать лучшего в части работы с кодовыми страницами. 
Поэтому первая доработка касалась этого момента.
Я добавил в оригинальную декларацию свойство

CodePage            Long

, объявил константу

CP_1251                               EQUATE(1251)

, заменил в clw в коде методов CP_ACP на Self.CodePage, и добавил в конструктор инициализацию:

    Self.CodePage = CP_1251
Все прекрасно заработало без привлечения Cstr. Есть только один момент. 
При открытии БД (метод SQLiteType.OpenDB Procedure(String pDBName))
делается преобразование имени файла в UTF-8

    Self.ACPtoUTF8(Self.DBName)
По видимому, это нужно для SQLite3.dll. И вот тут возникает ошибка если в спецификации файла есть кириллица.
Обнаружил случайно, и за ненадобностью, не копался.

Дальнейшую адаптацию SQLiteType к своим нуждам делал, как и всегда, через наследование. 
Собственно, в работе с БД я придерживаюсь следующей  идеи.
Базовый класс обеспечивает проблемно независимые операции, как-то, подключение и выполнение SQL DDL/DML.
А всю проблемную специфику (структура БД, проблемно ориентированные запросы,...) я локализую в наследном классе.
В этом смысле SQLiteType меня вполне устроил. Но тут всплыла еще одна грабля исходного кода. 
В нем все константы определены в clw и нигде кроме этого clw не видны. Ес-но, я перенес все определения констант в inc.

Еще пара замечаний. 
Для того, чтобы собрать класс в отдельную dll и пользовать его из dll, необходимо в декларацию класса добавить атрибут DLL и соответствующие параметы.
Перед выполнением операций не использующих SQL, свойство класса SQL лучше очистить, иначе могут возникать странные ошибки в SQLite3.
Именно поэтому у меня в SchLiteClass.CreateDB стоит:
self.SQL = ''
    IF ~self.OpenDB(DBFile)
 
Фрагментарно мой наследный класс выглядит следующим образом:

schlite.inc:
============

OMIT('_EndOfInclude_',_SchLitePresent_)
_SchLitePresent_ EQUATE(1)

INCLUDE('SQLite.inc'),ONCE

SchLiteClass            CLASS(SQLiteType),TYPE,MODULE('SchLite.clw'),LINK('SchLite.clw')
GetTableNums                PROCEDURE(),LONG
GetTableName                PROCEDURE(LONG Ind),STRING
GetTableDescription         PROCEDURE(LONG Ind),STRING
CreateDB                    PROCEDURE(STRING DBFile),LONG
DropTables                  PROCEDURE(),LONG
CreateTables                PROCEDURE(),LONG
CreateView                  PROCEDURE(),LONG
ExecSQL                     PROCEDURE(LONG TableInd),LONG
PrepareString               PROCEDURE(STRING Text),STRING

InsertDay                   PROCEDURE(SHORT DaySeqNumber,STRING DayName),LONG
InsertLessonBell            PROCEDURE(STRING LessonNo, STRING Begining, STRING Ending),LONG
! 8< Skip >8
                        END
_EndOfInclude_

schlite.clw:
============

    Member
    MAP
    END

Include ('SchLite.inc')

!------------   Константы для БД Расписание 2000   ------------!

! NB. Таблицы д.б. перечислены в порядке их создания. Порядок их уничтожения будет обратный.

TableNameGroup  GROUP
Days                STRING('Учебные дни         ')
LessonBell          STRING('Звонки              ')
! 8< Skip >8
                END
TableName       STRING(20),DIM(14),OVER(TableNameGroup)

TableGroup      GROUP
                    STRING('Days        ')
                    STRING('LessonBell  ')
! 8< Skip >8
                END
Tables          STRING(12),DIM(14),OVER(TableGroup)

DropTable           STRING('DROP TABLE IF EXISTS ')
DropView            STRING('DROP VIEW IF EXISTS ')
Insert              STRING('INSERT INTO ')

CreateDays          STRING('CREATE TABLE Days (' |
                         & 'SeqNumber INTEGER PRIMARY KEY NOT NULL UNIQUE,' |
                         & 'Name TEXT NOT NULL' |
                         & ');')
CreateLessonBell    STRING('CREATE TABLE LessonBell (' |
                         & 'LessonNo TEXT PRIMARY KEY NOT NULL UNIQUE,' |
                         & 'Begining TEXT NOT NULL,' |
                         & 'Ending TEXT NOT NULL' |
                         & ');')
! 8< Skip >8

!------------   SchLiteClass   ------------!

SchLiteClass.GetTableNums           PROCEDURE()
  CODE
    RETURN MAXIMUM(Tables,1)

SchLiteClass.GetTableName           PROCEDURE(LONG Ind)
  CODE
    IF INRANGE(Ind, 1, MAXIMUM(Tables,1))
        RETURN CLIP(Tables[Ind])
    ELSE
        RETURN ''
    END

SchLiteClass.GetTableDescription    PROCEDURE(LONG Ind)
  CODE
    IF INRANGE(Ind, 1, MAXIMUM(TableName,1))
        RETURN CLIP(TableName[Ind])
    ELSE
        RETURN ''
    END

SchLiteClass.PrepareString          PROCEDURE(STRING Text)
ReturnValue     ANY
  CODE
    ReturnValue = ''
    j# = 0
    LOOP i# = 1 TO LEN(CLIP(Text))
        ReturnValue = SUB(ReturnValue & '', 1, j#) & Text[i#]
        j# += 1
        IF Text[i#] = ''''
            ReturnValue = SUB(ReturnValue & '', 1, j#) & ''''
            j# += 1
        END
    END
    RETURN  '''' & CLIP(ReturnValue & '') & ''''

SchLiteClass.CreateDB               PROCEDURE(STRING DBFile)
  CODE
    IF EXISTS(DBFile)
        IF self.hSQLite
            self.CloseDB()
        END                                
        REMOVE(DBFile)
    END
    self.SQL = ''
    IF ~self.OpenDB(DBFile)
        MESSAGE('Ошибка открытия базы данных ' & DBFile & ' - ' & self.ReturnCodeMsg(self.LastReturnCode), 'SchLiteClass.CreateDB')
        Return self.LastReturnCode
    END
    RETURN SQLITE_OK

SchLiteClass.DropTables             PROCEDURE()
ind             LONG
  CODE
    LOOP ind = MAXIMUM(Tables,1) TO 1 BY -1
        self.SQL = DropTable & CLIP(Tables[ind]) & ';'
        OK# = self.Exec()
        IF ~OK#
            MESSAGE('Ошибка уничтожения старой таблицы ' & CLIP(Tables[ind]) & ': ' & self.ReturnCodeMsg(self.LastReturnCode), 'SchLiteClass.CreateDB')
            self.CloseDB()
            RETURN self.LastReturnCode
        END
    END
    RETURN SQLITE_OK

SchLiteClass.CreateTables           PROCEDURE()
ind             LONG
  CODE
    self.TablesProgressControl{PROP:RangeHigh} = MAXIMUM(Tables,1)
    LOOP ind = 1 TO MAXIMUM(Tables,1)
        IF self.CurrentTableControl > 0 THEN self.CurrentTableControl{PROP:Text} = self.GetTableDescription(ind) .
        IF self.TablesProgressControl > 0 THEN self.TablesProgressControl{PROP:Progress} = ind .
        DISPLAY
        EXECUTE ind
            self.SQL = CreateDays
            self.SQL = CreateLessonBell
! 8< Skip >8
       ELSE
            BREAK
        END
    
        IF ~self.Exec()
            MESSAGE('Ошибка создания таблицы ' & CLIP(Tables[ind]) & ': ' & self.ReturnCodeMsg(self.LastReturnCode), 'SchLiteClass.CreateDB')
            self.CloseDB()
            RETURN self.LastReturnCode
        END
    END

    RETURN SQLITE_OK

SchLiteClass.ExecSQL                PROCEDURE(LONG TableInd)
  CODE
    IF ~self.Exec()
        MESSAGE('Ошибка операции с таблицей ' & self.GetTableDescription(TableInd) & ': ' & self.ReturnCodeMsg(self.LastReturnCode), 'SchLiteClass.CreateDB')
        self.CloseDB()
        RETURN self.LastReturnCode
    END
    RETURN SQLITE_OK

SchLiteClass.InsertDay              PROCEDURE(SHORT DaySeqNumber, STRING DayName)
  CODE
    self.SQL = Insert & CLIP(Tables[1]) & ' (SeqNumber, Name) VALUES (' |
             & DaySeqNumber & ', ' & self.PrepareString(DayName) |
             & ');'
    RETURN self.ExecSQL(1)

SchLiteClass.InsertLessonBell       PROCEDURE(STRING LessonNo, STRING Begining, STRING Ending)
  CODE
    self.SQL = Insert & CLIP(Tables[2]) & ' (LessonNo, Begining, Ending) VALUES (' |
             & self.PrepareString(LessonNo) & ', ' & self.PrepareString(Begining)  & ', ' & self.PrepareString(Ending) |
             & ');'
    RETURN self.ExecSQL(2)
! 8< Skip >8

WBR, Nikolay Tsigouro

20 ноября 2014 г., 14:06 пользователь Вячеслав Черников <fins...@gmail.com> написал:
Ага, с кодировками в классе были траблы. Я не стал вникать, что там Тейлор накрутил и использую отдельный класс (если не ошибаюсь, Юры Философова).

Alexander Stepanets

unread,
Dec 23, 2014, 12:59:39 AM12/23/14
to cla...@googlegroups.com
22.12.2014 23:07, Nikolay Tsigouro пишет:
> Всем привет!
>
> Выдалось тут внезапно немного свободного времени и поюзал я SQLite3 и
> класс SQLiteType, что ВЧ поделился.
> Вот и я решил от нечего делать (лежу на койке) поделиться своим опытом.
> Может кому пригодится.
>
> Как я уже писал, оригинальный класс оставляет желать лучшего в части
> работы с кодовыми страницами.
> Поэтому первая доработка касалась этого момента.
> Я добавил в оригинальную декларацию свойство
>
> CodePage Long
>
> , объявил константу
>
> CP_1251 EQUATE(1251)
>
> , заменил в clw в коде методов CP_ACP на Self.CodePage, и добавил в
> конструктор инициализацию:
>
> Self.CodePage = CP_1251
> Все прекрасно заработало без привлечения Cstr. Есть только один момент.
> При открытии БД (метод SQLiteType.OpenDB Procedure(String pDBName))
> делается преобразование имени файла в UTF-8
>
> Self.ACPtoUTF8(Self.DBName)
> По видимому, это нужно для SQLite3.dll. И вот тут возникает ошибка если
> в спецификации файла есть кириллица.

"Note to Windows users: The encoding used for the filename argument of
sqlite3_open() and sqlite3_open_v2() must be UTF-8, not whatever
codepage is currently defined. Filenames containing international
characters must be converted to UTF-8 prior to passing them into
sqlite3_open() or sqlite3_open_v2().

Note to Windows Runtime users: The temporary directory must be set prior
to calling sqlite3_open() or sqlite3_open_v2(). Otherwise, various
features that require the use of temporary files may fail."

https://www.sqlite.org/c3ref/open.html



Alexander Stepanets

unread,
Dec 23, 2014, 1:08:17 AM12/23/14
to cla...@googlegroups.com
23.12.2014 15:58, Alexander Stepanets пишет:
Ещё вот тут про кодировки в SQLite написано по-русски:
http://habrahabr.ru/post/150543/


Nikolay Tsigouro

unread,
Dec 23, 2014, 4:31:02 PM12/23/14
to ClaList
Спасиб. Статья интересная, если пользовать SQLite под виндой, что для меня мало вероятно ;-)

Там почему-то возникает ошибка в WideCharToMultiByte - ERROR_INSUFFICIENT_BUFFER
с выводом сообщения 

    Message('The data area passed to a system call is too small.','WideCharToMultiByte')

т.е. на втором шаге преобразования.
И в то-же время преобразование self.SQL в методе Exec проходит без сучка и задоринки... 8-(

ЗЫ. Кстати решение ВЧ с комментированием этих функций не должно работать с кириллическими именами файлов, т.к. в они пойдут в SQLite3.dll не в UTF8. Имена файлов тоже нужно дополнительно перекодировать.

WBR, Nikolay Tsigouro

23 декабря 2014 г., 9:08 пользователь Alexander Stepanets <clal...@partizansk.com> написал:
23.12.2014 15:58, Alexander Stepanets пишет:
22.12.2014 23:07, Nikolay Tsigouro пишет:
Все прекрасно заработало без привлечения Cstr. Есть только один момент.
При открытии БД (метод SQLiteType.OpenDB Procedure(String pDBName))
делается преобразование имени файла в UTF-8

     Self.ACPtoUTF8(Self.DBName)
По видимому, это нужно для SQLite3.dll. И вот тут возникает ошибка если
в спецификации файла есть кириллица.
Ещё вот тут про кодировки в SQLite написано по-русски: http://habrahabr.ru/post/150543/

Alexander Stepanets

unread,
Dec 23, 2014, 4:51:00 PM12/23/14
to cla...@googlegroups.com
24.12.2014 07:31, Nikolay Tsigouro пишет:
> Спасиб. Статья интересная, если пользовать SQLite под виндой, что для
> меня мало вероятно ;-)

Да, я именно так и подумал, взглянув на приведённый тобой исходный
текст... :))

> Там почему-то возникает ошибка в WideCharToMultiByte -
> ERROR_INSUFFICIENT_BUFFER
> с выводом сообщения
>
> Message('The data area passed to a system call is too
> small.','WideCharToMultiByte')
>
> т.е. на втором шаге преобразования.
> И в то-же время преобразование self.SQL в методе Exec проходит без сучка
> и задоринки... 8-(
>
> ЗЫ. Кстати решение ВЧ с комментированием этих функций не должно работать
> с кириллическими именами файлов, т.к. в они пойдут в SQLite3.dll не в
> UTF8. Имена файлов тоже нужно дополнительно перекодировать.

Насколько я понимаю, ключевое в "SQLite3.dll" — именно "SQLite3", а
вовсе не "dll". :)

Проблемы должны возникать при работе с не-UTF кодировками и в связи с
внутренними особенностями SQLite при работе с разными UTF...


Reply all
Reply to author
Forward
0 new messages