Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.90/88: Рейтинг темы: голосов - 88, средняя оценка - 4.90
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249

SqLite первые шаги

03.02.2024, 20:40. Показов 31019. Ответов 29
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В моем проекте до сих пор куча массивов, решил заменить базой SQlite, но на первом же примере затормозил.
Пример взят отсюда: https://docwiki.embarcadero.co... pplication
При нажатии кнопки Connect в Мемо ничего не появляется, и через пару секунд окно само закрывается, вот код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void __fastcall TForm1::connectButtonClick(TObject* Sender)
{
    // Use double backslash in Windows Paths as the backslash character (\) must be escaped with another one to be treated literally.
    SQLConnection1->Params->Add(
        "D:\\Employees.s3db");
    try {
        // Establish the connection.
        SQLConnection1->Connected = true;
        executeButton->Enabled = true;
        //   connectButton->Enabled = true;
 
        outputMemo->Text = "Connection established!";
    } catch (EDatabaseError &E) {
        ShowMessage("Exception raised with message" + E.Message);
    }
}
База с таким именем существует, библиотеку sqlite3.dll закинул в C:\Windows\SysWOW64, хотя есть там она или нет - ничего не меняет, результат тот же.
В чем дело?

У меня Embarcadero® RAD Studio 11 Version 28.0.48361.3236

Добавлено через 12 минут
Может где то путь прописать надо к этой библиотеке?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
03.02.2024, 20:40
Ответы с готовыми решениями:

Первые шаги...
Скачал себе Borland C++ builder В учебники первая задача создать файл first.cpp Записать в нем следующее: #include...

Mortal Kombat - первые шаги
Здравствуйте. вот решил попробовать написать игру типа Mortal Kombat и заодно выяснить, можно ли с помощью стандартной библиотеки...

Создание своего компонента, первые шаги
Пробую создать свой невизуальный компонент, наследник от TComponent. Задачи компонент решает очень простые, посредством метода, в котором...

29
42 / 45 / 6
Регистрация: 21.10.2022
Сообщений: 584
Записей в блоге: 2
04.02.2024, 02:12
Я подключал через FireDAC и линковал статически в один екзешник.
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
04.02.2024, 04:35
Обратите внимание, как параметр подключения записан в справке
C++
1
SQLConnection1->Params->Add("Database=full_path_to_your_database_file");
и как этот же параметр записан у Вас
Цитата Сообщение от Belju Посмотреть сообщение
SQLConnection1->Params->Add("D:\\Employees.s3db");
Вы ключевую фразу Database= потеряли.

Это один момент. Второй момент - требуется указать драйвер. Вы это сделали?

Ну и третье: какая печаль заставляет Вас использовать технологии прошлого века? Давным-давно в студию FireDAC завезли.
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
04.02.2024, 04:40
Обратите внимание, как параметр подключения записан в справке
C++
1
SQLConnection1->Params->Add("Database=full_path_to_your_database_file");
и как этот же параметр записан у Вас
Цитата Сообщение от Belju Посмотреть сообщение
SQLConnection1->Params->Add("D:\\Employees.s3db");
Вы ключевую фразу Database= потеряли.

Это один момент. Второй момент - требуется указать драйвер. Вы это сделали?

Ну и третье: какая печаль заставляет Вас использовать технологии прошлого века? Давным-давно в студию FireDAC завезли.
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
04.02.2024, 14:03  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Вы ключевую фразу Database= потеряли.
Это один момент. Второй момент - требуется указать драйвер. Вы это сделали?
Пропущенное Database ничего не меняет, а про драйвер я не в курсе, подскажите, плиз, как его указать
Если вы про это, то я указал для SQLConnection1 в инспекторе Driver = sqlite

