Форум: "Базы";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
ВнизЗапрос к MSSQL через ADOQuery c параметрами Найти похожие ветки
← →
dmitry501 © (2005-05-06 11:08) [0]Здравствуйте. Передаю запрос SQL серверу примерно вот так:
frmDM.queryAcc.SQL.Add("SELECT State, PavilionID, PacketType, CreateTime, TimeToCreate, TimetoSend, FileSize");
frmDM.queryAcc.SQL.Add("FROM DataPackets WHERE (CreateTime BETWEEN :p1 AND :p2) AND (PavilionID IN (:p3)) AND (State = :p4)");
frmDM.queryAcc.Parameters[0].DataType:= ftDate;
frmDM.queryAcc.Parameters[1].DataType:= ftDate;
frmDM.queryAcc.Parameters[2].DataType:= ftString;
frmDM.queryAcc.Parameters[3].DataType:= ftString;
frmDM.queryAcc.Parameters[0].Value := dtpBegin.Date;
frmDM.queryAcc.Parameters[1].Value := dtpEnd.Date;
frmDM.queryAcc.Parameters[2].Value := "7, 8";
frmDM.queryAcc.Parameters[3].Value := "2";
При выполнении ругается - "Syntax error converting the varchar value "7, 8" to a column of data type int"
Причем в Enterprise Manager запрос
SELECT State, PavilionID, PacketType, CreateTime, TimeToCreate, TimetoSend, FileSize
FROM DataPackets
WHERE (CreateTime BETWEEN " 05/05/ 2005 " AND " 05/06/ 2005 ") AND (PavilionID IN (7; 8)) AND (State = 2)
нормально возвращает строки.
Ткните, пожалуйста, носом а ошибку....
← →
Nikolay M. © (2005-05-06 11:13) [1]
> Ткните, пожалуйста, носом а ошибку....
> IN (:p3)
> frmDM.queryAcc.Parameters[2].Value := "7, 8";
Через параметры не прокатит.
← →
Johnmen © (2005-05-06 11:15) [2]Устойчивая тема :)
Фактически :p3 не параметр, а макроподстановка. Делай выводы...
← →
Ozone © (2005-05-06 11:16) [3]> [1] Nikolay M. © (06.05.05 11:13)
В Oracle такая конструкция прокатывала
← →
dmitry501 © (2005-05-06 11:18) [4]Что ж, спасибо. Жаль.
← →
Polevi © (2005-05-06 11:18) [5]frmDM.queryAcc.Parameters[2].Value := QuotedStr("7, 8");
← →
Polevi © (2005-05-06 11:19) [6]ups, sorry
← →
Danilka © (2005-05-06 11:20) [7][3] Ozone © (06.05.05 11:16)
нет, не прокатывала.
а по теме, твой запрос с параметрами и вот-этот:SELECT State, PavilionID, PacketType, CreateTime, TimeToCreate, TimetoSend, FileSize
FROM DataPackets
WHERE (CreateTime BETWEEN " 05/05/ 2005 " AND " 05/06/ 2005 ") AND (PavilionID IN (7; 8)) AND (State = 2)
это две разные вещи. запусти Profiler и увидишь, что на самом деле уходит на сервер.
← →
dmitry501 © (2005-05-06 11:35) [8]Да, спасибо, посмотрел.
SET FMTONLY ON select CreateTime,CreateTime,PavilionID,State from DataPackets SET FMTONLY OFF
SET FMTONLY ON SELECT State, PavilionID, PacketType, CreateTime, TimeToCreate, TimetoSend, FileSize
FROM DataPackets WHERE (CreateTime BETWEEN "01-01-1992 01:01:01:000" AND "01-01-1992 01:01:01:000") AND (PavilionID IN (0)) AND (State = 0)
SET FMTONLY OFF
exec sp_executesql N"SELECT State, PavilionID, PacketType, CreateTime, TimeToCreate, TimetoSend, FileSize
FROM DataPackets WHERE (CreateTime BETWEEN @P1 AND @P2) AND (PavilionID IN (@P3)) AND (State = @P4)
", N"@P1 datetime,@P2 datetime,@P3 varchar(6),@P4 varchar(4)", "May 4 2005 1:51:40:000PM", "May 4 2005 1:52:03:000PM", """7, 8""", "2"
Кроме всего прочего, еще и в дату не преобразовал, а оставил DateTime....
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2005.06.14;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.038 c