Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

параметры в ADOQuery


Страницы:   1 2

Sergeich ©   (2004-11-09 18:15:00) 

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

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

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


sniknik   (2004-11-11 08:15:00) [1]

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).


Fay   (2004-11-11 04:53:00) [2]

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


sniknik   (2004-11-10 20:29:00) [3]

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

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


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


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

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


sniknik   (2004-11-09 22:18:00) [5]

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

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


Johnmen   (2004-11-09 22:01:00) [6]

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


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

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


Johnmen   (2004-11-09 19:12:00) [8]

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


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

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


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


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

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


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

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


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

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


Johnmen   (2004-11-09 18:57:00) [13]

>Sergeich   (09.11.04 18:53) [8]

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


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

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:42:00) [15]

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


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

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


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

видимо
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'


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

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


Johnmen   (2004-11-09 18:26:00) [19]

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


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

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;  


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо