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

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

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

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

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

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

Итак, по порядку:
1. Исходное положение - лежа То есть при запуске программы подключения к базе быть НЕ ДОЛЖНО!!! Все таблицы открываются по мере необходимости. Точно также происходит обязательное отключение от базы при закрытии программы.
2. При нажатии кнопки "Отменить" формы EditForm что у вас происходит?
Есть очень простая команда - DataModule2.Distrib.Cancel; и все возвращается на круги своя...
3. Почему закомментированы строки в procedure TEditForm.FormActivate ?
Список доступных к выдаче книг не формируется.
4. "Дата выдачи", "Дата возврата", "Реальная дата" - вы что, вручную их вводите??? И не "Реальная дата", а "Реальная дата возврата", не "Дата возврата", а "Назначенная дата возврата". Это нам с вами понятно, а вот юзеру - нет. Попробуй догадаться, что вы имеете в виду...
5. По секрету. Никогда не использую для таких форм ДБкомпоненты. Только простые эдиты, комбобоксы и т. д. В частности, вместо ваших DBEdit3, DBEdit4, DBEdit5 лучше всего подойдут компоненты ТDateTimePicker. А по нажатию кнопки "Сохранить" производится добавление записи (а не заранее, как у вас), заполнение полей значениями из перечисленных "простых" компонентов и постинг.

Ну, и ваша проблема, наконец.
Что это???
Код:
procedure TEditForm.ComboBox1Change(Sender: TObject);
begin
 DataModule2.DistribBookName.Value:=ComboBox1.Text;
end;
Откуда это поле BookName в таблице Distrib? Я же вам сказал - оно не нужно в этой физической таблице! Оно там будет, но - лукаповское! То есть виртуальное поле, значение которого будет получено из таблицы книг по коду книги! Если вы не знаете, как оно создается - расскажу. И обязательно иметь под рукой книгу про 100 компонентов Дельфи.
Почему при выборе книги ничем не заполняется DBEdit2 ?
Вот вам и ваша проблема
Цитата:
Попробуйте создать новую выдачу и увидите что за ошибка...
Я уже не понимаю... Что мне сделать нужно? Помогите...
Замечание номер раз:
- создавать при запуске программы все формы "чохом, на всякий случай", это - недопустимое разбазаривание ресурсов компьютера. Все формы сразу юзеру не нужны - он не сороконожка, чтобы работать одновременно со всеми, да и винда ему этого не позволит, поскольку в данный момент времени лишь одно окно программы будет активно. Окна должны создаваться динамически, по мере надобности, и уничтожаться, когда надобность в них отпадет.
Номер два:
- совершенно непонятна логика создания датамодуля при том, что куча датасетов с сопутствующими компонентами разбросана мелкими кучками по формам... Вы уж соберите их все в датамодуле.
Номер три:
- определение базы, вернее, пути к ней... Это вообще ни в какие ворота не лезет. Посмотрите на форуме, как определить каталог, из которого запускается программа, добавьте к нему подкаталог с вашей базой и пропишите при создании датамодуля для всех датасетов... Юзер не обязан устанавливать вашу программу в предписанный вами каталог или настраивать алиасы... Он из вредности установит ее куда подальше и торжествующе заявит: "Программа не пашет!"...
Пока все. Мельком пробежался, нету времени разбираться дальше.

Последний раз редактировалось mihali4; 13.02.2009 в 23:57. Причина: Сбой базы. Восстановление поста на своем месте
mihali4 вне форума Ответить с цитированием
Старый 25.10.2008, 00:49   #22
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спать хочется, на кое- что ответил, завтра разберусь с тем что вы написали...
Первым делом - спасибо за ваше терпение и понимание... Все мы когда-то были молодыми и зелёными...
Спасибо за полные, чёткие ответы....
Теперь к делу...

Цитата:
Откуда это поле BookName в таблице Distrib?
В физической таблице его нет... Смотрите принтскрин или базу...
я его сделал посредствам ДатаСурса. Это ссылочное поле...

Цитата:
Почему при выборе книги ничем не заполняется DBEdit2 ?
Потому что раньше оно показывало вместе с DBLookupComboBox2. А сейчас там простой комбобокс, видимо что-то вышло из строя или я где-то изменил или попросту накосячил...

Цитата:
Если вы не знаете, как создается лукаповское поле - я расскажу...
Ну хотел бы услышать... Так ли я сделал в своём примере или нет?
Изображения
Тип файла: jpg tab_distrib.JPG (18.4 Кб, 151 просмотров)
Arkuz вне форума Ответить с цитированием
Старый 25.10.2008, 01:01   #23
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
В физической таблице его нет
Пардон, это я уже утомился -просмотрел, что оно fkLookup...

Как заполнить DBEdit2 ?
Код:
procedure TEditForm.ComboBox1Change(Sender: TObject);
begin
 Book.Locate('Name',ComboBox1.Text,[]);
 DBEdit2.Text:=BookBookID.AsString;
 DataModule2.DistribBookName.Value:=ComboBox1.Text;
end;

Последний раз редактировалось mihali4; 25.10.2008 в 01:04.
mihali4 вне форума Ответить с цитированием
Старый 26.10.2008, 10:51   #24
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

mihali4, а у вас есть что-нибудь по ADO... А то у меня в книге Хомоненко "Delphi" 1200 страниц, про БД где-то половина, а про ADO страниц 8...
А мне бы по-больше... А то я и методов то не знаю... Поэтому и код у меня глупый...
Arkuz вне форума Ответить с цитированием
Старый 26.10.2008, 12:02   #25
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Да нет, только вот маленькая статейка:
Вложение 6275
И потом - что TTable, что TADOTable - у них практически все одинаково...
Так что, кроме штатного хэлпа и некоторой доли сообразительности (что у вас наличествует), больше ничего и не надо.

Последний раз редактировалось mihali4; 08.11.2008 в 14:04.
mihali4 вне форума Ответить с цитированием
Старый 26.10.2008, 12:25   #26
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
Так что, кроме штатного хэлпа и некоторой доли сообразительности (что у вас наличествует), больше ничего и не надо.
Спасибо...

А вот вы что -то говорили про подключение таблиц, только тогда, когда они нужны. Это как сделать...?

И про открытие и закрытие связи с БД?

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

Исходное положение - ADOConnection1.Connected:=False; (пишу, не открывая Дельфи, по памяти, так что могу в буковках ошибиться, прошу строго не судить).
Цитата:
про подключение таблиц, только тогда, когда они нужны
В принципе, если прога несложная (как у вас), известно место в ней, когда происходит первое обращение к какой-либо таблице. Там можно написать:
Код:
if not ADOTable1.Active then
ADOTable1.Open;
Таблица будет открыта. Заодно откроется (конечно же) ADOConnection и другие таблицы, связанные с открываемой. Например, при открытии таблицы выдач автоматом откроются таблицы книг и читателей, т.к. они "обязаны" выдать названия книг и ФИО читателей по их идентификаторам из таблицы выдач.
Цитата:
про закрытие связи с БД при закрытии программы
По событию закрытия формы:
Код:
ADOConnection1.Connected:=False;
Вот и все.
(Дело в том, что при аварийном (не дай бог ) завершении программы или винды коннект с базой может "залипнуть" (посредством некоего служебного файлика БД, не обработанного нормально из-за аварии) и следствием этого может явиться ваше изумление, когда вы попытаетесь что-либо с БД проделать, а она вам скажет, что занята другим юзером или программой, хотя кроме вас у компьютера никого нет и никаких других программ не запущено. Еще более трагические последствия могут быть, если БД находится на сервере - вплоть до полной блокировки нормальной работы сервера БД. Особенно для файловых серверов.)

Последний раз редактировалось mihali4; 26.10.2008 в 12:43.
mihali4 вне форума Ответить с цитированием
Старый 26.10.2008, 17:02   #28
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Спасибо... В принципе я так и делал... Просто не понимал, почему открываются и другие таблицы. Прочитал ваш пост и понял, что Те таблицы открываются, потому что они связаны...

Код:
procedure TEditForm.ComboBox1Change(Sender: TObject);
begin
 Book.Locate('Name',ComboBox1.Text,[]);
 DBEdit2.Text:=BookBookID.AsString;
 DataModule2.DistribBookName.Value:=ComboBox1.Text;
end;
А что значит Book.Locate('Name',ComboBox1.Text,[]);

Последний раз редактировалось mihali4; 13.02.2009 в 23:58. Причина: Объединение постов
Arkuz вне форума Ответить с цитированием
Старый 26.10.2008, 17:13   #29
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

На вопросы такого рода - общий ответ: ставим курсор на непонятное слово и жмем F1. В открывшемся окне справки - исчерпывающая информация. Плохо знаете английский? Я тоже не ас. Есть электронные переводчики, например, "TranslateIt!"...
mihali4 вне форума Ответить с цитированием
Старый 26.10.2008, 17:39   #30
Arkuz
Форумчанин
 
Аватар для Arkuz
 
Регистрация: 22.09.2007
Сообщений: 540
По умолчанию

Вот что происходит при инкрименте книги или декрименте в DistBook
Я уже не знаю что делать... Откуда эти ошибки берутся...

Вы меня извините, но я первый раз вообще делаю БД, да и информации нет по ADO у меня...
Изображения
Тип файла: jpg error.JPG (18.1 Кб, 151 просмотров)

Последний раз редактировалось mihali4; 13.02.2009 в 23:32. Причина: Объединение постов
Arkuz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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