Access или ini в моем случае?

 
0
 
Delphi, Kylix & Pascal
ava
belkeandrey | 29.03.2013, 15:11
Добрый день! В дельфи новичок, поставлена следующая задача. Подскажите как правильнее реализовать. Есть программа обучения, в нее входят под своим логином и паролем инструктор или обучаемый, предварительно зарегившись. В программе присутствуют тесты с вопросами и вариантами ответов, на которые отвечает обучаемый. Все эти данные должны храниться и отображаться у инструктора в журнале. Необходимо реализовать: инструктор может просматривать всех пользователей, в журнале отображается информация за указанный временной период о том, в какие даты и в какое время какой пользователь работал с какими окнами программы, сколько времени пользователь работал, какие тесты выполнил (если выполнял, то какая оценка).

Также необходимо при запросе выводить зависимость (график или диаграмма) времени, проведенного в конкретном разделе к количеству ошибок, допущенных пользователем в тесте конкретного вышеуказанного раздела.

Обязательна возможность выгрузить из программы журнал в удобном для изучения формате (таблицы Excel).
Инструктор сам должен устанавливать фильтр по времени и создавать архивы, удалять записи ненужных ему пользователей непосредственно из журнала, при желании перед удалением добавлять записи в архив.

Как это лучше реализовать, возиться с БД, либо использовать ини? С чего начинать?
Заранее спасибо!
Kommentare (20)
ava
Akella | 29.03.2013, 14:38 #
Цитата (belkeandrey @  29.3.2013,  14:11 findReferencedText)
Как это лучше реализовать, возиться с БД, либо использовать ини? 


возиться с БД
ava
belkeandrey | 30.03.2013, 00:00 #
Немного разобрался, но многое еще непонятно.
1.Нужно сделать тест. Вопросы и ответы будут в БД. Но как, допустим, из таблицы "Naznachenie" вывести вопрос в мемо с вариантами ответов в радиобаттонах, а после ответа выводить следующий вопрос? При этом еще отслеживать правильный ответ и начислять баллы. Я так понимаю циклом? Но не понятно, как пойди к нужному полю. SQL запросы? Можно примерчик?
2. Нужно сделать авторизацию. Т.е. логин и пароль сохранять в таблице личных данных регистрируемого. А потом просто циклом бегать и сравнивать? А шифрование?
Пока вроде все. Напоминаю, что я новичок не только в БД, но и в программировании:) Прошу помощи:)
ava
Данкинг | 30.03.2013, 00:12 #
Цитата (belkeandrey @  30.3.2013,  01:00 findReferencedText)
А потом просто циклом бегать и сравнивать?

.locate с этой задачей справится.
Цитата (belkeandrey @  30.3.2013,  01:00 findReferencedText)
А шифрование?

А что шифрование? Ну, шифруй данные в поле.
ava
Akella | 30.03.2013, 10:43 #
Цитата (belkeandrey @  30.3.2013,  00:00 findReferencedText)
1.Нужно сделать тест. Вопросы и ответы будут в БД. Но как, допустим, из таблицы "Naznachenie" вывести вопрос в мемо с вариантами ответов в радиобаттонах, а после ответа выводить следующий вопрос? При этом еще отслеживать правильный ответ и начислять баллы. Я так понимаю циклом? Но не понятно, как пойди к нужному полю. SQL запросы? Можно примерчик? 


Можно, а сколько готов заплатить за готовую программу? Или т думаешь, что примерчик - это 3-5-7 строк кода?
ava
superVad | 30.03.2013, 13:13 #
Цитата (belkeandrey @  29.3.2013,  23:00 findReferencedText)
Пока вроде все. Напоминаю, что я новичок не только в БД, но и в программировании:) Прошу помощи:)

