|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Здравствуйте, подскажите как вылечить. В хранимой процедуре входящий параметр PDate1 типа Date. используется так ... WHERE Date1=:PDate1 Из FIBDataset вызываю процедуру: SelectSQL.Add('SELECT * FROM StoredProcName(:PDate1, ...)'); Prepare; Params.ParamByName('PDate1').AsDate:=MyDate; // MyDate любой пробовал и NOW и как строку '30.12.2015' по всякому Попадая в запрос MyDate становится похожа на '30-DEC-2015' Вываливается ошибка: Incompatible column/host variable data type. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 03:49 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsitesВ хранимой процедуре входящий параметр PDate1 типа Date. используется так ... WHERE Date1=:PDate1 Попадая в запрос MyDate становится похожа на '30-DEC-2015' Вываливается ошибка: Incompatible column/host variable data type. Вызови процедуру из IbExpert , если работает тогда тебе в соседний форум по дельфи. P.S. Покажи саму процедуру. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 04:27 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Граур СтаниславПокажи саму процедуру. В процедуре параметр как строка, как пить дать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 08:41 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites, при использовании в SQL скрипте предпочитаю указывать дату в ISO формате, т.к. этот формат универсален и поддерживается практически всеми rdbms. В Firebird он также поддерживается, но вместо разделителя 'T' между датой и временем используется [пробел]. Код: plsql 1.
Из Delphi лучше использовать переменные типа TDateTime. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 09:31 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsitesParams.ParamByName('PDate1').AsDate:=MyDate; // MyDate любой пробовал и NOW и как строку '30.12.2015' по всякому Врёшь. На строку у тебя должна была ругаться Delphi, поскольку она несовместима с TDateTime в принципе. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 13:32 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, да в .Value он пихает, почти наверняка ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:10 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Ariochда в .Value он пихает, почти наверняка ССЗБ. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:11 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsitesSelectSQL.Add('SELECT * FROM StoredProcName(:PDate1, ...)'); чисто процедурное лучше Код: pascal 1.
Мало ли что у тебя там УЖЕ было, во-первых. Ну и разные TStrings.BeginUpdate/EndUpdate автоматически ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:13 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Проверь после присвоения значения чему равен ParamByName('PDate1').DataType (или FieldType, не помню) Если ты присвоение выполнил правильно, то он должен стать типа ftDateTime ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:14 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Особенно хорошо в Value=AsDouble лягут Now() и Date() Хотя и в компонентах бывают неожиданности, я сейчас с UIB разщвлекаюсь, там у параметров-блоблв .AsxxxString не работают, нужно обходными путями. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:17 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Arioch, нашел вот такое-вот, не знаю оно или нет ShowMessage(IntToStr(Params.ParamByName('field').SQLType)); Возвращает у поля типа дата значение 510. таблицу соответствия кодов типам данных не нашел, но проверил, если тип Integer, тогда значение 496 (т.е. отличается, а видимо и работает). ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:33 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, под строкой подразумевалось установка формата даты руками, т.е. StrToDate('12.12.1222'), чтобы случайно не вышло 12/12/1222. И еще в ХП тип данных поля менялся с Date на Varchar(10), и тогда просто стринг через параметр. В общем пробовал по всякому ) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:36 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites, Граур СтаниславПокажи саму процедуру. wadmanВ процедуре параметр как строка, как пить дать. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:36 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
TIMESTAMP еще тип в SP попробуй ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:37 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Процедуру проверял в IBExpert. При запуске высвечивается окошко для ввода значения входных параметров типа Date и Integer (у меня 2 входных параметра). Все отрабатывает без проблем, т.е. с ХП проблем нет. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:39 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsitesВ общем пробовал по всякому ) По-всякому - не надо. Твой пример из первого поста должен работать. Если нет - давай точный код, который не работает. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:40 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsitesнашел вот такое-вот, не знаю оно или нет ShowMessage(IntToStr(Params.ParamByName('field').SQLType)); Нет, тоже интересно, но не оно. Это тип данных в терминах SQL, как думает FIB+ А меня интересовал тип данных в терминах Delphi http://docwiki.embarcadero.com/Libraries/XE8/en/Data.DB.TParam.DataType "Возвращает у поля типа дата значение 510. таблицу соответствия кодов типам данных не нашел" Берешь исходники Firebird и смотришь. Вариант, берешь исходники Unified Interbase и смотришь. Вариант, берешь исходники FIB+ и смотришь. Искать в районе присвоения значений полям и параметрам - там как раз будут простыни методов перевода данных между типами Delphi и типами IB/FB Спесьял фа йа uibase.pas .... (******************* * SQL definitions * *******************) SQL_TEXT = 452; // Array of char SQL_VARYING = 448; SQL_SHORT = 500; SQL_LONG = 496; SQL_FLOAT = 482; SQL_DOUBLE = 480; SQL_D_FLOAT = 530; SQL_TIMESTAMP = 510; SQL_BLOB = 520; SQL_ARRAY = 540; SQL_QUAD = 550; SQL_TYPE_TIME = 560; SQL_TYPE_DATE = 570; SQL_INT64 = 580; {$IFDEF FB30_UP} SQL_BOOLEAN = 32764; {$ENDIF} {$IFDEF FB25_UP} SQL_NULL = 32766; {$ENDIF} {$IFDEF IB7_UP} SQL_BOOLEAN = 590; {$ENDIF IB7_UP} (* Historical alias for pre V6 applications *) SQL_DATE = SQL_TIMESTAMP; .... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:42 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, with dm.DSet do begin Active:=False; SelectSQL.Text:='SELECT * FROM GET_VALUES(:PField1Integer_id, :PField2Date)'; Prepare; Params.ParamByName('PField1Integer_id').AsInteger:=1; Params.ParamByName('PField2Date').AsDate:=DateTimePicker1.Date; Active:=True; end; ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:43 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites, попробуй ...AsDateTime := DateTimePicker1.Date; или ...AsTimeStamp := DateTimePicker1.Date; если такое есть твоя цель - правильно выставленный у параметра .DataType И кстати тебе в принципе никто не запрещает отладить этот вызов .AsDate := xxx внутрь VCL/FIB+ Равно как и отладить вызов Active := 'false'; Цель все та же, понять выставляется ли DataType у параметра. Если да - то как это учитывается при переводе значения в формат FB Если нет - то почем не выставляется И еще интересно, есть ли в FIB+ разные настройи по передаче даты в разных версиях IB/FB Если дата действительно библиотекой превращается в строку... ...тогда тем более, отлаживай внутренности Active := False и наткнегшься на вычитывнаи параметров где и будет провер всех этих настроек, если они есть. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:51 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Равно как и отладить вызов Active := 'false'; Читать "Active := TRUE" ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:51 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
DBConstructor, Не всегда в используемых компонентах типа календарь (на клиенте они могут быть разными) есть Time. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:53 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites, тип все равно один и тот же type TDate = type double; type TTime = type double; type TDateTime = type double; хотя по факту Date=trunc(DateTime) и Time=frac(DateTime) но промежуточная переменная имеет смысл - ты во-первых фиксируешь значение в переменной и всегда при отладке можешь в неё глянуть, во вторых разносишь по разным строкам разные операции "вычитать значение из контрола" и "занести значение в параметp". для отладки помогает - разделяй и властвуй. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:56 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Впрочем в том же UIB сделано правильно (TParam/TField).AsDateTime : TDateTime==double (TParam/TField).AsDate : word Хочешь или нет - будешь транковать ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 14:59 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Многое перепробовал с конвертацией asDateTime, Timestamp, пока ничего Params.ParamByName('blabla').AsTimeStamp:=DateTimeToTimeStamp(DateTimePicker1.Date); Идея ясна, буду биться, решу - отпишусь, спасибо. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 15:00 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
перебирать варианты подряд - это комбинаторный взрыв. тебе нужно адресно проверить два наиболее вероятных места AriochЦель все та же, понять выставляется ли DataType у параметра. Если да - то как это учитывается при переводе значения в формат FB Если нет - то почему не выставляется После чего станет яснее что и как выправлять Use the source, Luke! ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 15:02 |
|
|
start [/forum/topic.php?fid=40&msg=39140672&tid=1562414]: |
0ms |
get settings: |
10ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
41ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
64ms |
get tp. blocked users: |
2ms |
others: | 16ms |
total: | 170ms |
0 / 0 |