|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#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 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9.
Повторяю ещё раз, медленно: это правильный код и должен работать. Ты в состоянии показать заголовок объявления процедуры и скопипастить ошибку, которую этот код (а не отбалдовые вариации) выдаёт? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 15:20 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakovэто правильный код Точнее сказать, всё-таки "валидный и работоспособный". За повторное использование туалетной бумаги переменных надо бы по голове стучать. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.12.2015, 15:44 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, CREATE OR ALTER PROCEDURE GET_VALUES ( PField2Date date not null, PField1Integer_id integer not null) returns ( ... Ошибка: dm.DSet.SelectQuery: Incompatible column/host variable data type. Dynamic SQL Error. SQL error code = -303. Conversion error from string "31-DEC-2015". ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 02:34 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites Код: sql 1. 2. 3. 4.
Несколько ранее offsites Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10.
Порядок параметров в процедуре то data, integer, то потом integer, data P.S. Никогда не пользуйся кнопкой src в редакторе. Нехай сообщество глаза ломает глядя на неотфомартированный текст. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 04:59 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Граур Станислав, Да, дело было в порядке, спасибо, все работает! И предположить не мог что имена переменных играют второстепенную роль. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 11:52 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Хотя да, подумав понял что ступил сильно. Так ведь во всех процедурах и функциях, порядок нужен )) Чет рассматривал ХП в отрыве от этого (спешка ))) ), решил что нужно просто свалить все переменные туда, а он сам разберется ) ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 12:06 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites, не припомню ЯП, где можно было бы сваливать параметры как попало. Даже в интерпретируемых ЯП оно как соответствие именам параметров должно определять? А уж в компилируемых ЯП (и psql FB) тем более, никак, там просто четкая последовательность. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 13:21 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
offsites, В SQL вообще нет имен переменных, все параметры меняются на знак вопроса http://datasql.ru/proektbd/5.htm https://msdn.microsoft.com/ru-ru/library/ms140355.aspx Как в общем и почти во всех языках, кроме некоторых скриптовых типа VBA PS. в FIB+ разве не показывается чистый код SQL-запроса, безз Дельфийский заморочек? В UIB есть свойство ParsedSQL ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 14:29 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
kdv, VBA - именованые параметры, можно вообще указать только один из десяти ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 14:30 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
kdvоно как соответствие именам параметров должно определять? а ровно так же как в SQL вот смотри сам INSERT xxxxx VALUES (1,2,3,4,5) или INSERT xxxxx SELECT 1,2,3,4,5 FROM rdb$database вот тебе позиционные безымянные параметры а теперь UPDATE xxx SET name1=value1, name2=value2, name3=value3 Вот тебе беспозиционные именованные ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 14:37 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
AriochВот тебе беспозиционные именованные это тебе так кажется. Т.е. если взять просто запрос (не в процедуре или триггере) Код: sql 1.
то они как раз исключительно позиционные. А по именам их разбирают (если могут) компоненты или драйверы. p.s. и вообще я говорил про параметры процедур, о чем упоминал автор топика. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.12.2015, 15:01 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Коллеги, амбисните темному, вот написано, DS пишет, что оно правильно: Params.ParamByName('PField1Integer_id').AsInteger:=1; Params.ParamByName('PField2Date').AsDate:=DateTimePicker1.Date; моя всю жисть писал так: ParamByName('PField1Integer_id').AsInteger:=1; ParamByName('PField2Date').AsDate:=DateTimePicker1.Date; И у меня оно таки работало. Я пропустил чего-то интересное? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2016, 15:19 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyИ у меня оно таки работало. Я пропустил чего-то интересное? Какая разница? Кому как удобней, тот так и пишет. Не бери в голову! ;) Мне, к примеру, нравится так: Код: 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. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41.
И никто меня не убедит в том, что использовать 3-й диалект с названиями объектов БД в нижнем регистре и в двойных кавычках - это плохо. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2016, 18:46 |
|
Передача даты как параметра в хранимую процедуру
|
|||
---|---|---|---|
#18+
Ivan_PisarevskyDS пишет, что оно правильно Во-первых, я не заметил Params. Во-вторых, позже я поправился на "валидный и работоспособный". В-третьих, некоторые наборы компонент действительно имеют ParamByName только в Params. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
02.01.2016, 18:50 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1562414]: |
0ms |
get settings: |
10ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
38ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
74ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 172ms |
0 / 0 |