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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Автоматическая вставка Даты-Время?  (Прочитано 20876 раз)
Martiro
Гость
« : Июль 31, 2008, 12:55 »

Реально ли запрограммировать ячейку так, чтобы при создании новой записи, в эту ячейку автоматом записывалось дата и время создания записи (в формате timestamp)?
Линтер-ВС (PostgreSQL 7)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


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


Просмотр профиля WWW
« Ответ #1 : Июль 31, 2008, 13:31 »

У поля БД есть понятие default - это оно?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
spirit
Гость
« Ответ #2 : Июль 31, 2008, 13:38 »

а заюзать PL/SQL триггер BEFORE INSERT?
Записан
Martiro
Гость
« Ответ #3 : Июль 31, 2008, 13:50 »

Что заdefault ?
Как прописать правильно этот тригер BEFORE INSERT?
А то документации под рукой нет...
Записан
spirit
Гость
« Ответ #4 : Июль 31, 2008, 13:59 »

документация http://www.postgresql.org/docs/7.4/interactive/sql-createtrigger.html
Записан
spirit
Гость
« Ответ #5 : Июль 31, 2008, 14:03 »

default-значение задается при создании таблицы в конструкции CREATE TABLE или ALTER TABLE для конкретного поля.
например:
Код:
CREATE TABLE "users"
(
"login"   varchar(20)  NOT NULL ,
"password"   varchar(20)  NULL ,
"loginedtime"   date   DEFAULT  '31.07.2008' NOT NULL ,
            CONSTRAINT "loginKey" PRIMARY KEY("login")
);
http://www.postgresql.org/docs/7.4/interactive/sql-createtable.html

но я так понимаю в вашей ситуации это не кактит, т.к. надо задавать дату при создании строки,  я правильно понял?
« Последнее редактирование: Июль 31, 2008, 14:08 от spirit » Записан
Martiro
Гость
« Ответ #6 : Июль 31, 2008, 14:24 »

Да, не катит.
Нужно при добавлении записи в таблицу, автоматом заполнить последнее поле.
Я так понимаю, выглядеть это будет примерно так:
CREATE TRIGGER
   tab_dt_ins BEFORE INSERT OR UPDATE ON table1  ? ? ?

А как дальше писать? Функция, которую нужно использовать это "current_timestamp"? Или нужно свою прописывать?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Июль 31, 2008, 14:30 »

чем не катит в default поставить NOW()?
это для UPDATE нужно тригер вставлять
Записан
spirit
Гость
« Ответ #8 : Июль 31, 2008, 14:30 »

этой функции будет достаточно http://www.postgresql.org/docs/7.4/interactive/functions-datetime.html#FUNCTIONS-DATETIME-CURRENT
Записан
spirit
Гость
« Ответ #9 : Июль 31, 2008, 14:45 »

чем не катит в default поставить NOW()?
это для UPDATE нужно тригер вставлять


тоже вариант  Улыбающийся
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #10 : Июль 31, 2008, 16:34 »

радует что народ postgres пользует
а то для веба все mysql да mysql
Записан
Martiro
Гость
« Ответ #11 : Август 01, 2008, 09:03 »

Я так понимаю, мы пришли к тому, что в моем случае при создании таблицы нужно в DEFAULT писать NOW() или CURRENT_TIMESTAMP:
Код:
CREATE TABLE "users"
(
"login"   varchar(20)  NOT NULL ,
"password"   varchar(20)  NULL ,
"loginedtime"   timestamp   DEFAULT CURRENT_TIMESTAMP,
            CONSTRAINT "loginKey" PRIMARY KEY("login")
);
Чего-то не выходит... Таблица создается, но при добавлении записи, поле "loginedtime" не заполняется.
Записан
spirit
Гость
« Ответ #12 : Август 01, 2008, 09:14 »

попробуй так:
Код:
CREATE TABLE "users" (
  "login" varchar(60) NOT NULL,
  "password" varchar(60) NOT NULL,
  "logintime" timestamp DEFAULT NOW(),
  CONSTRAINT "loginKey" PRIMARY KEY("login")
);
проверял, работает.
Записан
Martiro
Гость
« Ответ #13 : Август 01, 2008, 09:36 »

Да... работает. В консоле все ОК, а вот из приложения не получается.
Делаю все на QT3. Записи вставляю с помощью QSqlRecord::setValue(...); для каждого поля:
Код:
curRecord->setValue(fieldUserNumb, iNumber);
curRecord->setValue(fieldUserAddr, writeString(edAddr->text()));
curRecord->setValue(fieldUserPhone, writeString(edPhone->text()));
В поле fieldUserDateedit (время добавления записи) ничего не пишу... оно и не пишется даже после DEFAULT NOW()...
Записан
spirit
Гость
« Ответ #14 : Август 01, 2008, 09:40 »

Да... работает. В консоле все ОК, а вот из приложения не получается.
Делаю все на QT3. Записи вставляю с помощью QSqlRecord::setValue(...); для каждого поля:
Код:
curRecord->setValue(fieldUserNumb, iNumber);
curRecord->setValue(fieldUserAddr, writeString(edAddr->text()));
curRecord->setValue(fieldUserPhone, writeString(edPhone->text()));
В поле fieldUserDateedit (время добавления записи) ничего не пишу... оно и не пишется даже после DEFAULT NOW()...
код отвечает за инсерт или за апдейт?
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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