Здравствуйте, гость ( Вход | Регистрация )
Litkevich Yuriy | Дата 4.3.2010, 20:47 |
В смысле что я могу хоть так писать: Да, можно писать в любом порядке, т.к. ты используешь конкретные имена. |
|
Rocky | Дата 4.3.2010, 19:50 |
Ага... а с при самом байндинге уже без разницы, так? INSERT INTO tab(Pict_ID_1_1, Pict_ID_1_2, Pict_ID_1_3) VALUES(:Pict_1, :Pict_2, :Pict_3); В смысле что я могу хоть так писать: oQuery.bindValue(":Pict_3", ...); oQuery.bindValue(":Pict_1", ...); oQuery.bindValue(":Pict_2", ...); Не обязательно так oQuery.bindValue(":Pict_1", ...); oQuery.bindValue(":Pict_2", ...); oQuery.bindValue(":Pict_3", ...); ? |
|
Litkevich Yuriy | Дата 4.3.2010, 19:47 |
Мне кажется имелось в виду это: ну собственно и я про него же. В данном случае подстановка именованная (:Pict_3) |
|
MoPDoBoPoT | Дата 4.3.2010, 19:00 |
зависит от типа подстановки, позиционная/именованная. Мне кажется имелось в виду это: INSERT INTO tab(Pict_ID_1_1, Pict_ID_1_2, Pict_ID_1_3) VALUES(:Pict_1, :Pict_2, :Pict_3); INSERT INTO tab(Pict_ID_1_3, Pict_ID_1_2, Pict_ID_1_1) VALUES(:Pict_3, :Pict_2, :Pict_1); Эти варианты равнозначны (такие вещи в стандарте SQL прописаны). |
|
Litkevich Yuriy | Дата 4.3.2010, 18:50 |
PK прибавить 1 и это будет новый PK. нет нельзя, т.к. могут существовать разные транзакции и значение может быть не уникальным. А генератор гарантирует уникальностьВо всяком случае в firebird/interbase, т.к. они версионники, а не блокировочники (как, например, MySQL) в QSqlQuery::prepare важен порядок имен столбцов? Т.е. он должен быть такой же как и при создании таблицы, или без разницы? зависит от типа подстановки, позиционная/именованная.Для последней без разницы, подробности см. в описании класса |
|
Rocky | Дата 4.3.2010, 18:42 |
А еще вопросик можно? А при указании имен столбцов в QSqlQuery::prepare важен порядок имен столбцов? Т.е. он должен быть такой же как и при создании таблицы, или без разницы? | |
MoPDoBoPoT | Дата 4.3.2010, 18:27 |
Это ничего страшного? Это просто уведомление о том, что неявно создаются объекты/конструкции (последовательность и индекс). |
|
Rocky | Дата 4.3.2010, 18:17 |
Ого ) 1. AUTOINCREMENT я имел ввиду именно ключевое слово, SERIAL я потом прочитал что это аналог этому AUTOINCREMENT... Ну да, таблица создалась )) А что в ней не так? 2. Блин, понял ( Я чето решил что из-за явного указания имен полей модуль QtSql при формировании запроса сам подставит по полям что куда нужно.. 3. Упс, тут описался, на самом деле было так (просто за 3 часа уже устал туда-сюда все менять, вот не то и вписал под конец)
4. там все ок, просто у меня 32 поля, я все тут не стал писать ( Уря, заработало!!! Тока в консоли пишет: Цитата NOTICE: CREATE TABLE will create implicit sequence "tab_id_seq" for serial column "tab.id" NOTICE: CREATE TABLE / PRIMARY KEY will create implicit index "tab_pk" for table "tab" Это ничего страшного? |
|
MoPDoBoPoT | Дата 4.3.2010, 17:43 |
Как я понял, в постгрессе нету AUTOINCREMENT Неправильно понял, точнее наделал ошибок и сделал неправильный вывод. В PostgreSQL автоинкрементное поле осуществляется через тип SERIAL/BIGSERIAL (по сути это последовательность + "триггер"). В общем, по порядку: 1.
Я не понял эту конструкцию, так что создалась таблица? 2.
Тут запрос неправильный, т.к. в таблице tab 4 поля, а не 3. Текст должен быть примерно такой: "INSERT INTO tab(Pict_ID_1_1, Pict_ID_1_2, Pict_ID_1_3) VALUES(:Pict_ID_1_1, :Pict_ID_1_2, :Pict_ID_1_3);" 3.
Тут ты пытаешься в 1-е поле с числовым типом записать текстовую строку "tab_sq.nextval" (тем более в описании таблцы уже задан автоикремент). 4. oQuery.bindValue(":Pict_ID_1_1", 1); oQuery.bindValue(":Pict_ID_2_1", 2); oQuery.bindValue(":Pict_ID_3_1", 3); А в подготовленном запросе писал :Pict_ID_1_1, :Pict_ID_1_2, :Pict_ID_1_3 Вот попробуй так:
|
|
Rocky | Дата 4.3.2010, 17:42 |
А можно маленький примерчик плиз? Я просто вот только-только взялся по-серьезному за базы данных =) | |
Просмотр темы полностью (откроется в новом окне) | |
Текстовая версия | Сейчас: 29.3.2024, 13:17 |