Ну - научись программировать. На интуите можешь попробовать или книги почитай.
ava
belkeandrey | 30.03.2013, 19:06 #
Ребят, потихоньку разбираюсь. Сейчас делаю тест. Таблица в ацесе в формате id|vopros|otv1|otv2|otv3|prav_otv. Подключить и вывести все получается, а как сделать так, чтобы при нажатии кнопки или другом действии просто переключалась строка таблицы? К примеру если id=1, это первая строка таблицы, при нажатии на кнопку "след вопр" id становился равным 2 и данные читались из 2й строки. Navigator это не то, тк в основном релизе Grida не будет. Пробовал в SQL запрос вставлять переменную i преобразованную в строковую, но она не считается((

P/S. Я понимаю, и готовую прогу не прошу, а прошу хотя-бы наводку, в какую сторону копать
ava
Данкинг | 30.03.2013, 19:13 #
Цитата (belkeandrey @  30.3.2013,  20:06 findReferencedText)
К примеру если id=1, это первая строка таблицы, при нажатии на кнопку "след вопр" id становился равным 2 и данные читались из 2й строки.


AdoTable.Recno:=2;
ava
belkeandrey | 01.04.2013, 23:22 #
С большинством разобрался. Возник такой вопрос. Мне надо собирать всю статистику о пользователе, который зашел под своим логином и паролем, т.е. дата входа, проведенное время, баллы за тестирование и т.д. У меня отдельно таблица users с логинами и паролями, отдельно таблица "Обучаемые" (в ней ФИО, группа). Куда мне сохранять статистику при каждом входе пользователя? Так думается, что подчинением, но тогда получается, что для каждого юзера надо делать свою таблицу? Или же мутить с sql запросами. Подскажите, если поняли суть. 
ava
Beltar | 02.04.2013, 01:11 #
Можно при создании пользователя создать для него таблицу данных. Просто способ именования придумай, например, Данные<Id-пользователя>. Скрипт для создания посмотреть в самой СУБД.

Кстати, если данных достаточно много (несколько десятков тысяч), то Access и ADO начинают дохнуть, например, TADOQuery.Next жутко тормозит, FindNext еще жутче, но из доступного новичку это, наверное, самое простое решение.
ava
kami | 02.04.2013, 13:22 #
Цитата (belkeandrey @  1.4.2013,  23:22 findReferencedText)
для каждого юзера надо делать свою таблицу?

Зачем?
Делается таблица "Статистика", в ней - все поля, какие нужно для хранения + поле UserID: ForeignKey для таблицы "Обучаемые" (или "users").

По каждому юзеру, зная его ID, вся статистика (или за определенный период) выдергивается легко.

später ergänzt:
Более того, достаточно легко будет "выдернуть" и статистику по группе.
ava
Poseidon | 02.04.2013, 13:32 #
Цитата (belkeandrey @  29.3.2013,  14:11 findReferencedText)
В дельфи новичок, поставлена следующая задача.
Простите конечно, но если такие задачи ставят новичкам...
ava
Akella | 02.04.2013, 13:48 #
На лекции не ходил, поэтому и новичок.
ava
belkeandrey | 02.04.2013, 16:50 #
)))) да я не программист вообще, а инженер по специальности. В детстве увлекался, а сейчас на работе попросили сделать, вот я согласился и разбираюсь. Уже почти всю программу с 0 сделал, сейчас с БД разбираюсь. Даже понравилось это дело)

Да, спасибо, так и сделал. Сейчас вот возник такой вопрос: а как добавлять данные в ОДНУ строку таблицы. А то получается при входе записал дату в 1ю строку, далее данные записываюсяво 2ю и тд. строки....
И как сделать связи в таблицах через ADOQuery? Через ADOTable ясно, а тут не получается никак..
ava
kami | 02.04.2013, 17:59 #
Цитата (belkeandrey @  2.4.2013,  16:50 findReferencedText)
 а как добавлять данные в ОДНУ строку таблицы.

Добавлять данные в одну строку нельзя.
Можно добавить данные, получится новая строка (однократная операция), а потом изменять данные в этой строке.


Цитата (belkeandrey @  2.4.2013,  16:50 findReferencedText)
И как сделать связи в таблицах через ADOQuery?

Что значит - связи в таблицах? На запросы эти связи не влияют, разве что будет нарушение каких-либо FK или Constraint-ов
Или имеются ввиду Lookup-поля?
ava
belkeandrey | 02.04.2013, 20:28 #
Может быть я не так сформулировал вопрос, вот скрин таблицы, которую мне надо видеть после работы программы. Это пример. Почему именно так, потому что необходимо в аццесе же их потом просматривать, а если данные будут добавляться в каждую строку, то это будет не очень хорошо. Либо получится сделать только построчно?

[img]http://s2.ipicture.ru/uploads/20130402/iVh6gOc6.jpg[/img]
ava
Akella | 02.04.2013, 21:04 #
Цитата (belkeandrey @  2.4.2013,  16:50 findReferencedText)
И как сделать связи в таблицах через ADOQuery?


Use SQL, Luke.
ava
kami | 02.04.2013, 22:12 #
Цитата (belkeandrey @  2.4.2013,  20:28 findReferencedText)
Это пример. 

Из которого ничего не понятно.
Изложи конечную цель всех этих манипуляций.
Есть таблица с пользователями (фио, группа и т.д.). Есть таблица результатов тестирования. Нужно: ?

Цитата (belkeandrey @  2.4.2013,  20:28 findReferencedText)
необходимо в аццесе же их потом просматривать,

Имхо - неправильно. А если у пользователя не установлен Access? И потом - почему, если основная работа проводится в своей программе, для получения результатов нужно пользоваться чьим-то "сторонним" продуктом?
ava
Beltar | 02.04.2013, 23:58 #
Меня уже давно мучает вопрос, что за свинья придумала этот формат Access с хранением данных и программного кода пользовательского интерфейса в одном файле, вместо того, чтобы просто создать редактор файла базы с API для работы с ним и созданием пользовательского интерфейса в сторонней программе, как это у всех других СУБД делается.

Если делаешь программу на Delphi, то пользователю в Access-файле делать нечего.

TADOTable, как правило, не применяется, с ним становится как-то кисло, если речь заходит о фильтрации данных. Уж не знаю, можно ли там серьезно извратится с Filtered, но намного проще по требуемым условиям сформировать SQL-запрос и выполнить его.

Тебе связи Master-Detail нужно? Ну с ADOTable такое можно сделать не написав ни строчки кода, но с запросами можно тоже у главного запроса в AfterScroll сформировать запрос на детальную таблицу.
ava
Akella | 03.04.2013, 10:11 #
Мне кажется, что очень удобно. Там всё одном: база, окна, отчёты.
Registrieren Sie sich oder melden Sie sich an, um schreiben zu können.
Unternehmen des Tages
Вы также можете добавить свою фирму в каталог IT-фирм, и публиковать статьи, новости, вакансии и другую информацию от имени фирмы.
Подробнее
Mitwirkende
advanced
Absenden