Фильтрация по маске даты

kirchatykh
Дата: 27.11.2007 13:19:51
Доброго дня.
На клиентской формочке есть компонент Edit1.
Подключение к mssql2000 через ODBC.
Вопрос: как правильно составить sql-запрос к серверу, чтобы вытянуть все строчки, имеющие в поле Дата_Загрузки дату, соответствующую строчке в Edit1 (например '%2007').

Вот такой код НЕ работает:

AnsiString str0 = "select * from dbo.q_fuel ";
AnsiString filter="";
AnsiString order="order by d_zagruzka ASC, d_sort ASC, d_reis ASC ";

AnsiString CurrentField;
CurrentField="d_zagruzka"

filter=" where " + AnsiString(CurrentField) + " LIKE " + "'" + Edit1->Text + "' " ;

Query1->Close();
Query1->SQL->Clear();
Query1->SQL->Add(str0);
Query1->SQL->Add(filter);
Query1->SQL->Add(order);
Query1->ExecSQL();
Query1->Open();

Похоже, что на сервере данные хранятся в виде "2007-10-05", хотя визуально мы видим "05.10.2007". Т.е. нужно перекидывать DateTime в AnsiString, и потом искать например по маске "%10%". Как это делать? Начинающий пользователь С++Builder.
Naf
Дата: 27.11.2007 13:22:13
с датой лучше работать как с датой, а не как со строкой
Подрезов Александр
Дата: 27.11.2007 13:36:33
Да с датой лучше работать как с датой. Т.е.
вариант 1 сделать преобразование на клиенте StrToDate(localDate),
либо на сервере, в Oracle это to_date(localDate, "DD.MM.RRRR")
Подрезов Александр
Дата: 27.11.2007 13:38:43
И еще до конца не дочитал, в C++ тоже есть подобная функция преобразования, а если хотите формат вывода кувыркать то меняйте маску to_date(localDate, "RRRR.MM.DD")
Wadim S
Дата: 27.11.2007 13:59:48
Используйте типизированные параметры в Query.
kirchatykh
Дата: 27.11.2007 15:05:42
Проблема решена:

filter=AnsiString(" where ") + AnsiString(" CONVERT(varchar(10), ") + AnsiString(CurrentField) + AnsiString(" , 104) ") +AnsiString(" LIKE ") + "'"+ AnsiString(Edit1->Text) + "'";
Альт
Дата: 27.11.2007 15:18:00
блеск )
Megabyte
Дата: 27.11.2007 15:21:36
kirchatykh
Проблема решена:

filter=AnsiString(" where ") + AnsiString(" CONVERT(varchar(10), ") + AnsiString(CurrentField) + AnsiString(" , 104) ") +AnsiString(" LIKE ") + "'"+ AnsiString(Edit1->Text) + "'";

Извращенец.
kirchatykh
...Query1->ExecSQL();
Query1->Open();

Вдвойне извращенец! Нафига тебе здесь ExecSQL()?