dbGrid 1.8rc1 показывает другие данные чем в 1.6

Вопросы программирования и использования MSEide + MSEgui.

Модератор: Модераторы

dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение t-ea » 08.07.2008 22:44:52

Скачал я 1.8rc1 и был неприятно удивлён. Стало мне уже не до печати.
tdbStringGrid показывает «кракрозяблики», в то время как версия 1.6 показывала всё хорошо.
Внизу два снимка экрана, один то что показывает программа скомпилированная в версии 1.6, другой соответственно 1.8rc1. В самом проекте ничего не менялось. На форме находятся пять компонентов: tmseODBConnection, tmseSQLTransaction, tmseSQLQuery, tmseDataSource и tdbStringGrid.
ODBC драйвер используется родной Microsoft'овский, но думаю это не из-за него, т.к. 1.6 всё показывает правильно.
Что делать?
Вложения
v18rc1.png
Версия 1.8rc1 (как стало)
v18rc1.png (3.3 КБ) Просмотров: 32058
v16.png
Версия 1.6 (как надо, как было…)
v16.png (5.35 КБ) Просмотров: 32062
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение debi12345 » 09.07.2008 09:51:07

У Вас в БД данные в какой кодировке хранятся ?
Если в юникоде, то :

- скажите об этом MSE*, через {connection.controller.options:= dbo_utf8} и/или {query.controller.options:= dso_utf8}
( не пристало MSE* искать способ узнавать внутренние кодировки БД - слишком это зависит от текущей реализации БД )

если нет и кодировка БД отличается от кодировки GUI операционной системы ( вроде БД=koi8 vs гэймшеллка=cp1251), то :

- придется искать способ скормить в настройках соединения что-то типа "CLIENT_ENCODING=win" ( использую такое для PostgreSQL в Дельфях )

Параметр Charset ODBC-соединения по идее фикция ( не по вине MSE* ) и работать не должен ( хотя не проверял).

Добавлено спустя 1 час 2 минуты 35 секунд:
Кстати, ODBC-механизм в MSE* никто пока конкретно не использовал и потому не протестировал в деле (Мартин вообще удивился - нафига, думаю потому, если есть ZeosDBO ) - поэтому может уйти несколько дней на вылизывание. Например, у меня таблица M$ Access OLEDB 4.0 вообще не открывается.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение t-ea » 09.07.2008 13:46:58

Работаю в Windows XP SP2, естественно 1251 кодовая страница.
Сейчас попробовал три ODBC-соединения (все являются системными):
1. Firebird 1.5: кодировка cp1251, — данные показываются неправильно.
2. MS Visual FoxPro: кодировка cp866 — данные показываются неправильно (картинка выше).
3. MS SQL Server 200(предпоследний): кодировку не знаю — данные показыаются правильно.

И ещё раз повторю на всякий случай: ничего не меняя в проекте, компилирую программу версией 1.6, всё замечательно показывается.
Насколько я заметил, MSE показывает первые два-три символа каждого поля правильно, а вот потом что-то где-то не так. В моём примере это видно по полям SOCR, CODE, в NAME тоже самое, но первых символов там не видно, так как содержимое ячейки отображается в несколько строк.

Сразу добавлю, о чём хотел спросить чуть позднее.
Основная рабочая база на MS SQL-Server. В моих попытках освоить MSE, всяких проб и экспериментов, делал простую форму, точно так же ODBC, Transaction, Query и Grid. Всё работает.
После этого, при попытке добавления на форму нескольких компонентов tmse*field драйвер ODBC начинал сообщать о раззных ошибках: то неверный дескриптор, то «25678.17684.89144» не явлется правильным числом (сами цифры и тект последнего сообщения точно не помню но смысл такой).
Сейчас у меня на форме лежит пять stringfield'ов, один из них не подключен — всё работает, подключаю пятый — получаю ошибку «неверный дескриптор», т.е. я даже в design-time не могу активировать SQLQuery.

Без ODBC мне не обойтись, есть одна старая база с которой можно работать только через так.

Попробую сегодня узнать в какой кодировке хранятся данные на MS SQL Server (знать бы как) и вечером опишу подробнее все свои настройки.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение Sergei I. Gorelkin » 09.07.2008 14:22:54

Сдается мне, что цифры в последнем столбце должны отображаться корректно вне зависимости от кодировок. Т.е. бага не в кодировках (или не только в них)
Аватара пользователя
Sergei I. Gorelkin
энтузиаст
 
