Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > Параметры запроса


Автор: MacTep 15.7.2004, 13:39
Есть таблица PFond.

Есть запрос:
SELECT *
FROM PFond
WHERE Death="24.04.2000".

Как сделать так, чтобы этот запрос выполнялся не только когда поле Death таблицы PFond равно 24.04.2000, а в любой другой момент, т.е. вместо статического запроса сделать динамический. Например, ввести переменную и сравнивать ее с Death. Мучался долго, но ничего не получилось.

Автор: boevik 15.7.2004, 13:54
Очень не понятный вопрос.
1) Данный запрос будет выполнятся в не зависимости от значений в поле Death. (Будет результат или нет, это уже второй вопрос)
2) Где вводится переменная?
3) На каком языке пишется клиент. (Желательно пример кода с запускам запроса)
4) И на конец, какая база данных. (Хотя это менее важно, в данном вопросе)

Автор: MacTep 15.7.2004, 17:32
База данных - Paradox. Пишется все это дело на Дельфи. Есть форма, в которой вводится дата. А вот в самом запросе все должно сравниваться и выводится. Например есть записи с такими датами: 23.05.2001, 24.05.2001, 26.05.2001. Если запрос будет осуществлен при помощи переменной, то все будет окейно. Например:
d = '24.04.2000' // этот параметр получается из формы предыдущим шагом
SELECT *
FROM PFond
WHERE Death>=d.

Но ведь так нельзя писать. А как можно? Теперь понятно?

Автор: boevik 15.7.2004, 17:37
IMHO, тебе надо просто склеить два стринга, что б получился SQL
SELECT *
FROM PFond
WHERE Death>='24.04.2000' .

А ещё мне кажется, что этот вопрос ближе к теме Делфи, чем к базам данных.

Автор: Cashey 15.7.2004, 18:09
Ну, сначало программно напиши запрос, используя переменную, а потом пошли ее в TQuery

Автор: MacTep 15.7.2004, 23:11
Так как же этот запрос-то правильно написать?
Я пишу так:

Код

         DataSource1.DataSet:=Query1;
         Query1.Close;
         Query1.SQL.Clear;
         Query1.SQL.Add('dd DATE :="29.01.2001";');
         Query1.SQL.Add('SELECT Fam, Name, Otch');
         Query1.SQL.Add('FROM PFond');
         Query1.SQL.Add('WHERE Death>=:dd');
         Query1.ExecSQL;
         Query1.Open;


Но так ни фига не работает. Именно в этом-то мне и нужна помощь.

boevik, я тебя вообще не понял про конкатенацию двух стрингов. Как это сделать? Какие именно стринги брать?

Автор: MacTep 15.7.2004, 23:29
Все, парни, сделал. Понял, что хотел сказать мне boevik. Написал так: в стринговой переменной date хранится дата типа "29.04.2002". А дальше так:

Код

    Table1.Active:=false;
    DataSource1.DataSet:=Query1;
    Query1.Close;
    Query1.SQL.Clear;
    Query1.SQL.Add('SELECT Fam, Name, Otch');
    Query1.SQL.Add('FROM PFond');
    MyQuery:='WHERE Death>="'+date;
    Query1.SQL.Add(MyQuery);
    Query1.ExecSQL;
    Query1.Open;


Вот и все. Спасибо всем огромное. Благодарю! smile.gif rolleyes.gif

Автор: <Spawn> 16.7.2004, 04:58
MacTep ExecSQL делать не нужно - он применяется для DML конструкций.

Код
        DataSource1.DataSet:=Query1;
        Query1.Close;
        Query1.SQL.Clear;
        Query1.SQL.Add('SELECT Fam, Name, Otch');
        Query1.SQL.Add('FROM PFond');
        Query1.SQL.Add('WHERE Death>=:dd');
        Query1.ParamByName('dd').AsDateTime := StrToDateTime('29.01.2001');
        Query1.Open;

Автор: gemoglobin 16.7.2004, 06:25
Вот ответ:

DataSource1.DataSet:=Query1;
Query1.Close;
Query1.SQL.Clear;
Query1.SQL.Add('SELECT Fam, Name, Otch');
Query1.SQL.Add('FROM PFond');
Query1.SQL.Add('WHERE Death>=biggrin.gifd');
Query1.ParamByName('dd').Value = StrToDate("29.01.2001");
Query1.Open;

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)