Russian Qt Forum
Ноябрь 24, 2024, 00:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Создание локальной БД. Проблема.  (Прочитано 11269 раз)
AlphaGh0St
Гость
« : Сентябрь 12, 2011, 17:16 »

Всем привет! Пишу локальную базу данных и столкнулся с рядом вопросов.

Например, пользователь жмёт на кнопку "Добавить", заполняет окно вставки и добавляет новую запись в таблицу. Подскажите, как обновить Table View, чтобы он сразу отображал новые данные?

Нашёл вот такое http://www.prog.org.ru/topic_9086_0.html решение, но хотелось бы реализовать обновление проще. Без наследования от модели.
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #1 : Сентябрь 12, 2011, 17:23 »

дёргать в модели select(), чтобы она прочитала данные из БД
Записан

Юра.
AlphaGh0St
Гость
« Ответ #2 : Сентябрь 12, 2011, 19:54 »

Замечательно, всё заработало! Спасибо!
Записан
AlphaGh0St
Гость
« Ответ #3 : Сентябрь 18, 2011, 14:55 »

Возник следующий вопрос: кол-во строк в таблице БД можно динамически изменять (добавлять, удалять строки).
А возможно ли динамически (во время работы программы) изменять кол-во столбцов?
И если это всё же как-то возможно, подскажите, как именно?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #4 : Сентябрь 19, 2011, 08:46 »

ALTER TABLE
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlphaGh0St
Гость
« Ответ #5 : Сентябрь 23, 2011, 10:40 »

Замечательная возможность ))
Я не особо с SQL знаком, новичок, короче.

Добавить столбец у меня получилось:
Код:
ALTER TABLE mainTable ADD col1 NUMERIC

А вот удалить что-то не получается... Пробовал такой запрос:
Код:
ALTER TABLE mainTable DROP COLUMN col1;

И такой:
Код:
ALTER TABLE mainTable DROP col1;

Отладочная информация дала следующее:
Код:
SQL   ->  "ALTER TABLE mainTable DROP COLUMN col1;"
ERROR ->  "near "DROP": syntax error Unable to execute statement"

Пробовал установить пустую несуществующую таблицу на время выполнения запроса:
Код:
tableModel->setTable("");
execSQLQuery("ALTER TABLE mainTable DROP COLUMN col1;");
tableModel->setTable("mainTable");
Тоже не помогло...

Подскажите, в чём ошибка? И как правильно удалить столбец?
« Последнее редактирование: Сентябрь 23, 2011, 10:57 от AlphaGh0St » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Сентябрь 23, 2011, 11:00 »

Учи SQL. ALTER - добавление. А дропнуть поле я уже не помню как. Но можно всегда создать другую таблицу без него, скопировать туда данные и заменить исходную таблицу на полученную.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlphaGh0St
Гость
« Ответ #7 : Сентябрь 23, 2011, 11:19 »

Походу учу.

Информация взята от сюда: http://www.w3schools.com/sql/sql_alter.asp

Вот пример:
Цитировать
DROP COLUMN Example

Next, we want to delete the column named "DateOfBirth" in the "Persons" table.

We use the following SQL statement:
Код:
ALTER TABLE Persons DROP COLUMN DateOfBirth

Цитировать
Но можно всегда создать другую таблицу без него, скопировать туда данные и заменить исходную таблицу на полученную.
Идея хорошая. Но хотелось бы разобраться именно с удалением столбца.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Сентябрь 23, 2011, 11:34 »

Хм. Извиняюсь. Это уже я забыл sql. Улыбающийся Попробуй этот запрос выполнить через стороннюю прогу. А может твоя БД и не поддерживает этого...
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlphaGh0St
Гость
« Ответ #9 : Сентябрь 23, 2011, 11:44 »

Файл БД создал через программу SQLite Database Browser v. 2.0b1.
Пробовал в самом SQLite браузере выполнить такой запрос, так браузер завис)))

Может и правда не поддерживается, уж не знаю, что и делать...
Подскажите, как создать файл локальной БД, чтобы он поддерживал дроп (через какую программу, какую именно БД)?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Сентябрь 23, 2011, 11:47 »

Не забывай про гугл. Подмигивающий

http://www.sqlite.org/faq.html
Цитировать
(11) How do I add or delete columns from an existing table in SQLite.

SQLite has limited ALTER TABLE support that you can use to add a column to the end of a table or to change the name of a table. If you want to make more complex changes in the structure of a table, you will have to recreate the table. You can save existing data to a temporary table, drop the old table, create the new table, then copy the data back in from the temporary table.

For example, suppose you have a table named "t1" with columns names "a", "b", and "c" and that you want to delete column "c" from this table. The following steps illustrate how this could be done:

BEGIN TRANSACTION;
CREATE TEMPORARY TABLE t1_backup(a,b);
INSERT INTO t1_backup SELECT a,b FROM t1;
DROP TABLE t1;
CREATE TABLE t1(a,b);
INSERT INTO t1 SELECT a,b FROM t1_backup;
DROP TABLE t1_backup;
COMMIT;
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #11 : Сентябрь 23, 2011, 11:49 »

Подскажите, как создать файл локальной БД, чтобы он поддерживал дроп (через какую программу, какую именно БД)?
Можешь посмотреть в сторону Firebird embedded - она намного понавароченнее, чем SQLite.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
AlphaGh0St
Гость
« Ответ #12 : Сентябрь 23, 2011, 12:20 »

Хорошо, буду разбираться. Спасибо!
Записан
AlphaGh0St
Гость
« Ответ #13 : Сентябрь 23, 2011, 12:40 »

Подскажите, а как получить имя столбца?
Пусть в таблице последний столбец носит имя col1. Как получить его имя для дальнейшего сохранения в строковую переменную?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #14 : Сентябрь 23, 2011, 12:45 »

Можно попробовать через QSqlRecord. А лучше поищи инфу по системным таблицам в SQLite.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.151 секунд. Запросов: 22.