Сообщения: 1406
Зарегистрирован: 24.07.2005 14:40:41
Откуда: Зеленоград

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение debi12345 » 09.07.2008 14:38:02

Работаю в Windows XP SP2, естественно 1251 кодовая страница.
Сейчас попробовал три ODBC-соединения (все являются системными):
1. Firebird 1.5: кодировка cp1251, — данные показываются неправильно.
2. MS Visual FoxPro: кодировка cp866 — данные показываются неправильно (картинка выше).
3. MS SQL Server 200(предпоследний): кодировку не знаю — данные показыаются правильно.
...

Повторяюсь, не завязывайтесь на ODBC ) - он о-о-чень сырой (причем не в MSE*, а в FPC SQLDB - которым MSE старется по-возможности, там где нет глюков, пользоваться ). Мартин вообще удивился, что что-то когда-то там работало.
Взамен этого есть статическая библиотека ZeosDBO - поддерживающая в том числе все основные коммерческие бэкэнды. В MSE* встраивается и работает без проблем. Поддерживают ее толковые и серьезные ребята. Детали - см. "zeos.txt" в корне MSE* SVN. Мелкий минус Zeos - не все суперфишки MSE*-компонентов на ней возможны, но ничего не падает и не сыплет исключениями.

Если все равно ODBC необходим в чистом виде - придется несколько дней усилено тестить, слать тесткэйсы Мартину, вести сним конкретный диалог ( на английском ). Один проблемный тесткэйс по этой теме ( доступ к таблицам M$ Access OLEDB 4.0 ) Мартину уже выслан.

ПС:
По любому, если нужна безглючная работа с БД через нативные библиотеки на уровне БД-компонентов без тупого кодирования, то альтернативы MSE* пока но видно - ессно, в части вылизанных бэкэндов ( PostgreSQL = аналог оракла, мартиновский фаворит FireBird, мой обожаемый SQlite3, memdataset=local_mode). Другие бэкенды тоже будут незамедлительно вылизаны - но только с серьезной помощью тех, кому он понадобятся. Например,MySQL пока не идеален - потому никто пока серьезных ( из реальной жизни ) проектов на нем не делал.

Добавлено спустя 1 час 43 минуты 40 секунд:
От Мартина к @t-ea (freepascal.ru):
----------
Please send a testcase with small database and info where to get the ODBC
driver and how to setup the environment. I don't have a newer MS-Access
installation.
----------
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение Vadim » 09.07.2008 17:09:21

Если речь идёт о MS SQL 2000, то кодировка базы, с 99% вероятности, cp1251.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение Brainenjii » 09.07.2008 17:34:54

[offtop]
t-ea: Здравствуйте, почему в версии 1.6 крякозябр не было, а в 1.8 - есть?
debi12345: Попробуйте указать UTF8 в подключении к базе, а вообще, ODBC очень кривой сам по себе
t-ea: я не знаю, какая кодировка, но почему в версии 1.6 не было НИ ЕДИНОЙ крякозябры, а в 1.8 - сразу в 2 базах!
debi12345: ODBC очень кривой, не используйте его
t-ea: ВЫ НЕ ОТВЕЧАЕТЕ НА МОЙ ОТВЕТ!
[/offtop]
^_^ Извините, напомнило и не сдержался ^_^
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение Vadim » 09.07.2008 18:16:43

t-ea
Напишите здесь, пожалуйста, основные настройки Вашего tmseODBConnection.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение debi12345 » 09.07.2008 18:39:45

