Форум: "Базы";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];
ВнизВывести значения, ограниченные датами Найти похожие ветки
← →
Dbrf (2002-10-28 16:17) [0]В edit1 значение начальной даты, в edit2 - конечной.
procedure TForm1.Button1Click(Sender: TObject);
begin
with query1 do begin
sql.clear;
sql.Add("select*from main ");
sql.Add("where datB between "" + edit1.text + """);
sql.Add("and "" + edit2.text + """);
execSQL; end;
end;
Подскажите, пожалуйста, как изменить вышеуказанный код, чтобы данные из базы выдавались корректно и не возникало ошибки, связанной с переводом даты в строку.
← →
stone (2002-10-28 16:20) [1]первой строкой в запросе должна быть
SET DATEFORMAT DMY (где D-day, M-month, Y-year)
← →
3JIA9I CyKA (2002-10-28 17:00) [2]Передавай в формате yyyymmdd hh:nn:ss.zzz
← →
Darts (2002-10-28 17:11) [3]1. Переменные, отвечающие за даты, формируй отдельно. После этого закидывай в тнело формируемого запроса. Легче отлаживать.
2. Записывай, к примеру так, Query1.SQL.SaveToFile("d:\3.sql"); Не открывай запрос Query1.Open. Затем открываешь 3.sql, вырезаешь код и вставляешь в SQL Explore (найдешь в меню Дельфи). Отладишь - закомментируй вывод в файл и открывай запрос. Сэкономишь кучу времени.
3. Заключай запрос в try...except...end. Мало чтоли будет?
← →
3JIA9I CyKA (2002-10-28 18:06) [4]>> 2. .......
?
← →
Darts (2002-10-28 18:19) [5]Вот реальный код.
s1 := FormatDateTime("mm"/"dd"/"yyyy", DateTimePicker1.Date);
s1 := Chr(34) + s1 + Chr(34);
s2 := FormatDateTime("mm"/"dd"/"yyyy", DateTimePicker2.Date);
s2 := Chr(34) + s2 + Chr(34);
with DataModule2.QueryReport1 do begin
Close;
SQL.Clear;
SQL.Add(" SELECT orderdate FROM orders");
SQL.Add(" WHERE (orderdate >= " + s1 );
SQL.Add(" AND orderdate <= " + s2 + ")");
SQL.Add(" ORDER BY orderdate");
SQL.SaveToFile("d:\3.sql");
//Open;
end;
Заметь, что я сначала формирую текстовой файл 3.sql, затем я открываю данный файл, копирую содержимое в буфер, вставляю в SQL Explore (там есть окно SQL) для данной таблицы и проверяю. Если все OK, закорачиваю строку с SQL.SaveToFile("d:\3.sql") и расскоментариваю Open.
← →
Snake (2002-10-29 05:45) [6]Это железно работает для Access через ADO, возможно и для MS SQl сработает:
function DateToSQL(ADate : TDate) : string;
begin
DateSeparator:="/";
DateTimeToString(Result, "mm/dd/yyyy", ADate);
Result:="#"+Result+"#"
end;
procedure TMainForm.RepAbonPaidsActExecute(Sender: TObject);
var SQL, DF, DT : string;
DateFrom, DateTo : TDateTime;
begin
DF:=DateToSQL(DateFrom);
DT:=DateToSQL(DateTo);
SQL:="SELECT * FROM AbonPaids WHERE (AbonPaids.Dat BETWEEN "+DF+" AND "+DT+")";
ADOQuery.SQL.Add(SQL);
ADOQuery.Open;
end;
← →
Victor_Cr (2002-10-29 09:29) [7]Да не мучай себе голову создай два параметра типа TDateTime и передавай их запросу:
// DF - начальная дата;
// DT - конечная дата;
SQL:="SELECT * FROM AbonPaids WHERE "+
"YOURdate >= :Start and YOURdate <= :End";
ADOQuery.SQL.Add(SQL);
ADOQuery.ParamByName("Start").AsDateTime := DF;
ADOQuery.ParamByName("End").AsDateTime := DT;
ADOQuery.Open;
Страницы: 1 вся ветка
Форум: "Базы";
Текущий архив: 2002.11.18;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.007 c