|
Вопрос # 2 636/ вопрос открыт / |
|
Приветствую уважаемые эксперты.
Программист я начинающий и в общем то неопытный..Назрела весьма глупая ситуация.. пишу программу для учета движения библиотечного фонда. Работаю в паре Access+ADO. Необходимо выполнить такую операцию:
Нужно удалить одну запись из таблицы Movebook, и одновременно с этим изменить значение логического поля BNalichie в таблице Books на True. Программа ошибки не выдает, необходимая запись из таблицы Movebook удаляется, но в Books значение поля меняться не хочет. Где я не прав? А если я очень сильно не прав, то посоветуйте как сделать лучше :) вот листинг процедуры
fmGiveConfirm это форма с кнопками OK и Cancel для подтверждения изменений или их отката
Приложение: Переключить в обычный режим- procedure TfmDolgi.Button1Click(Sender: TObject);
- begin
- with DM.Movebook do
- begin
- Append;
- Edit;
- fmGiveConfirm:=TfmGiveConfirm.Create(self);
- DM.Movebook.Delete;
- DM.Books.Edit;
- DM.BooksBNalichie.Value:=true;
- if fmGiveConfirm.ShowModal=mrOK then
- begin
- Post;
- UpdateBatch();
- DM.Books.Post;
- DM.Books.UpdateBatch();
- end
- else
- begin
- Cancel;
- 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;
 |
Вопрос задал: Михаил Михайлович (статус: Посетитель)
Вопрос отправлен: 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 <условие определения записи>
Точнее написать запрос не могу, поскольку не знаю структуру таблицы
|
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|