Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 636

/ вопрос открыт /

Приветствую уважаемые эксперты.
Программист я начинающий и в общем то неопытный..Назрела весьма глупая ситуация.. пишу программу для учета движения библиотечного фонда. Работаю в паре Access+ADO. Необходимо выполнить такую операцию:
Нужно удалить одну запись из таблицы Movebook, и одновременно с этим изменить значение логического поля BNalichie в таблице Books на True. Программа ошибки не выдает, необходимая запись из таблицы Movebook удаляется, но в Books значение поля меняться не хочет. Где я не прав? А если я очень сильно не прав, то посоветуйте как сделать лучше :) вот листинг процедуры
fmGiveConfirm это форма с кнопками OK и Cancel для подтверждения изменений или их отката

Приложение:
  1. procedure TfmDolgi.Button1Click(Sender: TObject);
  2. begin
  3. with DM.Movebook do
  4. begin
  5. Append;
  6. Edit;
  7. fmGiveConfirm:=TfmGiveConfirm.Create(self);
  8. DM.Movebook.Delete;
  9. DM.Books.Edit;
  10. DM.BooksBNalichie.Value:=true;
  11. if fmGiveConfirm.ShowModal=mrOK then
  12. begin
  13. Post;
  14. UpdateBatch();
  15. DM.Books.Post;
  16. DM.Books.UpdateBatch();
  17. end
  18. else
  19. begin
  20. Cancel;
  21. CancelBatch();
  22. DM.Books.Cancel;
  23. DM.Books.CancelBatch();
  24. end;
  25. fmGiveConfirm.Free;
  26. Close;
  27. Open;
  28. end;
  29. DM.Books.Close;
  30. DM.Books.Open;
  31. DM.Movebook.Close;
  32. DM.Movebook.Open;
  33. end;


Михаил Михайлович Вопрос ожидает решения (принимаются ответы, доступен мини-форум)

Вопрос задал: Михаил Михайлович (статус: Посетитель)
Вопрос отправлен: 14 апреля 2009, 19:02
Состояние вопроса: открыт, ответов: 0.


Мини-форум вопроса

Всего сообщений: 7; последнее сообщение — 15 апреля 2009, 08:10; участников в обсуждении: 2.
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 14 апреля 2009, 20:27 [#1]:

1. для чего у вас подряд стоят append, edit?
2. Лучше сначала задать вопрос пользователю (показать Вашу форму с кнопками), а затем уже предпринимать действия по модификации данных в таблицах.
3. Никогда не делайте вперемешку редактирование нескольких таблиц (по крайней мере, чтобы не запутаться). Т.е.
делать надо так:
table1.edit;
<присвоение значений изменяемым полям для table1>
table1.post;
table2.edit;
<присвоение значений изменяемым полям для table2>
table2.post;
4. Кроме того, у Вас не совпадает количество post с количеством append/edit
Михаил Михайлович

Михаил Михайлович (статус: Посетитель), 14 апреля 2009, 21:01 [#2]:

Аааа.. ччерт, листинг не тот.. ну я ж грил что я начинающий ^^,
вот нужное:

<code language="delphi">
procedure TfmDolgi.Button1Click(Sender: TObject);
begin
with DM.Movebook do
begin
Delete;
fmGiveConfirm:=TfmGiveConfirm.Create(self);
DM.Books.Edit;
DM.BooksBNalichie.Value:=true;
if fmGiveConfirm.ShowModal=mrOK then
begin
UpdateBatch();
DM.Books.Post;
DM.Books.UpdateBatch();
end
else
begin
CancelBatch();
DM.Books.Cancel;
DM.Books.CancelBatch();
end;
fmGiveConfirm.Free;
Close;
Open;
end;
DM.Books.Close;
DM.Books.Open;
DM.Movebook.Close;
DM.Movebook.Open;
end;
</code>

Далее..
Данные в таблице модифицируются для того, чтобы библиотекарь не выдал уже "выданную книгу". К примеру. У меня список книг выводится в сетку DBGrid с помощью ADOQuery. Запрос выглядит следующим образом:
SELECT * FROM BOOKS WHERE BNalichie=true
таким образом для библиотекаря в сетку выводятся только те книги, которые есть в наличии. Именно для этого и используется поле BNalichie. Вся проблема в том, что при возврате этой книги обратно в библиотеку, значение в поле BNalichie таблицы Books не меняется на true. Причем когда эта книга выдается на руки, то значение этого поля благополучно меняется на false...
Если существует какой либо гораздо более простой способ для выполнения подобной операции, то буду благодарен за предоставленную информацию :)
Михаил Михайлович

Михаил Михайлович (статус: Посетитель), 14 апреля 2009, 21:03 [#3]:

тег не рабоает =/ а при предварительном просмотре работал ..
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 14 апреля 2009, 22:48 [#4]:

более простой способ - сделать изменение таблиц также посредством SQL и не заморачиваться по поводу edit/post
Михаил Михайлович

Михаил Михайлович (статус: Посетитель), 14 апреля 2009, 23:09 [#5]:

А можно хотя бы примерчик SQL запроса, изменяющего данные логического поля в выбранной записи текущей таблицы?
Мережников Андрей

Мережников Андрей (статус: Абитуриент), 15 апреля 2009, 05:35 [#6]:

update books set bnalichie=1 where <условие определения записи>
Точнее написать запрос не могу, поскольку не знаю структуру таблицы
Михаил Михайлович

Михаил Михайлович (статус: Посетитель), 15 апреля 2009, 08:10 [#7]:

спасибо :) попробую сегодня

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:27
Выполнено за 0.02 сек.