Форум программистов, компьютерный форум, киберфорум
C++/CLI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.64/50: Рейтинг темы: голосов - 50, средняя оценка - 4.64
0 / 0 / 0
Регистрация: 18.06.2013
Сообщений: 22

Подключение базы данных SQLite к интерфейсу программы

14.08.2014, 16:19. Показов 11222. Ответов 10
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброе время суток! Нужна помощь! Как выполнить такое задание? Подключение базы данных SQLite к интерфейсу программы, написанному на Microsoft Visual Studio 2012. (c++)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
14.08.2014, 16:19
Ответы с готовыми решениями:

Подключение базы данных SQLite
Всем привет! Разбираюсь с подключением базы данных Sqlite на Winforms C++. Нашел хорошую статью: http://blog.harrix.org/article/7614. Здесь...

Восстановить поврежденный файл базы данных SQLite (сделать дамп запароленного файла базы данных)
Вообщем не понятно после чего перестал открываться файл базы данных с ошибкой - "database disk image is malformed". Нашел...

Написать функции для считывания данных о выбранных сущностях из базы данных SQLite
Здравствуйте, помогите доделать программу. Надо написать функции для считывания данных о выбранных сущностях из базы данных SQLite. В...

10
267 / 189 / 33
Регистрация: 15.01.2011
Сообщений: 681
18.08.2014, 02:47
Лучший ответ Сообщение было отмечено konsryh как решение

Решение

с++ SQLite
1
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
18.08.2014, 07:00
Лучший ответ Сообщение было отмечено konsryh как решение

Решение

CppSQLite - C++ Wrapper for SQLite

his article describes CppSQLite, a very thin C++ wrapper around the public domain SQLite database library.

A description of how to link applications with SQLite is provided, then an example program using CppSQLite is presented, and finally the CppSQLite classes are documented.
1
2 / 2 / 0
Регистрация: 18.07.2015
Сообщений: 47
22.07.2015, 23:35
Хорошие ссылки, после долгих воскурений удалось подключить.
Форумчане, кто работает с SQLite в MVS 2013 (C++/CLR, 64-bit, приложение Windows): каким образом можно снять данные из таблицы и вывести их либо в messageBox, либо в отдельный файл? Только не через cout и не через printf. Просто, чтобы выскочил мессидж с полученной строкой.
Не могу разобраться вообще в системе считки данных. Где возвращаемый результат запроса? Пытаюсь вывести на экран хоть что-то, не получается.
Буду рад примеру с открытием .db, считкой нужной ячейки и выводом полученной строки в messageBox (формат: System::Windows::Forms::MessageBox::Show ("") или MessageBox::Show("")). Ну, или в файл. Нужно понять, где в коде возвращаемая из ячейки строка.
Спасибо за внимание.
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
24.07.2015, 09:48
C++
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
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
 
void main()
{
    sqlite3 *db;
    sqlite3_stmt * pStmt;
    int i, j, coln, rc;
    int b = 1;
    // SQL инструкций 
    char *sql[] = {
    "CREATE TABLE tbl1 (N INTEGER PRIMARY KEY AUTOINCREMENT,
      nm CHAR(20), score INT);",
    "INSERT INTO tbl1 VALUES(NULL, 'Ben Frees', 2478);",
    "INSERT INTO tbl1 VALUES(NULL, 'Roy Askey', 2289);",
    "INSERT INTO tbl1 VALUES(NULL, 'Lary Terner', 2021);",
    "INSERT INTO tbl1 VALUES(NULL, 'Jonny Hitlop', 1471);",
    "INSERT INTO tbl1 VALUES(NULL, 'Zoran Covoc', 1143);",
    "SELECT N AS 'NUMBER', nm AS 'NAME', score AS 'SCORE' FROM tbl1;"
    "DROP TABLE tb1;"
    "VACUUM;"
    };  
    // открытие (создание) БД
    if (sqlite3_open("exam3.db", &db))
    {
        printf("Error: %s\n", sqlite3_errmsg(db));
        sqlite3_close(db);
        system("pause");
        exit(1);
    }
    // выполнение SQL инструкций (каждой по порядку)
    for (i=0; i<sizeof(sql)/sizeof(sql[0]); i++)
    {
        // шаг 1 подготовка SQL инструкции к выполнению 
        //(компиляция ее в байт-код)
        if (sqlite3_prepare(db, sql[i], -1, &pStmt, NULL))
        {
            printf("Error: %s\n", sqlite3_errmsg(db));
            sqlite3_finalize(pStmt);
            sqlite3_close(db);
            system("pause");
            exit(1);
        }
        // получения количества столбцов
        coln = sqlite3_column_count(pStmt);
        // печать названий столбцов только 1 раз 
        if (b & coln) 
        {
            for(j=0; j<coln; j++)
        printf("%s\t", sqlite3_column_name(pStmt, j));
            printf("\n");
            b = 0;
        }
        // шаг 2 выполнение SQL инструкций
        while((rc = sqlite3_step(pStmt)) == SQLITE_ROW)
        {
            // тело цилка выполнится только для 
            //инструкции SELECT
            // для остальных запросов функция 
            //sqlite3_step вернет SQLITE_DONE
            // получить число столбцов в текущей строке 
            //результата
            coln = sqlite3_data_count(pStmt);
            // шаг 3 получение данных
            for(j=0; j<coln; j++) 
            // получение данных как текстовые строки
            // вне зависимости от объявленного типа
            // столбца
            printf("%s\t",sqlite3_column_text(pStmt, j));//здесь просто переделываешь куда тебе надо выводить данные.
            printf("\n");
        }
        // получение сообщения при ошибке
        if (rc != SQLITE_DONE)  printf("Error: %s\n", 
                sqlite3_errmsg(db));
        // шаг 4 завершение выполнения запроса
        sqlite3_finalize(pStmt);
    }
    // закрытие БД
    sqlite3_close(db);
    system("pause");
} //end main
Я думаю вы сможете переделать под себя.

