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

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

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.04.2013, 19:02   #1
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию Удаление и добавление в Access

Доброго всем времени суток! У меня есть база MS Access, в ней есть поле data. Нужно, чтобы при запуске приложения изменялась БД, т.е. удалялись все строки с прошедшей датой и добавлялись строки с новой датой. Промежуток дат 3 недели (например от 01.04.2013 до 21.04.2013). Поле data имеет тип дата/время.
Начал сначала реализовывать удаление, написал код, но не пойму почему выдает ошибку "несоответствие типов данных в выражении условия отбора".
Вот код
Код:
procedure TForm1.izmenenie_BD;
var str:string; id:integer; data1,data2:TDateTime;
begin
  data1:=date;
  data2:=date-2; //для примера написал так
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('DELETE FROM raspisanie WHERE data BETWEEN ''data2'' AND ''data1''');
  Form1.ADOQuery1.Open;
end;
Fireblade-fan вне форума Ответить с цитированием
Старый 03.04.2013, 19:08   #2
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

что не понятно в ошибке?
eval вне форума Ответить с цитированием
Старый 03.04.2013, 19:11   #3
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
что не понятно в ошибке?
все понятно, но типы данных везде одинаковые. Пробовал удалять по id, выскакивает та же ошибка, хотя и там и там тип числовой
Fireblade-fan вне форума Ответить с цитированием
Старый 03.04.2013, 19:17   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

И что это за константы такие 'data1' и 'data2'? И в таблице данные в этом поле в таком виде
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2013, 19:18   #5
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

гдеж одинаковые? гиворите что -
Цитата:
Поле data имеет тип дата/время
, а подаете ему какие-то странные строки 'data1' и 'data2'... вот вас и обругало
eval вне форума Ответить с цитированием
Старый 03.04.2013, 19:25   #6
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
И что это за константы такие 'data1' и 'data2'? И в таблице данные в этом поле в таком виде
а что, в коде не видно что это за константы? ))
Если есть ошибка, то скажи, где я ошибся. Это мое первое приложение с БД, так что не надо сильно издеваться ))
Fireblade-fan вне форума Ответить с цитированием
Старый 03.04.2013, 19:26   #7
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от eval Посмотреть сообщение
гдеж одинаковые? гиворите что -
, а подаете ему какие-то странные строки 'data1' и 'data2'... вот вас и обругало
Да, я подозревал на это, но и с числовыми типами такая же фигня
вот:
Код:
procedure TForm1.izmenenie_BD;
var str:string; data1,data2:integer;
begin
  data1:=1;
  data2:=3; //äëÿ ïðèìåðà íàïèñàë òàê
  ADOQuery1.SQL.Clear;
  ADOQuery1.SQL.Add('DELETE FROM raspisanie WHERE id BETWEEN ''data1'' AND ''data2''');
  Form1.ADOQuery1.Open;
end;
Не в запросе случайно ошибка? И если тип TDateTime не совместим с Access, тогда как сделать? Может в таблице полю data задать тип "текстовый" и в программе, в цикле, сравнивать со значением текущей даты, и если они не равны, то удалять запись

Последний раз редактировалось Fireblade-fan; 03.04.2013 в 19:33.
Fireblade-fan вне форума Ответить с цитированием
Старый 03.04.2013, 19:30   #8
eval
Подтвердите свой е-майл
 
Регистрация: 29.08.2012
Сообщений: 4,011
По умолчанию

Цитата:
но и с числовыми типами такая же фигня
какая такая? вам уже в ошибке все сказали, я еще и разжевал, что не понятно до сих пор?
сравниваются только однотипные данные, либо с возможностью внутреннего преобразования, иначе всегда будет ошибка...
eval вне форума Ответить с цитированием
Старый 03.04.2013, 19:50   #9
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для умника, не видящего константы в коде
Код:
  ADOQuery1.Active:=False; //На всякий случай, вдуг ранее открывался
  ADOQuery1.SQL.Text:='DELETE FROM raspisanie WHERE [data] BETWEEN :data2 AND :data1';
  ADOQuery1.Parameters.ParamByName('data1').Value:=data1;
  ADOQuery1.Parameters.ParamByName('data2').Value:=data2;
  ADOQuery1.ExecSQL;
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 03.04.2013, 20:23   #10
Fireblade-fan
Пользователь
 
Регистрация: 23.11.2011
Сообщений: 34
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Для умника, не видящего константы в коде
Код:
  ADOQuery1.Active:=False; //На всякий случай, вдуг ранее открывался
  ADOQuery1.SQL.Text:='DELETE FROM raspisanie WHERE [data] BETWEEN :data2 AND :data1';
  ADOQuery1.Parameters.ParamByName('data1').Value:=data1;
  ADOQuery1.Parameters.ParamByName('data2').Value:=data2;
  ADOQuery1.ExecSQL;
Я уже понял, что у меня константа в запросе была )) Спасибо Вам
Fireblade-fan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление и удаление записей из БД (Access) a_n_n_a БД в Delphi 26 02.01.2016 18:13
Добавление и удаление Shmel9 Microsoft Office Access 2 22.11.2012 02:04
работа с бд access через excel.(редактирование, удаление и добавление) XROMAD Microsoft Office Access 5 25.07.2012 17:58
Добавление/Удаление CrazyN00b Помощь студентам 0 28.11.2010 17:38
Удаление/добавление на С++. Serror Фриланс 6 21.10.2009 09:35