Название: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 12, 2011, 17:16 Всем привет! Пишу локальную базу данных и столкнулся с рядом вопросов.
Например, пользователь жмёт на кнопку "Добавить", заполняет окно вставки и добавляет новую запись в таблицу. Подскажите, как обновить Table View, чтобы он сразу отображал новые данные? Нашёл вот такое http://www.prog.org.ru/topic_9086_0.html (http://www.prog.org.ru/topic_9086_0.html) решение, но хотелось бы реализовать обновление проще. Без наследования от модели. Название: Re: Создание локальной БД. Проблема. Отправлено: lit-uriy от Сентября 12, 2011, 17:23 дёргать в модели select(), чтобы она прочитала данные из БД
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 12, 2011, 19:54 Замечательно, всё заработало! Спасибо!
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 18, 2011, 14:55 Возник следующий вопрос: кол-во строк в таблице БД можно динамически изменять (добавлять, удалять строки).
А возможно ли динамически (во время работы программы) изменять кол-во столбцов? И если это всё же как-то возможно, подскажите, как именно? Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Сентября 19, 2011, 08:46 ALTER TABLE
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 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;" Пробовал установить пустую несуществующую таблицу на время выполнения запроса: Код: tableModel->setTable(""); Подскажите, в чём ошибка? И как правильно удалить столбец? Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Сентября 23, 2011, 11:00 Учи SQL. ALTER - добавление. А дропнуть поле я уже не помню как. Но можно всегда создать другую таблицу без него, скопировать туда данные и заменить исходную таблицу на полученную.
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 23, 2011, 11:19 Походу учу.
Информация взята от сюда: http://www.w3schools.com/sql/sql_alter.asp (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 Цитировать Но можно всегда создать другую таблицу без него, скопировать туда данные и заменить исходную таблицу на полученную. Идея хорошая. Но хотелось бы разобраться именно с удалением столбца.Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Сентября 23, 2011, 11:34 Хм. Извиняюсь. Это уже я забыл sql. :) Попробуй этот запрос выполнить через стороннюю прогу. А может твоя БД и не поддерживает этого...
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 23, 2011, 11:44 Файл БД создал через программу SQLite Database Browser v. 2.0b1.
Пробовал в самом SQLite браузере выполнить такой запрос, так браузер завис))) Может и правда не поддерживается, уж не знаю, что и делать... Подскажите, как создать файл локальной БД, чтобы он поддерживал дроп (через какую программу, какую именно БД)? Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Сентября 23, 2011, 11:47 Не забывай про гугл. ;)
http://www.sqlite.org/faq.html (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; Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Сентября 23, 2011, 11:49 Подскажите, как создать файл локальной БД, чтобы он поддерживал дроп (через какую программу, какую именно БД)? Можешь посмотреть в сторону Firebird embedded - она намного понавароченнее, чем SQLite.Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 23, 2011, 12:20 Хорошо, буду разбираться. Спасибо!
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Сентября 23, 2011, 12:40 Подскажите, а как получить имя столбца?
Пусть в таблице последний столбец носит имя col1. Как получить его имя для дальнейшего сохранения в строковую переменную? Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Сентября 23, 2011, 12:45 Можно попробовать через QSqlRecord. А лучше поищи инфу по системным таблицам в SQLite.
Название: Re: Создание локальной БД. Проблема. Отправлено: Rem Norton от Сентября 23, 2011, 12:48 Код
Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Сентября 23, 2011, 12:50 Это только в том случае, если сами поля приходят в правильном порядке.
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Октября 06, 2011, 19:30 Моя идея с добавлением столбцов оказалась полной лажей.
Благо, что я это понял ещё на этапе проектирования, а не на этапе реализации )) В общем тут так всё очень хитро закручено, думаю, лучше, если я сразу всё расскажу. Необходимо реализовать базу данных учёта товаров для магазина. Таблица БД должна выглядеть следующим образом... Обычные столбцы не вызывают никаких проблем. Вся проблема и заморочка с датами. В поле, именуемом текущей датой пишется кол-во проданного товара в этот день. Например, в данной таблице видно, что: Товар1 был продан в кол-ве одна штука 5-го числа и одна штука 6-го числа. Товар2 не был продан 5-го числа, но 6-го числа был продан товар2 в кол-ве 2шт. Товар3 не был продан в эти дни.
Вся трудность возникает с датами. Хотя, возможно, трудностей здесь вообще нет, просто я смотрю на проблему "не под тем углом". Подскажите, как лучше всего/правильно реализовать такую БД? Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Октября 06, 2011, 21:04 Отдельная таблица, где будет код товара и дата, когда он продан.
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Октября 06, 2011, 21:08 Я в БД не очень-то разбираюсь, новичок, короче.
Учить всю теорию баз данных ради одной задачи - откровенно лень. Не могли бы вы подробнее разъяснить, как это сделать (как это будет выглядеть) или подскажите документацию, для решения этой задачи. Название: Re: Создание локальной БД. Проблема. Отправлено: Пантер от Октября 06, 2011, 21:15 Ох, если бы я еще помнил. :) Сейчас попробую псевдокодом
ТаблицаТовров УникальныйНомер Наименование Цена ТаблицаПродаж УникальныйНомер СсылкаНаНомерВТаблицеТоваров Дата Количество Сумма Типа того. Гугли про внешние ключи. Название: Re: Создание локальной БД. Проблема. Отправлено: andrew.k от Октября 07, 2011, 00:05 В любой книге по SQL будет пример именно с товарами.
Название: Re: Создание локальной БД. Проблема. Отправлено: AlphaGh0St от Октября 07, 2011, 11:22 В любой книге по SQL будет пример именно с товарами. Книг много, можете подсказать что-то конкретное? Название: Re: Создание локальной БД. Проблема. Отправлено: andrew.k от Октября 07, 2011, 13:12 Совершенно любая (http://lmgtfy.com/?q=sql+%D0%B4%D0%BB%D1%8F+%D1%87%D0%B0%D0%B9%D0%BD%D0%B8%D0%BA%D0%BE%D0%B2+%D1%81%D0%BA%D0%B0%D1%87%D0%B0%D1%82%D1%8C) книга подойдет.
Какие ты уже попробовал и тебе не помогли? |