Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Вниз

параметры в ADOQuery   Найти похожие ветки 

 
Sergeich   (2004-11-09 18:15) [0]

задаю такой запрос

update Shift
set EndTime = :par1
where ID = :par2

при попытке задать значения параметров выдается сообщение об ошибке  в типах данных(EndTime - поле типа дататайм ,par1 залдаю строкой). Как мне правильно установить параметры? Дело в том, что запросы создаются в рантайм, и параметры к ним  - все в вариантах.


 
Johnmen ©   (2004-11-09 18:17) [1]

Код давай.


 
Sergeich   (2004-11-09 18:20) [2]

TmpQuery.Parameters.Clear;
         TmpQuery.SQL.Text:=TTransactionQuery(TransactionType.Queries.Items[query_counter]).QueryText;
         for par_counter:=0 to ParamCount-1 do
           begin
              with TmpQuery.Parameters.AddParameter do begin
               Name:=  TParam(TTransactionQuery(TransactionType.Queries.Items[query_counter]).QueryParameters.Items[par_counter]).Name;
               Value:= LogString[TParam(TTransactionQuery(TransactionType.Queries.Items[query_counter]).QueryParameters.Items[par_counter]).Pla ce];
            end;

           end;  


 
Johnmen ©   (2004-11-09 18:26) [3]

with TmpQuery do begin;
 SQL.Text:=TTransactionQuery(TransactionType.Queries.Items[query_counter]).QueryText;
 ParamByName("par1").Value:=<значение параметра par1>;
 ParamByName("par2").Value:=<значение параметра par2>;
 ExecSQL;
 end;  


 
Johnmen ©   (2004-11-09 18:27) [4]

Да, и Close сперва. На всякий случай...:)


 
Sergeich   (2004-11-09 18:37) [5]

видимо
Parameters.ParamByName("par1").Value:=<значение параметра par1>;?

project synchronize.exe raised exception class EOLEException with message "Application uses a value of the wrong type for the current operation"


 
Sergeich   (2004-11-09 18:39) [6]

забыл упомянуть - MSSQL 2000
Provider=SQLOLEDB.1


 
Johnmen ©   (2004-11-09 18:42) [7]

Приводи код, и запрос. Ещё раз...:)


 
Sergeich   (2004-11-09 18:53) [8]

TmpQuery.Close;
         TmpQuery.SQL.Text:=TTransactionQuery(TransactionType.Queries.Items[query_counter]).QueryText;
         for par_counter:=0 to ParamCount-1 do
           begin
             TmpQuery.Parameters.ParamByName(TParam(TTransactionQuery(TransactionType.Queries.Items[query_counter]).QueryParameters.I tems[par_counter]).Name).Value
               :=LogString[TParam(TTransactionQuery(TransactionType.Queries.Items[query_counter]).QueryParameters.Items[par_counter]).P lace];
             
           end;
         //запускаем запрос на выполнение
         try
          TmpQuery.ExecSQL;
   
         except
     
         end


 
Johnmen ©   (2004-11-09 18:57) [9]

>Sergeich   (09.11.04 18:53) [8]

Ты, что [3] не читал ? Почитай, найди семь различий...:)


 
Sergeich   (2004-11-09 18:57) [10]

при стринг полях ошибки нет, однако если среди запроса идет присвоение полю типа дататайм(параметр - вариант типа строка),прямо на операторе присвоения вываливается  это исключение


 
Sergeich   (2004-11-09 19:01) [11]


> Johnmen ©   (09.11.04 18:57) [9]

читал и делал, что видно в [8] - результат тот же
Query Analyzer такие запросы проглатывает на ура.


 
Johnmen ©   (2004-11-09 19:01) [12]

А...
Полю дататаймового типа надо присваивать значение дататаймового типа.


 
Sergeich   (2004-11-09 19:08) [13]

так я беру эти значения , как строку из другой базы, например:
"2004-11-03 13:54:08.000"
как мне передать этот параметр моему запросу?


 
Johnmen ©   (2004-11-09 19:12) [14]