Добавлено через 4 минуты
Цитата Сообщение от D1973 Посмотреть сообщение
Ну и третье: какая печаль заставляет Вас использовать технологии прошлого века? Давным-давно в студию FireDAC завезли.
Я сам из прошлого века, про SQlite слышал как самая простая база, а FireDAC для меня новое
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
04.02.2024, 16:00
1.
Цитата Сообщение от Belju Посмотреть сообщение
а про драйвер я не в курсе
Вот не открывается у меня сейчас материал по Вашей ссылке, но там черным по белому написано было, что в диспетчере объектов надо было выбрать драйвер. Как только ссылка заработает - прямо скрин с цитатой сделаю, а пока - см. мой скрин:



2.
Цитата Сообщение от Belju Посмотреть сообщение
Пропущенное Database ничего не меняет
А вот позвольте Вам не поверить! С какой БД, по Вашему, должен драйвер соединять с Вашим приложением, если Вы его нигде не указали. И, опять же, в примере было именно так: Database=<тут путь к файлу БД>.
C++
1
SQLConnection1->Params->Add("Database = \"D:\\Employees.s3db\"");
убедитесь, что файл Employees.s3db действительно лежит в корне диска D:



Цитата Сообщение от Belju Посмотреть сообщение
Я сам из прошлого века
Как, собственно и я и многие другие на этом форуме. Это повод до сих пор пользоваться арифмометром?
Цитата Сообщение от Belju Посмотреть сообщение
SQlite слышал как самая простая база
SQLite не проще и не сложнее других СУБД, просто она на то и Lite, что там нет много из того, что доступно во "взрослых" СУБД
Цитата Сообщение от Belju Посмотреть сообщение
FireDAC для меня новое
FireDAC - такой же компонент доступа к различным СУБД, как и dbExpres, вот только новее и удобнее. А раз Вы только начинаете изучение - то зачем изучать устаревшие технологии?
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
04.02.2024, 20:57  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Вот не открывается у меня сейчас материал по Вашей ссылке, но там черным по белому написано было, что в диспетчере объектов надо было выбрать драйвер. Как только ссылка заработает - прямо скрин с цитатой сделаю, а пока - см. мой скрин:
У меня тоже сейчас не открывается моя ссылка.... писал выше что у меня выбран драйвер, как на вашем скрине....

Посмотрел вебинар https://www.youtube.com/watch?v=gN9UITlVKMQ , и пожалуй проштудирую FireDAC

Добавлено через 3 часа 32 минуты
С примерами по FireDAC все просто и наглядно, но не нашел что нужно мне, пример кода как добавляется-изменяется бд. Мне нужно что бы база изменялась автоматом в течение парсинга текста
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
05.02.2024, 08:07
Цитата Сообщение от Belju Посмотреть сообщение
писал выше что у меня выбран драйвер, как на вашем скрине....
Да, я не увидел этого сразу, прошу прощения.
Цитата Сообщение от Belju Посмотреть сообщение
но не нашел что нужно мне, пример кода как добавляется-изменяется бд
Так же, как и другая БД - запросами INSERT ... INTO и UPDATE ... SET. Если Вы собирались делать это с помощью компонентов T...Table и комманд типа Edit(), Post(), etc - лучше сразу бросайте заниматься БД, это путь в никуда.
Цитата Сообщение от Belju Посмотреть сообщение
что бы база изменялась автоматом в течение парсинга текста
Нет такого "из коробки". На то Вы и программист, чтобы реализовать требуемый функционал
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
05.02.2024, 14:40  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Нет такого "из коробки". На то Вы и программист, чтобы реализовать требуемый функционал
Цитата Сообщение от D1973 Посмотреть сообщение
Так же, как и другая БД - запросами INSERT ... INTO и UPDATE ... SET
Именно пример кода с запросами и имел ввиду, я с ними не знаком, и как это выглядит в С++.
Может порекомендуете ссылку где с этим познакомиться
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
05.02.2024, 14:49
Цитата Сообщение от Belju Посмотреть сообщение
где с этим познакомиться
Познакомится с чем? С SQL-запросами? Да 100500 тонн материалов в сети для разных СУБД. Если совсем без понятия, что это такое - прочитайте для начала это
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
05.02.2024, 15:58  [ТС]
Все же хочу разобраться с первым примером. Как правильно выглядит
C++
1
SQLConnection1.Params.Add('Database=full_path_to_your_database_file');
если база находится
Code
1
D:\\Employees.s3db
====
SQL учебник для чайников именно то что мне нужно!

