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

Вниз

параметры в 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;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.034 c
14-1101265400
ИМХО
2004-11-24 06:03
2004.12.12
Почему Москва такой дорогой город?


14-1101033590
ms
2004-11-21 13:39
2004.12.12
Как в VB6 вызвать функцию из библиотеки C++


1-1101704042
Dreamse
2004-11-29 07:54
2004.12.12
Проблема с TreeView


4-1098727684
Anti
2004-10-25 22:08
2004.12.12
Работа со службами


14-1101161834
Rand
2004-11-23 01:17
2004.12.12
Я вернулся!