данная функция как раз выводит значение столбцов printf("%s\t",sqlite3_column_text(pStmt, j));
0
2 / 2 / 0
Регистрация: 18.07.2015
Сообщений: 47
24.07.2015, 10:30
Привет!
Насколько я понимаю, это
C++
1
printf("%s\t",sqlite3_column_text(pStmt, j));
выводит сообщение в консоль.
Для messageBox требуется строка. Каким образом можно сохранить вот это значение
C++
1
sqlite3_column_text(pStmt, j)
в переменную (строка!), чтобы передать в
C++
1
System::Windows::Forms::MessageBox::Show("")
В этом трудность - printf форматирует sqlite3_column_text(pStmt, j) в строку и бросает в консоль. У меня формы (не консоль!), и мне нужно вывести форматированное значение sqlite3_column_text(pStmt, j) в форму messageBox. Как перехватить это уже отформатированное printf'ом значение, сохранить в переменную и уже потом передать в messageBox?
Что-то вроде:
C++
1
2
 (какой тип?!)message = (sqlite3_column_text(pStmt, j));
System::Windows::Forms::MessageBox::Show(message)
Или можно использовать что-то другое вместо printf для форматирования в строку значения sqlite3_column_text(pStmt, j)?
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
24.07.2015, 11:00
Я типы сток в MVS плохо знаю. Вот пример. Только как понимаю там с кодировкой будут проблемы.
SQLite кодировка символов
1
2 / 2 / 0
Регистрация: 18.07.2015
Сообщений: 47
24.07.2015, 11:17
О, что-то похожее, да. Позже гляну, спасибо.
0
Марсианин)))
713 / 46 / 15
Регистрация: 18.07.2010
Сообщений: 637
24.07.2015, 11:19
или просто так
C++
1
otwet = (char*) sqlite3_column_text(pStmt, j);
0
2 / 2 / 0
Регистрация: 18.07.2015
Сообщений: 47
25.07.2015, 18:36
Не выходит(

Код из примера по ссылке
C++
1
const unsigned char* txt = (const unsigned char*)sqlite3_column_text(statement, col);
возвращает true при Console::WriteLine( txt), не более.
C++
1
 (char*) otwet = (char*) sqlite3_column_text(pStmt, j);
то же самое, само собой.
Мне вот интересно,
C++
1
printf("%s\t", sqlite3_column_text(pStmt, j))
отличнейшим образом выводит в консоль строку, следовательно, она имеет строку, получает ее из sqlite3_column_text(pStmt, 0), вот каким образом? поиски в <stdio.h> дадут что-нибудь, нет?
Задача - есть функция, допустим, getSQLiteData, которая обращается к SQLite и должна возвращать одну единственную строку из запрашиваемой ячейки. Строка вот она здесь - sqlite3_column_text(pStmt, j) и printf успешно выводит ее на экран, но как мне вывести ее в return функции getSQLiteData? Изменение возвращаемого типа getSQLiteData ничего не даст, поскольку все та же проблема останется в функции-отправителе. Короче говоря, как превратить sqlite3_column_text(pStmt, j) в строку? Ее тип, к слову, const unsigned char*.

P/S/ пробовал крутить-вертеть sprintf - ничего не получается, все время либо ругань, либо что угодно, только не строка.
0
2 / 2 / 0
Регистрация: 18.07.2015
Сообщений: 47
29.07.2015, 12:37
Цитата Сообщение от mAKS74 Посмотреть сообщение
Каким образом можно сохранить вот это значение
Код C++Выделить код
C++
1
sqlite3_column_text(pStmt, j)
в переменную (строка!), чтобы передать в
C++
1
System::Windows::Forms::MessageBox::Show("")
Отвечаю. Вот таким:
C++
1
2
3
4
       const char* name;
       const char* name = reinterpret_cast<const char*>(sqlite3_column_text(pStmt, 0));
       System::String^ str = gcnew System::String(name);
       MessageBox::Show(str);
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
29.07.2015, 12:37
Помогаю со студенческими работами здесь

Постолбцовое отображение данных из базы данных SQLite
Уважаемые форумчане, помогите пожалуйста. Необходимо вывести данные из таблицы базы данных в TextView. Вот код, когда в TextView...

Построчное считывание данных из базы данных SQLite
Всем привет) Столкнулась с такой проблемой: получаю данные из бд SQLite через SQLiteDataReader с помощью метода GetValue(i). Но...

Обновление базы данных SQLite
В приложении имеется база данных с таблицей, заранее заполненной информацией. Для конкретики, пусть это будут анекдоты :) В базе так же...

SQLite обновление базы данных
Всем привет. Использую базу данных в приложении. При обновлении программы нужно обновить базу данных в том числе, база данных хранится...

Обновление базы данных sqlite
Уже который день бьюсь никак не выходит Подскажите, что я делаю неверно у меня есть созданная база данных MyDb, в ней таблица status ...


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

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Новые блоги и статьи
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru