Форум: "Базы";
Текущий архив: 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.038 c