powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Колонка date
13 сообщений из 13, страница 1 из 1
Колонка date
    #35444335
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таблице есть колонка с типом даты date. Объявлено так:
was_born date,
Пользователь может вносить в эту колонку дату рождения, а может не вносить, также может удалять даты рождения.
Допустим в записи есть дата рождения 17.01.2000 Теперь пользователь хочет убрать это значение из таблицы. Я пишу запрос UPDATE и устанавливаю это значение в NULL. В результате я не получаю пустое значение как мне надо, а получаю дату 30.12.1899
Подскажите как вместо 30.12.1899 получать пустуое значение?
...
Рейтинг: 0 / 0
Колонка date
    #35444364
Ограничения на поле DATE никакого нет? Может там из триггера на автомате проставляется некая дата по умолчанию?
...
Рейтинг: 0 / 0
Колонка date
    #35444380
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эту таблицу в PostgreSQL я сама сделала. Ограничений нет и тригеров тоже. Вот определение:
CREATE TABLE voditeli
(
id_voditel serial NOT NULL,
fam character varying(35) NOT NULL,
name character varying(35) NOT NULL,
otchestvo character varying(35),
was_born date,
telefon_1 character varying(15),
telefon_2 character varying(15),
address character varying(128),
primichanie character varying(128),
foto_vod bytea,
CONSTRAINT pk_id_voditel PRIMARY KEY (id_voditel)
)
WITHOUT OIDS;
ALTER TABLE voditeli OWNER TO postgres;

Откуда берется 30.12.1899 не понятно. :(
...
Рейтинг: 0 / 0
Колонка date
    #35444383
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите, как создана таблица (скрипт).
...
Рейтинг: 0 / 0
Колонка date
    #35444385
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pamirПокажите, как создана таблица (скрипт).Да, и ещё - чем вы смотрите дату? Очень может быть, что это клиент (который отображает дату или получает её) воспринимает NULL как самую малую для него дату.
...
Рейтинг: 0 / 0
Колонка date
    #35444449
pamir[quot pamir]Очень может быть, что это клиент (который отображает дату или получает её) воспринимает NULL как самую малую для него дату.Как вариант, нужно и это проверить.
В частности, убедиться, что в колонке забито (или не забито) такое значение даты можно при помощи запроса.
Код: plaintext
1.
2.
select count( 1 ) as total_cnt, count(was_born) as not_null_date_cnt,
     count(case when was_born = to_date('30.12.1899','dd.mm.yyyy') then  1  end) as null_date_cnt
  from voditeli
...
Рейтинг: 0 / 0
Колонка date
    #35444453
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый Э - Эх pamir[quot pamir]Очень может быть, что это клиент (который отображает дату или получает её) воспринимает NULL как самую малую для него дату.Как вариант, нужно и это проверить.
В частности, убедиться, что в колонке забито (или не забито) такое значение даты можно при помощи запроса.
Код: plaintext
1.
2.
select count( 1 ) as total_cnt, count(was_born) as not_null_date_cnt,
     count(case when was_born = to_date('30.12.1899','dd.mm.yyyy') then  1  end) as null_date_cnt
  from voditeli
Или тупо подключиться pgAdmin'ом и сделать выборку. Он показывает корректно.
...
Рейтинг: 0 / 0
Колонка date
    #35444468
null_date_cnt - тут имеется ввиду количество строк, которое апдейтилось в значение NULL, но которое в итоге стало равным указанной дате. Если этот счетчик покажет 0, то стало быть в таблице нет дат 30.12.1899.
Если же счетчики total_cnt и not_null_date_cnt будут равны, стало быть в таблице нет строк с NULL-значением в поле was_burn. Если же эти счетчики будут различаться, стало быть пустые значения есть.
Все это позволит определить - действительно ли в таблице хранится косячная дата, или же это происки клиентского приложения, неспособного корректно отобразить пустое значение в поле типа date
...
Рейтинг: 0 / 0
Колонка date
    #35444519
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем. Вообщем разобралась. Надо переделать было запрос в программе.
Вот так у меня было сначала и это заносило 30.12.1899, поэтому не правильно:
//код С++ Builder 2007

TDateTime data;
//хочу обулить дату
data = NULL;
SQLvBazy = "UPDATE voditeli SET fam = '"+ Edit1->Text+"'" + ", " +
"name = '" + Edit2->Text +"'" + ", " + "otchestvo = '" + Edit3->Text + "'" + ", " + "was_born = '" + data.DateString() +"'" + ", " + и т.д.
Я предпологала что это занесет пустую строку "" а оно заносило 30.12.1899

Вот так заработало:
AnsiString null = "NULL";
//и надо было убрать одинарные кавычки вокруг null
SQLvBazy = "UPDATE voditeli SET fam = '"+ Edit1->Text+"'" + ", " +
"name = '" + Edit2->Text +"'" + ", " + "otchestvo = '" + Edit3->Text + "'" + ", " + "was_born = " + null + ", " + и т.д.

Сейчас вроде работает нормально...
...
Рейтинг: 0 / 0
Колонка date
    #35444753
Фотография pamir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В качестве послесловия - почитайте что-нибудь про параметризированные запросы. Наверняка в C++ Builder компоненты работы с базой их поддерживают. Если уж в Дельфях такое было с TQuery
...
Рейтинг: 0 / 0
Колонка date
    #35445462
Фотография Степан H.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
это не тама PostgreSQL. Обратитесь в ветку С++ Builder

lena_ki
Сейчас вроде работает нормально...

Поменяйте локализацию в WINDOWS и убедитесь в обратном. )))
так как сделали Вы - не входит ни в какие рамки

как Оффтоп простой пример на Delphi

1. VCL ZEOS

в ZQuery1
Код: plaintext
1.
INSERT INTO k_pmt_tbl(id_bank, rdat, paym, oth) VALUES (:id_bank, :rdat, :paym, :oth);
в коде примерно:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
var MyDate: TDate;
....
ZQuery1.Close;
ZQuery1.ParamByName('rdat').Clear;
ZQuery1.ParamByName('rdat').AsDate:=MyDate;
ZQuery1.ParamByName('paym').AsCurrency:=vpaym;
ZQuery1.ParamByName('oth').AsString:=voth;
ZQuery1.ParamByName('id_bank').AsInteger:=vid_bank;
ZQuery1.Open;
а лучше используйте компонент ZStoredProc
...
Рейтинг: 0 / 0
Колонка date
    #35446300
Фотография lena_ki
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо. Переделаю на запрос с параметрами.
...
Рейтинг: 0 / 0
Колонка date
    #35446812
jikez
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для установки поля в NULL нужно вызывать метода TxxxField->Clear();
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / PostgreSQL [игнор отключен] [закрыт для гостей] / Колонка date
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]