powered by simpleCommunicator - 2.0.56     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проблемы с получением данных из базы SQLite
8 сообщений из 8, страница 1 из 1
Проблемы с получением данных из базы SQLite
    #37035887
Razor436
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пытался найти что-нибудь в гугле но безуспешно. Сразу оговорюсь программист из меня очень средний =)
Нужно написать простенькую программу для подсчета баллов. Создал MFC приложение, данные получаю используя

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
static int numitems;
static char **items;
static int rc =  0 ;

static void sql_start()
{
	sqlite3_open("mem.db", &db);
}

static int callback(void *NotUsed, int argc, char **argv, char **azColName)
{
	numitems = argc;
	items = argv;
	return  0 ;
};

static void sql_select(char *sql)
{
	sqlite3_exec(db, sql, callback,  0 , &zErrMsg);
};
то есть, как я понял из документации переменная argv из callback функции имеет массив полученных данных.
Далее в пытаюсь это вывести:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
sql_select("select * from fl_points"); // это просто для теста тут главное было проверить что данные из базы принимаются
m_points1.SetWindowText(items[ 0 ]); 
for(int i= 0 ;i<numitems;i++)
{
	lvItem.mask = LVIF_TEXT;
	lvItem.iItem =  0 ;
	lvItem.iSubItem =  0 ;
	lvItem.pszText = items[i]; i++;
        nItem = m_List.InsertItem(&lvItem);
        m_List.SetItemText(nItem,  1 , items[i]); i++;
	m_List.SetItemText(nItem,  2 , items[i]); i++;
	m_List.SetItemText(nItem,  3 , items[i]);
}
В итоге получаю это, в настройках юникод отключен (Character set: Not Set)
...
Рейтинг: 0 / 0
Проблемы с получением данных из базы SQLite
    #37035993
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идет UTF8. Тебе его надо UTF8 -> ANSI.
Или если так проще можешь получать строки в UTF16.
...
Рейтинг: 0 / 0
Проблемы с получением данных из базы SQLite
    #37036141
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Razor436то есть, как я понял из документации переменная argv из callback функции имеет массив полученных данных.Да. Одна строка данных. На каждую полученную строку будет один вызов колбека.
...
Рейтинг: 0 / 0
Проблемы с получением данных из базы SQLite
    #37036301
Razor436
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dmitry ArefievИдет UTF8. Тебе его надо UTF8 -> ANSI.
Или если так проще можешь получать строки в UTF16.
Дык если sqlite мне отдает в utf-8, то почему тогда когда я включаю юникод в проекте (character set: use unicode character set) все равно отображается что-то невнятное. Или я чего то не понимаю.
...
Рейтинг: 0 / 0
Проблемы с получением данных из базы SQLite
    #37036302
Razor436
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код вывода меняю так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
    
sql_start();
sql_select("select * from fl_points");

m_points1.SetWindowText(LPWSTR(items[ 0 ]));
for(int i= 0 ;i<numitems;i++)
{
	lvItem.mask = LVIF_TEXT;
	lvItem.iItem =  0 ;
	lvItem.iSubItem =  0 ;
	lvItem.pszText = LPWSTR(items[i]); i++;
        nItem = m_List.InsertItem(&lvItem);
        m_List.SetItemText(nItem,  1 , LPWSTR(items[i])); i++;
        m_List.SetItemText(nItem,  2 , LPWSTR(items[i])); i++;
        m_List.SetItemText(nItem,  3 , LPWSTR(items[i]));
}
...
Рейтинг: 0 / 0
Проблемы с получением данных из базы SQLite
    #37036370
Фотография Dmitry Arefiev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что UTF8 и UTF16 - разные кодировки. Когда ты включаешь юникод в проекте,
то проект ожидает UTF16, а не UTF8. sqlite3_exec передает колбэку данные в UTF8.
Варианты:
1) Ты не включаешь юникод в проекте и делаешь преобразование UTF8 -> ANSI.
2) Ты включаешь юникод в проекте и делаешь преобразование UTF8 -> UTF16.
3) Ты отказываешься от sqlite3_exec и используешь sqlite3_prepare16, sqlite3_step,
sqlite3_column_text16. Ну и включаешь юникод в проекте.

примерно так ...

PS: С MFC последний раз работал лет 5 назад, а "юникод в проекте" ни разу не включал,
т.е. могу и ошибаться ...
...
Рейтинг: 0 / 0
Проблемы с получением данных из базы SQLite
    #37037957
Razor436
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все, спасибо разобрался =)
...
Рейтинг: 0 / 0
Проблемы с получением данных из базы SQLite
    #37448786
mallory
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>Все, спасибо разобрался =)

Изложение?
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / SQLite [игнор отключен] [закрыт для гостей] / Проблемы с получением данных из базы SQLite
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]