Добавлено через 58 минут
Неверно поставил вопрос, спрошу еще раз
Как правильно выглядит
C++
1
SQLConnection1->Params->Add("Database=full_path_to_your_database_file");
если база здесь
C++
1
D:\Employees.s3db
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
05.02.2024, 15:59
Цитата Сообщение от Belju Посмотреть сообщение
Как правильно выглядит
Ну я же написал это еще в посте #6 пункт 2
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
05.02.2024, 16:09  [ТС]
Цитата Сообщение от D1973 Посмотреть сообщение
Ну я же написал это еще в посте #6 пункт 2
Если так
C++
1
SQLConnection1->Params->Add(Database = "D:\\Employees.s3db");
то [bcc64 Error] Open.cpp(41): use of undeclared identifier 'Database'
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
05.02.2024, 16:46
Лучший ответ Сообщение было отмечено Belju как решение

Решение

Belju, да посмотрите же внимательно, как расставлены кавычки у меня и как у Вас!
1
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
05.02.2024, 22:26  [ТС]
D1973, извините, не посмотрел второй ваш скрин
пример по этой ссылке https://docwiki.embarcadero.co... ng_FireDAC
сработал без проблем, и видимо его возьму за основу для изучения SQL & FireDAC
Спасибо за помощь!

Добавлено через 5 часов 19 минут
Не нашел ни одного примера для работы с таблицей, в docwiki больше примеров для Делфи. Мне нужны только 3 операции: добавить строку в таблицу и чтение-запись в ячейку. Инструкции типа INSERT INTO конечно не годятся
0
42 / 45 / 6
Регистрация: 21.10.2022
Сообщений: 584
Записей в блоге: 2
05.02.2024, 23:56
Мне нужны только 3 операции: добавить строку в таблицу и чтение-запись в ячейку. Инструкции типа INSERT INTO конечно не годятся


Попробуй TFDQuery
0
Модератор
 Аватар для D1973
9928 / 6465 / 2457
Регистрация: 21.01.2014
Сообщений: 27,420
Записей в блоге: 3
06.02.2024, 07:01
Цитата Сообщение от Belju Посмотреть сообщение
добавить строку в таблицу и чтение-запись в ячейку.
Нет таких понятий в теории баз данных. Таблица состоит из записей, каждая запись имеет набор полей.
Раз не хотите читать нормальную документацию, вот несколько примеров, но это максимум, что можно осветить в форумном посте: так-то форумы предназначены для ответа на конкретные вопросы, а не для глобального ликбеза...
Пусть есть таблица Tab1:
IDNoteCost
1aaaa100.1
2bbbb200.2
3cccc300.3
.........
10kkkk1000.1
1. Для того, чтобы выбрать все записи из таблицы используем запрос
SQL
1
SELECT * FROM Tab1
2. Для того, чтобы выбрать только одну запись, у которой идентификатор ID = 3 используем запрос
SQL
1
SELECT * FROM Tab1 WHERE ID=3
3. Для того, чтобы выбрать значение конкретного поля Note из записи, у которой идентификатор ID = 3 используем запрос
SQL
1
SELECT Note FROM Tab1 WHERE ID=3
4. Для того, чтобы добавить запись с внесением данных во все поля
SQL
1
INSERT INTO Tab1 VALUES(11,"mmmm", 1100.11)
5. Для того, чтобы изменить запись с заданным идентификатором
SQL
1
UPDATE Tab1 SET Note = "abcd" WHERE ID = 11
6. Для того, чтобы удалить запись с заданным идентификатором
SQL
1
DELETE FROM Tab1 WHERE ID = 11
В среде C++Builder запросы проще всего выполнять с помощью компонента FDQuery, внеся текст запроса в свойство SQL компонента. Для выполнения запросов используются два метода:
Open() - для выполнения запросов вида SELECT (селективных запросов), которые возвращают какие-либо Наборы данных (НД)
ExecSQL - для выполнения запросов, выполняющих действия (вставка INSERT..INTO, изменениe UPDATE..SET, удаление DELETE)
0
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
06.02.2024, 15:23  [ТС]
D1973, спасибо за столь расширенный ответ, но все это я видел и читал, и пробовал применить к конкретному примеру https://docwiki.embarcadero.co... ng_FireDAC но что то не так делаю, поэтому и прошу пример рабочего кода, а так не работает:
C++
1
2
3
4
void __fastcall TForm1::AddButtonClick(TObject* Sender)
{
   INSERT INTO Tab1 VALUES(11,"mmmm", 1100.11)
}
[bcc64 Error] Open.cpp(103): unknown type name 'INSERT'

Да и со структурой таблицы базы данных знаком, я не совсем новичок. Та же запись в некоторых материалах может называться строкой
0
 Аватар для TrollHammer
1216 / 709 / 336
Регистрация: 22.02.2018
Сообщений: 2,095
Записей в блоге: 2
06.02.2024, 15:40
Лучший ответ Сообщение было отмечено Belju как решение

Решение

Цитата Сообщение от Belju Посмотреть сообщение
INSERT INTO Tab1 VALUES(11,"mmmm", 1100.11)
Ух ты!!!
Написано же - кидаем на форму компонент FDQuery, связываем его Connection и
C++
1
2
3
4
   FDQuery->Active = false; //это моя привычка
   FDQuery->SQL->Text = "INSERT INTO Tab1 VALUES(11,\"mmmm\", 1100.11)";
   FDQuery->ExecSQL();
   FDQuery->Active = true;
Добавлено через 3 минуты
И может я ошибаюсь но в SQLite-е строки заключаются в одинарные кавычки. Двойные на моей памяти используются в б-гомерзком ацессе.
1
3 / 3 / 0
Регистрация: 03.10.2018
Сообщений: 249
06.02.2024, 16:27  [ТС]
TrollHammer, спасибо.
В моем примере это сработало, и выглядит так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::AddButtonClick(TObject* Sender)
{
    TFDQuery* query;
    query = new TFDQuery(NULL);
    query->Connection = FDConnection1;
 
    query->Active = false; 
    query->SQL->Text = "INSERT INTO Test VALUES(9,\"Tusudget\", 7000,60)";
    query->ExecSQL();
    query->Active = true;
 
    query->Close();
    query->DisposeOf();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
06.02.2024, 16:27
Помогаю со студенческими работами здесь

Первые шаги с ATMEGA8-16PU, и первые ссадины
Всем привет! Собрал свою первую схему на макетной плате с ATMEGA8-16PU. В схеме имеется два резистора на 300ом, и два светодиода. В Atmel...

C++ первые шаги (абсолютно первые)
Привет, пользователи CyberForum. Я относительно давний юзер этого форума, и вот, наконец-то решил воплощать мечту в реальность, а именно...

Первые шаги.
Здравствуйте. Извините, может, за тупые вопросы. Но с языком С впервые сталкиваюсь. Использую среду прогр-я C-Free Standard 4.0. Открыл...

Первые шаги
Я только собираюсь начать изучать фреймворки, подскажите, пожалуйста, какой выбрать, с чего начать, что почитать.... Заранее спасисбо!

Первые шаги
Здраствуйте, меня зовут Женя, мне 16 лет. Я решил научиться программировать. Юзал поиск и в конце концов, накачав достаточно литературы и...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru