Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.07.08;
Скачать: CL | DM;

Вниз

ADO+ODBC Firebird   Найти похожие ветки 

 
elserpiente   (2007-04-11 11:39) [0]

Привет всем!
Столкнулся с такой проблемой:
есть таблица FB, с полем td Timestamp, и программа которая работает с этой таблицей. Программа работает через ADO компоненты.
Вставляю новую запись я с помощью параметров:
adoquery.sql.text = "insert into test (td) values (:ftime)";
adoquery.Parameters.FindParam("ftime").Value = now;
adoquery.execsql
смотрим в таблицу...а там в поле td запись: "11.04.2007 0:00:00".
в adoquery.Parameters.FindParam("ftime").datatype = ftDateTIme;
если же не пользоваться параметрами и вставлять текстом то все работает. Ничего не пойму...мо кто поможет?


 
Desdechado ©   (2007-04-11 12:01) [1]

> в adoquery.Parameters.FindParam("ftime").datatype = ftDateTIme;
Это само определилось или руками выставлял?
Попробуй ftTimeStamp.


 
elserpiente   (2007-04-11 12:22) [2]


> Это само определилось или руками выставлял?

само

> Попробуй ftTimeStamp.

вылетает ошибка "EOleException with message "Arguments are of the wrong type, are out of acceptable range, or are in conflict with one another". Process Project1.exe (1184)"


 
sniknik ©   (2007-04-11 12:55) [3]

> adoquery.sql.text = "insert into test (td) values (:ftime)";
> adoquery.Parameters.FindParam("ftime").Value = now;
> adoquery.execsql
перепиши на
with adocommand do begin
 commandtext:= "insert into test (td) values (:ftime)";
 Parameters.ParamByName("ftime").Value:= now;
 execute;
end;

(не потому, что в твоем ошибка, может и нет, но с идеологически неверным подходом даже начинать разбираться не стоит... я и не буду.)


 
sniknik ©   (2007-04-11 12:58) [4]

и кстати можно обойтись вообще без параметра в FB есть "NOW" возвращающая текущее време... ну если конечно не нужно время именно клиента.


 
elserpiente   (2007-04-11 13:11) [5]


> перепиши на ...

тоже самое
> в FB есть "NOW"

в ФБ нет "NOW",в ФБ есть "current_timestamp".


 
sniknik ©   (2007-04-11 13:29) [6]

> тоже самое
тогда, имхо, дело в провайдере данных.

во всяком случае у меня означенный запрос с параметром работает, и время не режет.

> в ФБ нет "NOW",в ФБ есть "current_timestamp".
странно, но у меня есть... впрочем про current_timestamp тоже слышал, но вот прямо счас не работает, видать ошибка в синтаксисе.


 
Desdechado ©   (2007-04-11 13:36) [7]

> в ФБ нет "NOW",в ФБ есть "current_timestamp".
Зависит от диалекта БД.


 
sniknik ©   (2007-04-11 13:36) [8]

> видать ошибка в синтаксисе.
а. ну понятно, ты же его привел в кавычках, а это переменная
итого "NOW" = CURRENT_TIMESTAMP
вот как есть, без убирания кавычек в одном случае и добавления в другом...


 
sniknik ©   (2007-04-11 13:39) [9]

> Зависит от диалекта БД.
намекаешь на первый? но там вроде нет типа полей Timestamp только либо дата либо тайм... или я путаю? (не работаю с IB/FB, практически не знаю...)


 
Desdechado ©   (2007-04-11 13:43) [10]

sniknik ©   (11.04.07 13:39) [9]
В первом DATE тождественен TIMESTAMP из третьего. Никаких других дато/временных типов в первом больше нет.


 
sniknik ©   (2007-04-11 13:49) [11]

> В первом DATE тождественен TIMESTAMP из третьего.
ага, тогда вариант у него первый диалект, тип не Timestamp а DATE, ADO определяет тип поля как DATE и "режет"/конвертирует тип под него, хотя это на самом деле дататайм...

elserpiente
попробуй тогда, указать тип явно
with adocommand do begin
 commandtext:= "insert into test (td) values (:ftime)";
 Parameters.ParamByName("ftime").DataType:= ftDateTIme;
 Parameters.ParamByName("ftime").Value:= now;
 execute;