А ты бери как дататайм.
Во всех других случаях столкнёшься с некоторыми проблемами...


 
Sergeich   (2004-11-09 19:15) [15]

если бы все так просто
на входе у меня текстовый файл


 
Johnmen ©   (2004-11-09 22:01) [16]

Тогда преобразовывай строку к дататайму, учитывая текущие региональные установки.


 
sniknik ©   (2004-11-09 22:18) [17]

вообше "2004-11-03 13:54:08.000" это каноническая форма представления даты (ODBC), должно "проглатываться" MSSQL-ем.

> Query Analyzer такие запросы проглатывает на ура.
проверил в ADO (чем черт не шутит), нормально, тоже проглатывает (только "ура" почемуто не говорит ;о)))


 
Sergeich   (2004-11-10 13:26) [18]


> sniknik ©   (09.11.04 22:18) [17]

Я говорю про подстановку значений параметрам запроса.Если прямо в текст запроса ввести константу "2004-11-03 13:54:08.000", он выпонится без проблем и из ADOQuery.Однако даже в design-time установить параметр запроса, как в [0] не получается(ConnectionString при этом указан).Подскажите, как удалось заставить? Возможно, дело в лок. настройках[16]?


 
sniknik ©   (2004-11-10 20:29) [19]

не заставлял, попросил. ;о))

без шуток, ничего не делал особенного(скорее у тебя с извратом), просто твой запрос (свои таблицы/поля подставил) выполнил, также строку в параметр загнал (твою же отсюдя скопированную), запустил... ошибок нет, дата изменилась.
правда у меня параметры немного не так задаются (есть причина) но это не должно влиять... (имею ввиду конечно код от Johnmen-а а не то что ты написал)
у меня так
Parameters.CreateParameter(Copy(sPar, 2, 9), ftString, pdInput, Length(AddParamForm.ArFr[i].StrEdit.Text), AddParamForm.ArFr[i].StrEdit.Text);
(просто написана прога для тестов, для того чтобы не писать на каждый вопрос отдельную программу, в ней так задается)
тебе это не пойдет(!!!) сейчас, нужно еще пара условий чтобы это использовать (отключить автоопределение параметров и запрос задавать в старой форме с вопросами вместо параметров).


 
Fay ©   (2004-11-11 04:53) [20]

2 sniknik ©   (09.11.04 22:18) [17]
Точнее yyyymmdd hh:nn:ss.zzz


 
sniknik ©   (2004-11-11 08:15) [21]

Fay ©   (11.11.04 04:53) [20]
нет, это уже форма MSSQL - евсская, тоже ему естественно понятная, но говорили именно про ODBC формат.


When specifying dates in comparisons or for input to INSERT or UPDATE statements, use constants that are interpreted the same for all language settings:
ADO, OLE DB, and ODBC applications should use the ODBC timestamp, date, and time escape clauses of:
{ ts "yyyy-mm-dd hh:mm:ss[.fff] "} such as: { ts "1998-09-24 10:02:20" }
{ d "yyyy-mm-dd"} such as: { d "1998-09-24" }
{ t "hh:mm:ss"} such as: { t "10:02:20"}

Applications using other APIs, or Transact-SQL scripts, stored procedures, and triggers, should use the unseparated numeric strings (for example, yyyymmdd as 19980924).



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

Форум: "Базы";
Текущий архив: 2004.12.12;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.49 MB
Время: 0.053 c
4-1098688328
VZup
2004-10-25 11:12
2004.12.12
SetWindowText - не отправляется в Edit


1-1101541575
Igor_thief
2004-11-27 10:46
2004.12.12
Хинт


1-1101838448
Ермак
2004-11-30 21:14
2004.12.12
Всплывающая подсказка ТОЛЬКО в StatusBar


1-1101721431
Брат
2004-11-29 12:43
2004.12.12
Динамическое создание объекта


1-1101392626
SV
2004-11-25 17:23
2004.12.12
Изменение позиции формы.





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский