Поиск:

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


Эксперт
***


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

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



Цитата(CompWorm @  31.5.2010,  20:04 Найти цитируемый пост)
Демо, по умолчанию это основная кодировка в скулайте


У меня по-умолчанию Win1251.

Добавлено через 1 минуту и 29 секунд
Поэтому просто никаких проблем не возникает.

Добавлено через 4 минуты и 13 секунд
CompWorm

Как добавляешь строки в базу?


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


Эксперт
***


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

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



Если писать без всякой перекодировки, то и читается всё нормально.

Кстати, вот эти 2 строки

Код

      MainGrid.Cells[0, SQLtb.Row+1] := Utf8Decode(SQLtb.FieldAsString(SQLtb.FieldIndex['name']));
      MainGrid.Cells[1, SQLtb.Row+1] := Utf8toansi(SQLtb.FieldAsString(SQLtb.FieldIndex['name']));


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


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


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


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

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



Цитата(Демо @  31.5.2010,  20:56 Найти цитируемый пост)
Кстати, вот эти 2 строки
...
 твою первую запись из таблицы показывают нормально. 

 smile чудесааа....

не представляю в чём тогда проблема... может с виндой что не так? хмм... ну попробую сегодня поставить дельфи7 на другой машине... я в шоке  smile

Добавлено через 4 минуты и 37 секунд
Цитата(Демо @  31.5.2010,  20:36 Найти цитируемый пост)
У меня по-умолчанию Win1251.

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


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


Творец
****


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

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



CompWorm, по-моему, ты уже запутался в кодировках. Я бы на твоем месте взял и привёл всё к единой кодировке. И данные, и базу, и подключение, и среду разработки, и компоненты доступа %)
PM MAIL   Вверх
CompWorm
Дата 2.6.2010, 16:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Демо
большое спасибо за помощь+! я попробовал программно заносить данные без кодирования в UTF и всё нормально заработало....

ЗЫ если зайти в базу через приблуду, то русский текст отображается кракозяблами типа
Цитата

��������!

но в проге работает на ура!  smile 

не понятно только почему мой код у вас сработал с моей базой...  smile 


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


Новичок



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

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



Цитата
я попробовал программно заносить данные без кодирования в UTF и всё нормально заработало....

Тогда не работает русский поиск через LIKE.
А если при записи в базу кодировать в UTF, то русский поиск работает, НО регистрозависимо.
Как сделать чтобы и кодировать ни надо было(ибо база разбухает от этого гребаного UTF) и поиск русских слов нормально работал, причем регистронезависимо?!
Помогите!

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


Творец
****


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

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



что-то типа
Код
select id from table1 where UPPER(name) = 'ВАСЯ'


Ищи в SQLite функцию UPPER
PM MAIL   Вверх
hhhhhhhhhhhh
Дата 24.3.2011, 10:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Спасибо за наводку! Вроде разобрался!

Вот здесь есть пример с текстовым полем.
http://forum.sources.ru/index.php?showtopic=294492

Я лиш добавлю на всякий случай пример с блобовым полем
Код

Регистрируем нашу функцию
sqlite3_create_function(db.fDB, 'UPPER', 1, SQLITE_UTF8, nil, MyUpperFunc, nil, nil);

const
  SQLITE_UTF8  = 1;

type
  TFuncHandler=procedure(pCtx: pointer; nArgs: Integer; Args: PPChar); cdecl;
  TFuncFinalizer=procedure(context:pointer); cdecl;

function sqlite3_create_function(db:pointer; zFunctionName:pchar; nArg:integer;  eTextRep:integer;  userData:pointer;  xFunc,  xStep:TFuncHandler;  xFinal:TFuncFinalizer):integer; cdecl; external SQLITEDLL;
function sqlite3_value_blob(value: Pointer): Pointer; cdecl; external SQLiteDLL name 'sqlite3_value_blob';
function sqlite3_value_bytes(value: Pointer): integer; cdecl; external SQLiteDLL name 'sqlite3_value_bytes';
function sqlite3_value_type(value: pointer): integer; cdecl; external SQLiteDLL name 'sqlite3_value_type';
procedure sqlite3_result_blob(sqlite3_context: pointer; value: Pointer;
                             n: integer; destroy: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_blob';
procedure sqlite3_result_null(sqlite3_context: pointer); cdecl; external SQLiteDLL name 'sqlite3_result_null';

var MyUpperBuf: String;
procedure MyUpperDisposeProc(ptr: pointer); cdecl;
begin
  MyUpperBuf := '';
end;

procedure MyUpperFunc(pCtx: pointer; nArgs: Integer; Args: PPChar); cdecl;
var Buf: PChar;
begin
  case sqlite3_value_type(Args^) of
    SQLITE_NULL: sqlite3_result_null(pCtx);
    SQLITE_BLOB:       
      begin
        Buf := sqlite3_value_blob(Args^);
            SetString(MyUpperBuf, Buf, sqlite3_value_bytes(Args^));
            StrDecompress(MyUpperBuf);
        CharUpperBuff(PChar(MyUpperBuf), Length(MyUpperBuf));
             // возвращаем в UTF ! похоже сравнение идет ТОЛЬКО В UTF
        MyUpperBuf := AnsiToUtf8(MyUpperBuf);
           sqlite3_result_blob(pCtx, PChar(MyUpperBuf), Length(MyUpperBuf), @MyUpperDisposeProc)
      end;
    else
      sqlite3_result_null(pCtx);
  end;
end;


запрос делаем чере UPPER приводя к UTF
Код
where ' +  'UPPER(colname) like "%' + AnsiToUtf8(AnsiUpperCase(ComboBox1.Text)) + '%"'));


ну и сортируем тоже через нашу функцию ORDER BY UPPER(colname) 

пс. строки в базу пишем без кодировки, база не распухает от UTF!  8D 
PM MAIL   Вверх
Akella
Дата 24.3.2011, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



Цитата(hhhhhhhhhhhh @  24.3.2011,  10:27 Найти цитируемый пост)
ORDER BY UPPER(colname)

а зачем при сортировке UPPER?
PM MAIL   Вверх
hhhhhhhhhhhh
Дата 24.3.2011, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(Akella @  24.3.2011,  12:13 Найти цитируемый пост)
а зачем при сортировке UPPER?

Танцы с бубнами показали  ;) 

PM MAIL   Вверх
Akella
Дата 24.3.2011, 13:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


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

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



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


Новичок



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

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



Ну, оказывается, русская сортировка тоже не работает без нашей UPPER функции

а вообще да, надо попробовать заюзать индексы для сортировки...

Это сообщение отредактировал(а) hhhhhhhhhhhh - 25.3.2011, 14:27
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.0831 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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