Форум программистов, компьютерный форум CyberForum.ru

SQLite3 с поддержкой кириллицы - Lazarus

Восстановить пароль Регистрация
 
mrkaban
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 30
10.01.2017, 19:40     SQLite3 с поддержкой кириллицы #1
Здравствуйте, Уважаемые форумчане!

Сразу хочу сказать, что я новичок!

В SQLite3 с Lazarus есть какие-то проблемы с поддержкой кириллицы? Как её можно решить? Кто-то мне говорил, что есть какие-то специальные сборки для работы с кириллицей.

Заранее благодарен!
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Kitayets
296 / 249 / 48
Регистрация: 09.09.2011
Сообщений: 837
10.01.2017, 23:02     SQLite3 с поддержкой кириллицы #2
ммм. нет вроде никаких проблем в этом плане. Возьми, набросай тестовый пример и проверь. делов на пару часов...
mrkaban
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 30
11.01.2017, 02:42  [ТС]     SQLite3 с поддержкой кириллицы #3
В том то и дело, что в моем случае не получается найти в базе кириллицу. Использую name lake. После работы смогу показать код процедуры.

Спасибо за ответ!
edukra
425 / 408 / 118
Регистрация: 24.01.2012
Сообщений: 986
11.01.2017, 11:42     SQLite3 с поддержкой кириллицы #4
Если база создавалась в другой программе, то непонятно, какая там кодировка. А если программой на Lazarus, то с кодировкой проблем нет. Только, что проверил такой запрос
SQL
1
SELECT * FROM   sotrudniki WHERE имя LIKE 'Василий'
и он отработал правильно.
mrkaban
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 30
11.01.2017, 16:20  [ТС]     SQLite3 с поддержкой кириллицы #5
Точно! Спасибо Вам большое!

