Поиск:

Ответ в темуСоздание новой темы Создание опроса
> SQLite - знаки вопроса вместо букв, вместо русских букв знаки '????????????' 
V
    Опции темы
CompWorm
Дата 24.5.2010, 17:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



задача аналогична описаной ТУТ
работаю с проектом, который изначально писался на Delphi2009

новая связка Delphi7+SQLite3...

БД в юникоде, экспортирую так примерно:
Код

result := Utf8Decode(SQLTable.FieldAsString(SQLTable.FieldIndex['Name']));

в ответ знаки вопроса ????????? вместо русских букв...
пробовал вместо Utf8Decode (который у меня шикарно справлялся с задачей в D2009) пользоваться вот этими костылями результат ткой же. ANSIToUTF8 и UTF8ToANSI вообще ничего не делают. так крокозяблы и выводят.

может тут UTF16 какой-нибудь? или может как-то перекодировать в самом SQLite?  smile 


--------------------
PM MAIL   Вверх
CompWorm
Дата 25.5.2010, 09:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



Цитата(CompWorm @  24.5.2010,  17:12 Найти цитируемый пост)
может тут UTF16 какой-нибудь? или может как-то перекодировать в самом SQLite?  smile  

цитирую сам себя  smile  
- проверил, нет, тут я был не прав. SQLite работает только с UTF... в настройках базы у меня выставлен UTF8 


есть другие идеи?


--------------------
PM MAIL   Вверх
yogi89
Дата 25.5.2010, 11:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.7.2008
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



Уверен, что сами данные в базе не хранятся криво? Можно проверить, сделав выборку строк без преобразования Utf8ToAnsi или Utf8Decode, либо через командную оболочку скулайта, перед запуском которой задать кодировку chcp 65001.

Задать принудительно кодировку SQLite можно запросом PRAGMA encoding="UTF-8"
PM Jabber   Вверх
CompWorm
Дата 25.5.2010, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



уверен. в базе русские буквы есть. именно эта база работает описанным выше способом в D2009. проблема в том, что D7 не дружит с UTF так как более поздняя D2009...

я попробовал выполнить предложенную Вами команду
PRAGMA encoding="UTF-8"
PRAGMA encoding="chcp 65001"
PRAGMA encoding="cp1251"
эффекта нет. если зайти на закладку настроек бд в оболочке, то там неизменно стоит UTF-8 в качестве кодировки... даже если попытаться сменить на UTF-16... меняется только на закладке настроек (действительно, этой командой!)

всё равно, спасибо за попытку. 
есть ещё какие-то идеи?

Это сообщение отредактировал(а) CompWorm - 25.5.2010, 15:42


--------------------
PM MAIL   Вверх
yogi89
Дата 28.5.2010, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 8
Регистрация: 3.7.2008
Где: Южно-Сахалинск

Репутация: нет
Всего: нет



Цитата(CompWorm @  25.5.2010,  15:36 Найти цитируемый пост)
PRAGMA encoding="chcp 65001"

Не правильно меня поняли. chcp 65001 - команда для CMD, меняющая кодовую на UTF8. После, можно запустить оболочку скулайта и русские строчки будут выводиться, как надо.. Можно так проверить, действительно ли в базе данные хранятся не криво..

Цитата(CompWorm @  25.5.2010,  15:36 Найти цитируемый пост)
PRAGMA encoding="cp1251"

cp1251 - не поддерживается вообще скулайтом. 

Странно, почему не работает функция Utf8ToAnsi.  Проверил у себя(правда, на 2010х делфях) - все прекрасно преобразовывается... 



PM Jabber   Вверх
Akella
Дата 28.5.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Цитата(CompWorm @  24.5.2010,  17:12 Найти цитируемый пост)
новая связка Delphi7+SQLite3...

SQLite3 - это такие компоненты доступа?
PM MAIL   Вверх
AntonN
Дата 28.5.2010, 23:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: нет
Всего: 18



Это встраиваемая база данных, без всяких провайдеров и датасетов


--------------------
user posted image
PM MAIL WWW   Вверх
Akella
Дата 29.5.2010, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Т.е. компонента TDataSource сразу цепляется к базе??? Круто!
PM MAIL   Вверх
CompWorm
  Дата 30.5.2010, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