t-ea: я не знаю, какая кодировка, но почему в версии 1.6 не было НИ ЕДИНОЙ крякозябры, а в 1.8 - сразу в 2 базах!
..
Мартин вообще удивился, что что-то когда-то там работало.
..
он о-о-чень сырой (причем не в MSE*, а в FPC SQLDB -

Здрасте, в двух соснах заблудились...
100% кое-что в FPC "подправили", и оно перестало координироваться с MSE*. И вероятно, что в готовом бинарнике 1.6 было зашито еще "правильное" состояние FPC. А рекоординацией Мартин не занимался из-за остсутствия заявок и собственной надобности в ODBC.

ПС:
Приглашаем на ньюс-конференцию "public.mseide-msegui.talk" на сервере "news.grid-sky.com". Хоть и тюремное название ( "небо в клеточку" ) - но народ там не кусачий. ПроЯвите профессионализм и терпение, помогая вылизать ODBC - большое дело сделаете.

Добавлено спустя 4 часа 27 минут 23 секунды:
Мартин с моим тескэйсом получил нормальную кириллицу даже на своей латинской локали.
БД в ODBC-тесткэйсе - M$ Access из M$ Office 2003, внутреннее хранение = юникод,
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение t-ea » 10.07.2008 02:23:30

Про MS SQL ничего не узнал… если нужно будет, то завтра расскажу.
Насколько я понял проблема возникает с полями типа CHAR, с VARCHAR всё нормально.
Ниже снимки экрана, и на всякий случай, три базы — GDB, DBF в cp866 и DBF в 1251.

Firebird ODBC Drivers 1.2.1 (1.2.0.69)
Visual FoxPro ODBC Driver

Добавлено спустя 4 минуты 11 секунд:
продолжение…

Добавлено спустя 2 минуты 3 секунды:
Настройки ODBC:
Вложения
dbfODBC.png
Visual FoxPro ODBC
dbfODBC.png (6.7 КБ) Просмотров: 31874
fbODBC.png
Firebird ODBC
fbODBC.png (5.52 КБ) Просмотров: 31875
fbdata.png
Данные базы Firebird
fbdata.png (9.92 КБ) Просмотров: 31867
fbstruc.png
Структура базы Firebird
fbstruc.png (11.49 КБ) Просмотров: 31868
run.png
Окно программы
run.png (5.93 КБ) Просмотров: 31874
design.png
Проектирование
design.png (8.34 КБ) Просмотров: 31882
tc.zip
Тестовый проект
(6.86 КБ) Скачиваний: 583
db.zip
Тестовые базы
(39.67 КБ) Скачиваний: 572
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение Vadim » 10.07.2008 06:11:11

t-ea
Всё запуталось ещё больше. :)
Давайте, для начала, определимся, с каким именно типом базы данных Вам нужно работать через ODBC. Иначе никаких толковых советов Вы не дождётесь. ;)
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение debi12345 » 10.07.2008 12:48:25

Насколько я понял проблема возникает с полями типа CHAR, с VARCHAR всё нормально.

От Мартина :

svn trunk 2356
* ODBC SQL_CHAR mapped to ftstring.

Перепроверьте !

Добавлено спустя 3 минуты 10 секунд:
Рекомендую создать тестовую таблицу со всеми возможными для ODBC типами данных, включая бинарные и блобы - и на ней добиться корректных записи/чтения. Именно на таком тесткэйсе, так мы добились 100% рабочего SQLIite3.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение t-ea » 10.07.2008 20:02:20

Да, теперь всё стало как и раньше…

Vadim писал(а):t-ea
… с каким именно типом базы данных Вам нужно работать через ODBC…

Не уверен что правильно понял вопрос, но: MS SQL и DBF.
t-ea
новенький
 
Сообщения: 98
Зарегистрирован: 22.09.2006 00:22:34

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение Vadim » 11.07.2008 06:06:08

t-ea писал(а):Не уверен что правильно понял вопрос, но: MS SQL и DBF.

Совершенно правильно. Это и требовалось. :)
По поводу DBF.
А Вы не хотите для общения с DBF использовать класс, который уже есть в FreePascal под названием TDBF? Работает быстрее, чем через ODBC. Правда там нет поддержки SQL-запросов. Преимущество в том, что Вам не надо будет делать настройки доступа к данным в двух разных - в Администраторе ODBC и в Вашей программе, все настройки нужно будет сделать только в Вашей программе.
Vadim
долгожитель
 
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Re: dbGrid 1.8rc1 показывает другие данные чем в 1.6

Сообщение debi12345 » 11.07.2008 08:06:49

FreePascal под названием TDBF

Если не нужно адаптировать имеющиеся DBF БД, а нужно просто маленькая сверхбыстрая БД для новых проектов - рекомендую SQlite3. Самое главное - к нему есть SQL-доступ.
Аватара пользователя
debi12345
долгожитель
 
Сообщения: 5761
Зарегистрирован: 10.05.2006 23:41:15
Откуда: Ташкент (Узбекистан)

След.

Вернуться в MSEide + MSEgui

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Рейтинг@Mail.ru