powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 1.5 + FIBPlus & Date
5 сообщений из 5, страница 1 из 1
FB 1.5 + FIBPlus & Date
    #32389706
IgorL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Брр. Совсем что то запутался.
В FB и Interbase я новичек.

Пытаюсь вставить в поле типа DATA.
Есть переменная в Delphi типа TDataTime (там только дата).
Нужно вставить в поле дату...

SQL(3):
Код: plaintext
1.
2.
3.
INSERT INTO CALLS( CALLDATE,......      )
      VALUES(   :CALLDATE, ..... )


.....
Код: plaintext
1.
2.
pFIBQuery1.Params[ 0 ].AsDateTime:=EncodeDate( 2004 , 1 , 6 );
pFIBQuery1.ExecQuery;

Отлуп :(

Incompatible column/host variable data type.Dynamic SQL Error.
SQL error code = -303.
arithmetic exception, numeric overflow, or string truncation.

причем в SQL мониторе вижу, что
CALLDATE = 06.01.04 (без кавычек и вообще 04 год...)
Что за нафиг? Кривость FIBPlus? (5.1 trial D5)
ОК.

Как тогда дату правильно сгенерить, чтобы в базу прописалось именно 6 января 2004 года, а не скажем 4 июня 01 года?
То есть
pFIBQuery1.Params[0].AsString:='06.01.2004';
вроде пролезает, но "Меня терзают смутные сомнения" (С)
IBExper выгрузил в скрипт поле как '2004-01-06'
А в этом форуме нашел, что :

существует стандарт на разделители. / используется для MM/DD/YYYY. Точка
используется для DD.MM.YYYY. Тире используется для формата DD-MMM-YYYY,
где MMM - строковое представление месяца из трех букв, например JAN, FEB и т.д.

Может
pFIBQuery1.Params[0].AsFloat:=EncodeDate(2004,1,6);

????
...
Рейтинг: 0 / 0
FB 1.5 + FIBPlus & Date
    #32389883
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если работаешь с Делфей то используй синтаксис
FiledByName('DateField').Value := Переменная типа TDateTime(TDate)
...
Рейтинг: 0 / 0
FB 1.5 + FIBPlus & Date
    #32389953
IgorL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У pFIBQuery свойство FieldByName ReadOnly. Не пойдет.
pFIBQuery1.Params[0].Value:=DateTimeVar;
всё равно не работает.

Вопрос в общем то не Delphi и не по FIBPlus/
Как ПРАВИЛЬНО задать дату текстом в запросе на Insert\Update, чтобы FB 1.5 записал в поле типа DATE ПРАВИЛЬНОЕ значение даты?
INSERT INTO CALLS(CALLDATE, .....)
VALUES ('06.01.2004',.....)
или
INSERT INTO CALLS(CALLDATE, .....)
VALUES ('2004-06-01',.....)
Или ещё как????
...
Рейтинг: 0 / 0
FB 1.5 + FIBPlus & Date
    #32389995
Denis Uskov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот только что попробовал код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE TABLE TEST (
    ID     INTEGER NOT NULL,
    NAME   VARCHAR( 10 ),
    ADATE  DATE);

var d : TDate;
begin
  try
    d:=StrToDate(MaskEdit1.Text); // EditMask = ! 99 / 99 / 0000 ; 1 ;_
  except
    d:=Now;
  end;
  pFIBQuery1.ParamByName('OLD_ID').AsInteger:=pFIBDataSet1ID.AsInteger;
  pFIBQuery1.ParamByName('ADATE').AsDate:=d;
  pFIBQuery1.ExecQuery;
  Button2.Click;
end;

pFIBQuery1.SQL = UPDATE TEST SET ADATE = :ADATE WHERE ID = :OLD_ID
pFIBDataSet1.SQL.SelectSQL = SELECT ID, NAME, ADATE FROM TEST

Button2.Click 
  if not pFIBDatabase1.Connected then pFIBDatabase1.Open;
  pFIBDataSet1.CloseOpen(False);


Все работает правильно!
------------------------
С уважением, Denis Uskov
...
Рейтинг: 0 / 0
FB 1.5 + FIBPlus & Date
    #32390140
IgorL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pFIBQuery1.Params[0] .AsDateTime :=EncodeDate(2004,1,6);
Вот где собака порылась. Заменил на AsDate и всё пошло.
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / FB 1.5 + FIBPlus & Date
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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