Akella, ммм... там конечно есть DISQLite3DataSetImporter, но скрестить его с TDataSource у меня не особо получилось... любопытно, надо почитать на эту тему)) 

в основном подход такой:
Код

var sltb:TSQLiteTable;
sldb := TSQLiteDatabase.Create('test.db');
...
    sltb := sldb.GetTable('select бла бла бла ... "');
    for i := 0 to sltb.Count - 1 do
      begin
        бла бла := sltb.FieldAsString(0));
        sltb.Next;
      end;

... всё круто, но ведать только для D2007 и старше. судя по отзывам в инете с D7 проблемы((( с оператороми сортировки особо изощрённые чудеса))

у меня назрел вопрос, а нет отдельного модуля для работы с UTF8 для D7... может кто пытался выковыривать код из старших версий дельфи? дело в том, что этот же код с этой же БД скомпилированный под D2009 работает на ура...



--------------------
PM MAIL   Вверх
Демо
Дата 30.5.2010, 21:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 2
Всего: 50



Цитата(CompWorm @  30.5.2010,  19:04 Найти цитируемый пост)
... всё круто, но ведать только для D2007 и старше. судя по отзывам в инете с D7 проблемы(((


Работаю в D6 с SQLite.
Проблем никаких.

Обёртка в приложенном файле. Добавляю свою надстройку над обёрткой и всё.

Добавлено @ 21:11
Цитата(Akella @  29.5.2010,  10:01 Найти цитируемый пост)
Т.е. компонента TDataSource сразу цепляется к базе??? Круто!


SQLite предоставляет только API для доступа к БД.

Это сообщение отредактировал(а) Демо - 30.5.2010, 23:35

Присоединённый файл ( Кол-во скачиваний: 30 )
Присоединённый файл  sqlite3.zip 212,46 Kb


--------------------
    
PM MAIL ICQ Skype   Вверх
AntonN
Дата 30.5.2010, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 491
Регистрация: 8.8.2006

Репутация: нет
Всего: 18



Akella, нет там этих вещей, запросы через импортируемые из dll процедурки уходят.
Довольно удобно smile


--------------------
user posted image
PM MAIL WWW   Вверх
CompWorm
  Дата 31.5.2010, 11:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



Демо, я пользуюсь именно этой обёрткой.

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

Присоединённый файл ( Кол-во скачиваний: 29 )
Присоединённый файл  D7.rar 185,34 Kb


--------------------
PM MAIL   Вверх
Демо
Дата 31.5.2010, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 2
Всего: 50



Цитата(CompWorm @  31.5.2010,  11:33 Найти цитируемый пост)
если кому не лень, запустите у себя примерчик и скажите, есть у вас русские символы или нет.


Только вечером дома...

Добавлено через 6 минут и 10 секунд
CompWorm

А почему такой выбор - кодирование в UTF-8?


--------------------
    
PM MAIL ICQ Skype   Вверх
Akella
Дата 31.5.2010, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 29
Всего: 329



Да знаю я.
Я просто своим вопрос хотел намикнуть на то, что CompWorm не указал компоненты доступа. А ещё он не указал, поддерживают ли они анси или там юникод.
PM MAIL   Вверх
CompWorm
Дата 31.5.2010, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Допеределыватель
***


Профиль
Группа: Участник Клуба
Сообщений: 1689
Регистрация: 6.12.2004
Где: /

Репутация: нет
Всего: 31



Демо, по умолчанию это основная кодировка в скулайте. есть ещё всякие UTF-16, UTF-16le, UTF-16be...  других не вижу... а вы какой рекомендуете пользоваться?


--------------------
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Базы данных и репортинг"
Vit
Петрович

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами


Обязательно указание:

1. Базы данных (Paradox, Oracle и т.п.)

2. Способа доступа (ADO, BDE и т.д.)


  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • Вопросы по SQL и вопросы по базам данных не связанные с Дельфи задавать здесь

FAQ раздела лежит здесь!


Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Vit, Петрович.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Базы данных и репортинг | Следующая тема »


 




[ Время генерации скрипта: 0.0932 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.