Наверное проблема с StringList, подскажите пожалуйста, может быть такое? Если Вы могли бы посмотреть, я покажу процедуру
mrkaban
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 30
11.01.2017, 16:50  [ТС]     SQLite3 с поддержкой кириллицы #6
Я уже даже TStringListUTF8 поставил, но не помогает =( Вместо кириллицы вопросы =(((

SQLite3 с поддержкой кириллицы

Может кто нибудь сможет посмотреть?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
procedure TfMian.mBeginSerchClick(Sender: TObject);
var
   MyList: TStringListUTF8;     // для хранения названий ключей реестра
   MyRegistry: TRegistry;     // MyList2 глобальная переменная!, тоже TStringListUTF8
     s: string;
     i : integer;
 //     p: Integer;
   Str: string;
     N:integer;        // для записи в базу списка
begin
Cursor:= crHourGlass;
 bSearch.Visible:=False;    //скрываем кнопку начать поиск
      // очищаем старое содержимое
        SQLQuery1.Close;                               // очистка таблицы в базе, в которую
        SQLQuery1.SQL.Text := 'delete from install';    //  записывается список программ
        SQLQuery1.ExecSQL;
        SQLTransaction1.CommitRetaining;
 
  MyList2:=TStringListUTF8.Create;
 MyRegistry:=TRegistry.Create(KEY_WOW64_64KEY);
 MyList:=TStringListUTF8.Create;
 
 
  with MyRegistry do
        begin
        RootKey:=HKEY_LOCAL_MACHINE;
        OpenKeyReadOnly('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\');
        GetKeyNames(MyList);
        CloseKey;
        for i:=0 to MyList.Count-1 do
           begin
           RootKey:=HKEY_LOCAL_MACHINE;
           OpenKeyReadOnly('Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall\'+
           MyList[i]);
           Str:=ReadString('DisplayName');
           if Str<>'' then
           MyList2.Add(ReadString('DisplayName'));
           CloseKey;
           end;
 
        RootKey:=HKEY_LOCAL_MACHINE;
        OpenKeyReadOnly('Software\Microsoft\Windows\CurrentVersion\Uninstall\');
        GetKeyNames(MyList);
        CloseKey;
        for i:=0 to MyList.Count-1 do
           begin
           RootKey:=HKEY_LOCAL_MACHINE;
           OpenKeyReadOnly('Software\Microsoft\Windows\CurrentVersion\Uninstall\'+
           MyList[i]);
           Str:=ReadString('DisplayName');
           if Str<>'' then
           MyList2.Add(ReadString('DisplayName'));
           CloseKey;
           end;
          end;
 
 
  SQLQuery1.Close;
  SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.Add('insert into install(text)');     //    Запись полученного списка прог в базу
  SQLQuery1.SQL.Add('Values (:pText)');
  for N := 0 to MyList2.Count - 1 do
  begin
    SQLQuery1.ParamByName('pText').AsString := MyList2[N];
    SQLQuery1.ExecSQL;
  end;
  SQLTransaction1.CommitRetaining;
 
   //новый вариант
  SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Text:='select text from install';
SQLQuery1.Open;
SQLQuery1.First;
MyList2.clear;                   // пытался из базы получать список прог
while not SQLQuery1.Eof do
begin
  MyList2.Add(SQLQuery1.FieldByName('text').AsString);
  SQLQuery1.Next;
end;
SQLQuery1.Close;
 
 
 
 
  MyList2.Text  := StringReplace(MyList2.Text, '"', ' ', [rfReplaceAll, rfIgnoreCase]);
       with MyList2.Create do
  try
    MyList2.StrictDelimiter := true;
    //пробую удалить кавычки
 MyList2.Text  := StringReplace(MyList2.Text, ' " ', ' ', [rfReplaceAll, rfIgnoreCase]);
 
    s := '';
    for i := 0 to MyList2.Count - 1 do if Trim(MyList2.Strings[i]) <> '' then
      s := s + Format('%s(name LIKE "%s")', [IfThen(i = 0, '', ' OR '), MyList2.Strings[i]]);
    s := 'SELECT * FROM program WHERE ' + s + ' ORDER BY id';
  finally
  //  Free; MyList2 глобальная переменная!
  end;
 
 
  // всё, в s хранится запрос, его и используй для получения данных из БД
  Showmessage(s);
 
// s := 'SELECT * FROM program WHERE (name LIKE "ДубльГис")'; для проверки работы кириллицы!
  MyList.Free;
SQLQuery1.Close;
SQLQuery1.Active:=false;
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add(s);
SQLQuery1.Active:=true;
SQLQuery1.Open;
 
            //заполняем заголовки колонок и меняем ширину колонок
DBGrid1.Columns[1].Title.Caption:='Название';
DBGrid1.Columns[2].Title.Caption:='Тип ПО';
DBGrid1.Columns[3].Title.Caption:='Лицензия';
DBGrid1.Columns[4].Title.Caption:='Стоимость';
DBGrid1.Columns[5].Title.Caption:='Замена';
DBGrid1.Columns[1].Width:= 200;
DBGrid1.Columns[2].Width:= 150;
DBGrid1.Columns[3].Width:= 110;
DBGrid1.Columns[4].Width:= 90;
DBGrid1.Columns[5].Width:= 150;
 
end;
Kitayets
296 / 249 / 48
Регистрация: 09.09.2011
Сообщений: 837
11.01.2017, 19:26     SQLite3 с поддержкой кириллицы #7
Сообщение было отмечено автором темы, экспертом или модератором как ответ
так ты выведи что получил из реестра сразу, без предварительной записи в базу, в Memo - 99.99% что ты получаешь из реестра в ANSI (cp1251) кодировке список программ.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.01.2017, 19:55     SQLite3 с поддержкой кириллицы
Еще ссылки по теме:

Lazarus TEdit отображает вопросительные знаки вместо кириллицы
SQLite3
Что-то с поддержкой кириллицы C++
Lazarus Запрет на ввод символов, отличных от кириллицы
Поиск в базе SQLite3 Lazarus

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
mrkaban
0 / 0 / 0
Регистрация: 27.04.2016
Сообщений: 30
11.01.2017, 19:55  [ТС]     SQLite3 с поддержкой кириллицы #8
Огромное спасибо!!!

Действительно!! CP1251ToUTF8 решает проблему! =)
Yandex
Объявления
11.01.2017, 19:55     SQLite3 с поддержкой кириллицы
Ответ Создать тему
Опции темы

Текущее время: 08:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru