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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.10.2008, 19:47   #31
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Вот что происходит при инкрименте книги или декрименте в DistBook
да и информации нет по ADO у меня
Еще раз - никакого особого отличия ADO от простых BDE компонентов нет, кроме мороки со строкой подключения. Так что спокойно используйте штатный хэлп. Если нужна инфа по ADOTable - жмите F1, а там в строке поиска сотрите ADO, пусть останется Table...
По поводу ошибки. В сообщении говорится, что таблица Book находится не в режиме редактирования - очевидно, перед изменением значения поля вы забыли перевести ее в этот режим командой
DataModule2.Book.Edit;
mihali4 вне форума Ответить с цитированием
Старый 26.10.2008, 20:01   #32
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Arkuz
Вот что происходит при инкрименте книги или декрименте в DistBook
Вы бы лучше проект выложили.. ну или код процедуры привели.
Кстати, в ошибке же ясно написано, что Ваш датасет BOOK нельзя изменить, потому что он не находится в состоянии Edit ( редактируемого) или Insert (режим вставки данных)...

добавлено
mihali4 +100

Последний раз редактировалось Serge_Bliznykov; 26.10.2008 в 21:55. Причина: добавлено и исправлено...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.10.2008, 21:44   #33
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо.....

Скажите, а как сделать чтобы текущей записью была запись которая выделена в гриде?

А то книги возвращаются при сдаче не в текущую запись, а в последнюю, которая была добавлена...
Arkuz вне форума Ответить с цитированием
Старый 26.10.2008, 22:40   #34
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
как сделать чтобы текущей записью была запись которая выделена в гриде
Запись, выделенная в гриде, автоматически ставит курсор (представьте себе, в БД тоже есть курсоры ) на соответствующую запись. Но... в таблице Distrib...
Сделайте вот что. Напишите обработчик:
Код:
procedure TDataModule2.DistribAfterScroll(DataSet: TDataSet);
begin
DataModule2.Readers.Locate('ReaderID',DistribReaderID.AsString,[]);
DataModule2.Book.Locate('BookID',DistribBookID.AsString,[]);
end;
Тогда при выборе строки в гриде у вас будут автоматом устанавливаться курсоры и в таблицах книг и читателей.
(Если я правильно понял, у вас не те книги возвращаются? Т.е. увеличивается число доступных к выдаче экземпляров последней в списке книги?)
mihali4 вне форума Ответить с цитированием
Старый 26.10.2008, 23:05   #35
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Если я правильно понял, у вас не те книги возвращаются? Т.е. увеличивается число доступных к выдаче экземпляров последней в списке книги?
Да, да... Вы правильно поняли. Огромное спасибо...

Извините конечно за то, что я так много вопросов задаю, но я вообще не представляю как с бд работать... Я по сути базу свою по этому форуму написал... Ни методов, ни общих сведений ничего не знал...
Arkuz вне форума Ответить с цитированием
Старый 26.10.2008, 23:08   #36
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Я по сути базу свою по этому форуму написал...
Форум для этого и существует.
И скажу по секрету, особо приветствуются те, кто, хоть и задает (поначалу) много вопросов, но делает сам, а не требует сразу дать ему готовый код
mihali4 вне форума Ответить с цитированием
Старый 26.10.2008, 23:45   #37
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

жаль но не работает

Код:
DataModule2.Readers.Locate('ReaderID',DistribReaderID.AsString,[]);
 DataModule2.Book.Locate('BookID',DistribBookID.AsString,[]);
Arkuz вне форума Ответить с цитированием
Старый 27.10.2008, 00:04   #38
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Давайте последнюю версию проекта.
mihali4 вне форума Ответить с цитированием
Старый 27.10.2008, 00:25   #39
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Ну вот, посмотрите... Прошу строго не судить за убийственный вид исходника... )))
Вложения
Тип файла: rar bd.rar (40.5 Кб, 43 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 27.10.2008, 00:36   #40
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Поехали... (пост будет меняться по мере разбора вашей программы)
1.
Цитата:
procedure TEditForm.ComboBox1Change(Sender: TObject);
begin
DataModule2.Book.Locate('Name',Comb oBox1.Text,[]);
DBEdit2.Text:=DataModule2.BookBookI D.AsString;
DataModule2.DistribBookName.Value:= ComboBox1.Text;
end;
Это какое же вы имеете право даже пытаться присвоить значение лукаповскому полю???
2.
Цитата:
if ComboBox1.Text = DataModule2.BookName.Value then
DataModule2.Distrib.Post; //сохранить
И это все? А значения DateTimePicker-ов Пушкин будет записывать в поля DateOfBegin и DateOfEnd?
А на кой, извиняюсь за выражение, нам даже упоминание о дате реального возврата в форме выдачи???
3.
Цитата:
procedure TMainForm.DelBtnClick(Sender: TObject);
begin
try
if Application.MessageBox(PChar('Если этот читатель вернул книгу нажмите ДА и этот читатель удалится из списка!!!'),'Внимание!!!',MB_YESNO) =id_YES then
begin
DataModule2.Distrib.Delete; //удаляем запись
DataModule2.Book.Edit;
DataModule2.BookDistBook.Value:=Dat aModule2.BookDistBook.Value+1;
end;
except
on EDatabaseError do ShowMessage('В базе нет ни одной записи!');
end;
end;
- допустим, удалили запись из Distrib (сразу вопрос - а зачем??? Что, история выдач и возвратов никому не нужна?);
- но как же теперь делать операцию DataModule2.BookDistBook.Value:=Dat aModule2.BookDistBook.Value+1;
когда курсор в Book пропал... и сместился на совершенно другую запись... Ведь вы уничтожили ссылочный идентификатор...
Бред сивой кобылы... Должно быть вот так:
Код:
DataModule2.Distrib.Edit;
DataModule2.DistribDateOfReal.Value:=Now;
DataModule2.Distrib.Post; 
DataModule2.Book.Edit;
DataModule2.BookDistBook.Value:=DataModule2.BookDistBook.Value+1;
DataModule2.Book.Post;
4. А это что за перл - "Если этот читатель вернул книгу нажмите ДА и этот читатель удалится из списка!!!"?
А может "... убьется ап стену..."? Или "..будет уничтожен.."?
Должно быть - "Зафиксировать возврат книги ?". Все ! (пока, на сегодня)

З.Ы. Последней строкой в procedure TEditForm.FormActivate(Sender: TObject); должно быть:
ComboBox1.OnChange(self);
Это чтобы у нас сразу установился идентификатор книги.

Последний раз редактировалось mihali4; 27.10.2008 в 01:02.
mihali4 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
библиотека Free Internet Titan123 Свободное общение 7 20.08.2008 15:19
Библиотека для Delphi Irat Помощь студентам 2 12.02.2008 20:13
Моя библиотека mochaliviy Свободное общение 3 11.01.2008 13:23
библиотека TK и Ruby kpp2 Ruby 5 22.12.2007 02:02
Стандартная библиотека... Sota Общие вопросы C/C++ 3 17.07.2007 19:18