Тема: Sql
Показать сообщение отдельно
  #8  
Старый 31.05.2007, 11:01
AlexSku AlexSku вне форума
Специалист
 
Регистрация: 07.05.2007
Адрес: Москва
Сообщения: 884
Репутация: 21699
По умолчанию

Извини, похоже, рано я тебя обнадёжил - забыл про апострофы (а как же можно сосредоточиться, глядя на такое фото?) и в результате строковые переменные попали вовнутрь константы. Надо было так:
Код:
clm.SQL.Text:='select *'+
' from my_live_rol'+
' where date_b between CONVERT(DATETIME, ' +
sdt + ', 104) and CONVERT(DATETIME, ' +
sdt0 + ', 104)'
Это я так делал не на Delphi, а на Java (БД MS SQL Server 2005), а на Delphi (БД InterBase) делал по-другому. Брал компоненты TIBTransaction и TIBQuery, в TIBQuery.SQL при проектировании записывал запрос с параметрами:
Код:
select *
from my_live_rol
where date_b between
CONVERT(DATETIME, :psdt, 104) and
CONVERT(DATETIME, :psdt0, 104)
Свойства параметров надо настроить (в Object Inspector):
DataType = ftString , ParamType = ptInput.
После открытия БД можно послать предварительную подготовку:
Код:
Query1.Prepare;
Тогда запрос будет быстро обрабатываться.
Код:
with Query1 do
begin
  Close;
  Params.ParamValues['psdt']:= sdt;
  Params.ParamValues['psdt0']:= sdt0;
  ExecSQL;
end;
Немного муторно, но интересно.
Ответить с цитированием