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

Вниз

Запрос к 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;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.024 c
10-1093705417
Ragazor
2004-08-28 19:03
2005.06.14
Как достать картинку из Excel документа


9-1110792899
GLSceneFan
2005-03-14 12:34
2005.06.14
Важное объявление


3-1115364255
Mozart
2005-05-06 11:24
2005.06.14
Сохранить внешний вид таблицы.


8-1109668309
Ivolg
2005-03-01 12:11
2005.06.14
Инфо о видео файле


14-1116781286
raidan
2005-05-22 21:01
2005.06.14
Вести в 20.00 от 22 мая