Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2009, 22:46   #1
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
Смущение Помогите сделать запрос с параметром-датой

Сам написал вот такой код:
Цитата:
var n:Variant;
begin
Mpr.Query1.DatabaseName:='SE';
Mpr.Query1.Close;
Mpr.Query1.SQL.Clear;
Mpr.Query1.SQL.Add('Delete from TableName Date <=: n');
Mpr.Query1.ParamByName('n').Value:= List.DTDate.Date;
Mpr.Query1.ExecSQL;
end;
Вылетает ошибка: 'Query1:Parameter 'n' not found'
(Бд Paradox 7, формат поля Date в базу данных Date)
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Старый 21.12.2009, 23:06   #2
psycho-coder
Участник клуба
 
Аватар для psycho-coder
 
Регистрация: 06.04.2009
Сообщений: 1,524
По умолчанию

Может проще написать так?
Код:
begin
Mpr.Query1.DatabaseName:='SE';
Mpr.Query1.Close;
Mpr.Query1.SQL.Clear;
Mpr.Query1.SQL.Add('Delete from TableName Date');
Mpr.Query1.SQL.Add('Where Date <= '+List.DTDate.Date);
Mpr.Query1.ExecSQL;
end;
Ммм...
psycho-coder вне форума Ответить с цитированием
Старый 21.12.2009, 23:13   #3
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

Так я пробовал, только когда начинаешь прописывать List.DTDate. в вылетающей после точки менюшке нету Date, значит так не правильно.
Чтобы в этом убедиться я специально писал List.DTDate.Date и прога даже не запускалась, выделяя всю строку красным.
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Старый 22.12.2009, 00:24   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

psycho-coder, категорически с Вами не согласен!!
К сожалению, формат даты такая мерзкая штука, зависящая от региональных настроек, что просто ужас.
Поэтому, использовать параметер в запросе — это чуть ли не единственный способ избежать глюков при передачи даты в запрос!!


Herly, двоеточие и название параметра должны быть БЕЗ ПРОБЕЛОВ.
А у Вас, если мне не показалось, пробел перед n?


p.s. так, как предложил psycho-coder можно (НО НЕ НУЖНО!) делать - только нужно дату переводить в строку в нужном формате....
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.12.2009, 08:08   #5
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Код:
  SQL.Clear;
  Parameters.Clear;
  Parameters.AddParameter.Name:='n';
  Parameters.ParamByName('n').DataType:=ftDateTime;
  Parameters.ParamByName('n').Value:=List.DTDate.Date;
SERG1980 вне форума Ответить с цитированием
Старый 22.12.2009, 09:06   #6
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

SERG1980, +1
написанный код абсолютно правилен!
есть два замечания.
1) насколько мне известно, если в Query включено свойство prepared - то введённая строка парсится и параметры и так будут доступны.
2) главное: чтобы использовать этот параметер, в строке SQL запроса, собственно, должен быть параметер n (именно в виде:
Код:
:n
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.12.2009, 09:25   #7
SERG1980
Участник клуба
 
Аватар для SERG1980
 
Регистрация: 28.03.2007
Сообщений: 1,814
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение

2) главное: чтобы использовать этот параметер, в строке SQL запроса, собственно, должен быть параметер n (именно в виде:
Код:
:n
Дык вроде вот здесь этот параметр
Код:
Mpr.Query1.SQL.Add('Delete from TableName Date <=: n');
SERG1980 вне форума Ответить с цитированием
Старый 22.12.2009, 12:16   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Код:
Mpr.Query1.SQL.Add('Delete from TableName Date <=:_n'
а что, пробел в имени параметра разве допускается?!!

Последний раз редактировалось Serge_Bliznykov; 22.12.2009 в 12:22.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 22.12.2009, 16:13   #9
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

Если убрать пробел, то выдаёт новую ошибку: Invalid use of keyvord.
Token : date
По поводу вашего поста Serg1980
У компонента TQuery найти свойства Parametrs мне не удалось(
Если прописать вот так:
Цитата:
var n:Variant;
Begin
Mpr.Query1.DatabaseName:='SE';
Mpr.Query1.Close;
Mpr.Query1.SQL.Clear;
Mpr.Query1.SQL.Add('Delete from TableName Where Date <=:n');
Mpr.Query1.ParamByName('n').DataTyp e:=FtDateTime;
Mpr.Query1.ParamByName('n').Value:= List.DTDate.Date;
Mpr.Query1.ExecSQL;
end;
Вылетает опять ошибка Invalid use of keyvord.
Token : date

Пробовал и так
Цитата:
var n:Variant;
Begin
Mpr.Query1.DatabaseName:='SE';
Mpr.Query1.Close;
Mpr.Query1.SQL.Clear;
Mpr.Query1.SQL.Add('Delete from TableName Where Date <=:n');
Mpr.Query1.Params.AddParam(n);
Mpr.Query1.Params.ParamByName('n'). DataType:=FtDate;
Mpr.Query1.Params.ParamByName('n'). Value:=List.DTDate.Date;
Mpr.Query1.ExecSQL;
Но выдаётся тож ошибка(
Если всё откладывать на потом, то потом будет всё.

Последний раз редактировалось Herly; 22.12.2009 в 17:15.
Herly вне форума Ответить с цитированием
Старый 22.12.2009, 18:42   #10
Herly
Форумчанин
 
Регистрация: 07.11.2009
Сообщений: 118
По умолчанию

После долгих и упорных скитаний по просторам рунета...
Я выяснил что вся моя беда в том что нельзя называть поле зарезервированным словом... В моём случае это слово Date.
Вот что у меня получилось:
Цитата:
var n:String;
begin
n:=DateTostr(List.DTDate.Date);
Mpr.Query1.DatabaseName:='SE';
Mpr.Query1.Close;
Mpr.Query1.SQL.Clear;
Mpr.Query1.SQL.Add('Delete from TableName Where DateB <='''+n+'''');
Mpr.Query1.ExecSQL;
end;
Вот рабочий код.
Тему можно закрывать, спасибо всем кто откликнулся.
Если всё откладывать на потом, то потом будет всё.
Herly вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Помогите сделать запрос Kunia Microsoft Office Excel 1 02.03.2009 11:20
SQL запрос - проблема с датой Serval Помощь студентам 2 22.01.2009 19:35
Запрос с параметром odi_noki Microsoft Office Access 2 17.12.2008 20:07
нужно составить запрос с датой и временем! student90 БД в Delphi 5 26.09.2008 05:43
sql запрос с не статическим параметром? Geddar Помощь студентам 8 25.05.2008 10:13