end;

т.е. то же самое что в [0], только надо присвоить.

помогло?


 
elserpiente   (2007-04-11 15:25) [12]


> помогло?

нет конечно


 
sniknik ©   (2007-04-11 16:47) [13]

>> помогло?
> нет конечно

>> тоже самое
> тогда, имхо, дело в провайдере данных.


 
Jan1   (2007-04-11 20:23) [14]


> >> тоже самое
> > тогда, имхо, дело в провайдере данных.

не-а :) глюк в ADO а именно с параметрами. Если сделать через датасет, то все будет ОК.


 
Johnmen ©   (2007-04-11 20:31) [15]


> в ФБ нет "NOW",в ФБ есть "current_timestamp".

Куда же делось "NOW"? И откуда такие шокирующие факты?


 
Johnmen ©   (2007-04-11 20:32) [16]

да, и глюк не в АДО, а в провайдере данных (с) [13]


 
elserpiente   (2007-04-12 09:33) [17]


>
> > в ФБ нет "NOW",в ФБ есть "current_timestamp".
>
> Куда же делось "NOW"? И откуда такие шокирующие факты?

прогнал ;)
а вопрос решился заменой провайдера на http://www.ibprovider.com/ ;) Спасибо Коваленко Диме с рсдн ;)


 
Johnmen ©   (2007-04-12 09:59) [18]


> Спасибо Коваленко Диме с рсдн ;)

Вот на расдн и говори ему спасибо.
А здесь спасибо надо говорить Desdechado,  sniknik и Johnmen.
:)))


 
Jan1   (2007-04-12 10:12) [19]


> да, и глюк не в АДО, а в провайдере данных (с) [13]

пробовал через TADODataSet?


 
Jan1   (2007-04-12 10:15) [20]


> а вопрос решился заменой провайдера на http://www.ibprovider.com

Только учти  что он денег стоит...

Кстати багу с параметром можно обойти так:

adoquery.sql.text = "insert into test (td) values (cast(:ftime as timestamp))";
adoquery.Parameters.ParamByName("ftime").DataType := ftString;
adoquery.Parameters.ParamByName("ftime").Value := FormatDateTime("yyyy-mm-dd hh:nn:ss.zzz", Now);
adoquery.execsql


 
elserpiente   (2007-04-12 11:36) [21]


> Только учти  что он денег стоит...

есть фриварній провайдер
в лицензии на него написано:
The "Free IBProvider" is freeware. It means:
...
2.Anyone does not have to pay to use it for private or commercial usage
...
взято с http://www.ibprovider.com/eng/license/lic_free.html

> Кстати багу с параметром можно обойти так:

гимор ;).
Скорей всего проблема была в ОДБС фаербёрда


 
sniknik ©   (2007-04-12 12:51) [22]

> Скорей всего проблема была в ОДБС фаербёрда
русский язык понимаем? сколько раз надо повторить чтобы дошло? (3х раз ([6][13][16]) в одной ветке явно недостаточно)

p.s. у фаербёрда нет ОДБС. лучше бы уж молчал.


 
elserpiente   (2007-04-12 13:04) [23]


> > Скорей всего проблема была в ОДБС фаербёрда
> русский язык понимаем? сколько раз надо повторить чтобы
> дошло? (3х раз ([6][13][16]) в одной ветке явно недостаточно)

Чтоб убедится, надо самому все проверить.. ;)

> p.s. у фаербёрда нет ОДБС. лучше бы уж молчал.

не придерайся.
Всем Удачи!



Страницы: 1 вся ветка

Текущий архив: 2007.07.08;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.022 c
2-1181313162
Infinityx93
2007-06-08 18:32
2007.07.08
проверить на интежер


3-1176195112
bss
2007-04-10 12:51
2007.07.08
Обновление DBLookupComboBox при изменении данных в List


4-1170202435
Gukov
2007-01-31 03:13
2007.07.08
как получить хэндл потока


2-1181812628
emilya_o
2007-06-14 13:17
2007.07.08
key violation


15-1181381873
ZeroDivide
2007-06-09 13:37
2007.07.08
COM-порт на новом железе