С Новым годом! Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
1
Delphi 6-7

Выгрузка данных из Delphi 7 в БД Access

17.05.2018, 20:19. Показов 2079. Ответов 60
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
У меня есть программа тестировки в Delphi 7, я бы хотел сделать так ,что бы в мою БД в определённую таблицу записывались только пользователи имеющие право доступа Студент и его (ФИО,Название теста,Дата,Оценка) только не знаю как это сделать.
Для лучшего понимания выкладываю исходник,если что-то ещё понадобится,то скажите.
Test.rar
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
17.05.2018, 20:19
Ответы с готовыми решениями:

Выгрузка данных из Программного модуля, работающего с базами данных, построенного на Delphi
Всем привет, работаю на модуле на предприятии, который предоставлен мне в виде программы уже...

Выгрузка изображений из бд access 2003 (delphi)
Здравствуйте, много времени пыхтел, так и не смог разобраться, проблема в следующем: Добавлено...

Выгрузка данных из access
Добрый день! Выгружаю данные из access в excel. Использую copyfromrecordset. Все гуд и все...

Выгрузка данных из Access в Excel
Здравствуйте форумчане! Подскажите в Access есть возможность выгрузить данные в Excel, как у меня в...

60
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
17.05.2018, 23:42 2
первое что вы должны написать
Delphi
1
2
if UserHasRight() then
  SaveToDatabase();
теперь по очереди писать функцию UserHasRight() и SaveToDatabase();
примерно так же
для этого нужно определиться, что такое у вас пользователь? ФИО? как вы узнаете про его права, по имени?
с сохранением в БД проще, но нужно опять же хоть что-то знать про SQL и работу с БД
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
18.05.2018, 00:16  [ТС] 3
За ФИО пользователя можно принять его логин, который берётся из самой БД
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
begin
DataModule2.ADOQuery1.SQL.Clear;
DataModule2.ADOQuery1.SQL.Add('Select  Пароль,ID FROM   Матрица_доступа WHERE Логин='+#39+Edit1.Text+#39);
DataModule2.ADOQuery1.Open;
if DataModule2.ADOQuery1.IsEmpty then
  begin
    ShowMessage('Пользователь ' + Edit1.Text +' не найден!');
    exit
  end;
 
  if DataModule2.ADOQuery1.FieldByName ('Пароль').Value <> Edit2.Text then
  begin
    ShowMessage ('Пароль не верный!');
    exit
  end;
Так же права его узнаются в соответствии с его ID ,т.е под 1- администраторы ,2 - Преподаватели, 3- Студенты

Delphi
1
2
3
4
5
6
case DataModule2.ADOQuery1.FieldByName('ID').asInteger of
    1: Form3.Show;
    2: Form7.Show;
    3: Form8.Show;
   end;
end;
Я так понимаю должно быть условие по которому пользователи только с ID=3 будут записываться и за место их ФИО будут браться вводимые ими логины в Edit1,но как это условие написать пока не знаю.

Вот только оценки не представляю как записывать ибо они не через ShowMessege выводятся ,а через свойство Label1.Caption

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm8.EClick(Sender: TObject);
begin
if RB1.Checked then vop[l].otvs:=vop[l].otv1;
if RB2.Checked then vop[l].otvs:=vop[l].otv2;
if RB3.Checked then vop[l].otvs:=vop[l].otv3;
if RB4.Checked then vop[l].otvs:=vop[l].otv4;
kl:=0;
for i:=1 to z do
if vop[i].otvs=vop[i].otv then inc(kl);
if (kl/z)>0.9 then oc:='оценка 5' else
if (kl/z)>0.75 then oc:='оценка 4' else
if (kl/z)>0.50 then oc:='оценка 3' else
oc:= 'оценка 2' ;
Label1.Caption:='Правильно ' + inttostr(kl)+ ' из ' + inttostr(z)+ oc;
Start.Visible:=True;
А как быть с датой представления не имею , может есть функция в Delphi 7 отвечающая за дату и как-то через неё вывести это в БД.
Опыт с SQL запросами есть, но там были простейшие запросы, ибо что-то сложное сильно не объяснялось мне.
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
18.05.2018, 09:27 4
у вашей программы память как у рыбки ))
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
if DataModule2.ADOQuery1.FieldByName ('Пароль').Value <> Edit2.Text then
ну проверили вы логин и пароль, выдали сообщение, что все ОК
а можно узнать, если в другой форме программе захочется узнать, что у вас был за логин, где его брать???
на Form1.edit12.text ???

обычно у каждой программы есть набор глобальных данных, которые требуются во всех формах, полностью или частично
к этой информации относится и текущий пользователь, его логин, права и т.д.
было бы логично хранить все настройки вместе. специально для вас
https://www.cyberforum.ru/blog... g4883.html
еще напоминаю
Для тех, кто обзывает компоненты DBEdit1, в аду стоит отдельный котел.

эти условия можно проверять вообще везде где нужно. при вызове процедуры она сначала должна проверить, есть ли у вас право ее вызывать. при создании формы в событии OnCreate можно спрятать или задизаблить элементы интерфейса, которые недоступны текущему пользователю. по аналогии - везде.
Delphi
1
2
3
4
5
6
7
8
9
10
...
button1.visible := Settings.Role in [rAdmin, rBoss];
...
ComboBox2.enabled := Settings.Role in [rAccountant];
...
if Settings.role is [rProgrammer] then
begin
  showMessage('Программистам вход запрещен');
  exit;
end;
а теперь PostScriptum
бесит
я набираю запрос "текущая дата в делфи" в гугл и получаю 100 страниц на русском, английском, с примерами, с разяснениями. А вы не смогли? Может тогда работа умом вообще не для вас??
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
через неё вывести это в БД.
это что вообще??
нельзя
вывести что-то в БД
как нельзя купить в магазине штаны вообще.
размер, цвет, фасон.
есть БД. в ней есть таблицы. в таблицах есть поля.
Можно вставлять записи в конкретные таблицы или изменять значения конкретных полей в конкретных таблицах в конкретных записях, которые отобраны по конкретному условию
операции "вывести в БД" в БД нет! поэтому рассказать вам как это сделать, может только ваш единомышленнник.
тут таких нет
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
18.05.2018, 12:54  [ТС] 5
Ну уж извините что я такой не грамотный и не опытный в Delphi, если бы я всё это знал ,я бы не писал сюда. Я обращаюсь за помощью, а не за критикой.То ,что я написал хоть такую программу уже для меня большой успех.
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
18.05.2018, 13:07 6
обратите внимание. в PS про делфи вообще ни слова

форум может только ответить на конкретный вопрос
а на краткий пересказ 3 учебников рассчитывать не стоит
1.программирование в делфи для начинающих
2.проектирование БД
3.язык SQL
0
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 3
18.05.2018, 13:12 7
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
То ,что я написал хоть такую программу уже для меня большой успех.
так krapotkin старается донести до вас что не надо писать как попало
прежде чем писать нужно продумать как, что и где будет использоваться

лучше сразу научиться хорошо писать чем потом переучиваться
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
18.05.2018, 13:21  [ТС] 8
Я уже изложил все мои мысли выше, а Delphi мне нужен только что бы закончить проект и не возвращаться к нему. Я не виновен в том что сейчас от меня требуют то,чего не преподавали и я ищу информацию по всему интернету, даже если я нахожу информацию то я либо этого не осознаю ,либо нет времени весь курс изучать .
0
Модератор
9644 / 6251 / 2426
Регистрация: 21.01.2014
Сообщений: 26,667
Записей в блоге: 3
18.05.2018, 13:21 9
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
Я обращаюсь за помощью, а не за критикой
Критика - лучшая помощь... Вы, как создатель своей первой программы, немного отличной от ХеллоуВорлд, не можете/не хотите смотреть на свое детище критичным взглядом, для Вас оно хорошо таким, какое оно есть... А это, поверьте, далеко не так и если первым, кто это заметит и выдаст Вам замечание, будет преподаватель на экзамене - будет уже поздно...
Более того, критика krapotkin-а направлена не только (я бы сказал, не столько) в адрес Вашей программы, сколько в адрес Вашего неумения четко и ясно задавать вопросы. А вот этому надо учиться, поскольку пригодится в любой сфере деятельности! Правильно построите вопрос - 75% вероятности того, что сами увидите ответ.
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
18.05.2018, 13:39  [ТС] 10
То,что вы раскритикуете код моей программы мне ничего не даст , от этого она лучше не станет потому что я всё равно не пойму как сделать лучше пока не увижу и не пойму что к чему. Создавать собственные классы я не умею, многие функции для меня не известны, по этому я и прошу помощи,показать пример на моей программе как это можно реализовать.Я поделился мыслями ,но не знаю как их программно описать ,я даже не знаю возможно ли так сделать .В ответ только критика.Видимо тут метка должна быть не "Delphi для начинающих" , а "Delphi для бывалых и матёрых"
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
18.05.2018, 13:47 11
давайте определимся - вы хотите, чтобы мы рассказывали как классы создавать?
нет
это сделано до нас. для этого существуют учебники, курсы и справочники.
обращаясь за помощью, вы УЖЕ должны знать хотя бы минимально синтаксис языка, как создавать формы, модули и т.д. и т.п.
если вы хотите получить совет по работе с БД, то вы УЖЕ должны знать, что такое БД, как с этим работают.
Хотя бы в общем виде.

Мы можем только помочь выбрать лучшие практики и конструкции, помочь найти ошибку.
Учить азы - не сюда.

Кроме того, если вы начинающий-начинающий-начинающий, почему вы не пишете Hello World, выбрать в каком слове есть буква Ж, или при нажатии на кнопку сменить цвет панели?
Почему-то сразу БД.
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
18.05.2018, 17:57  [ТС] 12
Нуу меня есть есть и немного опыта работы с Delphi и с БД и с SQL но этого не достаточно для того что бы сделать то,что мне дано, да и я такой человек что беру всегда на голову выше чем могу .

Добавлено через 3 часа 38 минут
Можно просто объяснить что необходимо сделать мне при таком написании программы, Т. К изменение кода программы я вряд-ли потяну.
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
18.05.2018, 23:57 13
что непонятно вам в статье по ссылке?
там написано, как создать объект.
в этом объекте запомните логин, который вы ввели
туда же запишите роль, которую вы получили тоже запросом из своей базы
создайте новый юнит. File--New--Unit. Вот текст юнита. Сохраните как UMySettings.pas
Кликните здесь для просмотра всего текста
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
unit UMySettings;
interface
uses Classes, Types, Sysutils;
 
TMySettings=class
public
  ID:integer;
  Login:string;
  Role:string;
end;
var 
  Settings:TMySettings;
implementation
initialization
  Settings:=TMySettings.Create;
finalization
  FreeAndNil(Settings);
end.

в файле формы в верхний uses добавьте UMySettings
вот ваша процедура логина. только теперь в Settings запоминаем что вы там навводили, чтобы можно было потом в других местах использовать
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
var ID:integer;
Pass:String;
...
DataModule2.ADOQuery1.SQL.text:='Select  Пароль,ID FROM   Матрица_доступа WHERE Логин=:login';
DataModule2.ADOQuery1.Parameters.ParamByName('login').value := edit1.text;
DataModule2.ADOQuery1.Open;
Pass := DataModule2.ADOQuery1.FieldByName('Пароль').AsString;
ID:=DataModule2.ADOQuery1.FieldByName('ID').AsInteger;
if Edit2.Text = Pass then
begin
  Settings.ID:=ID;
  Settings.Login := edit1.text;
  //я без понятия как там вы свои роли храните. в вашем запросе ничего про это нет. возьмите из базы сами
  Settings.Role := ????
  ShowMessage('Добро пожаловать, '+Settings.Login);
end
else
begin
  ShowMessage('Вы ввели неверный пароль');
  Application.terminate;
end;
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
19.05.2018, 00:35  [ТС] 14
Цитата Сообщение от LSTSnaiper Посмотреть сообщение
Так же права его узнаются в соответствии с его ID ,т.е под 1- администраторы ,2 - Преподаватели, 3- Студенты
DelphiВыделить код
Вот же мои роли описаны

Delphi
1
2
3
4
5
6
case DataModule2.ADOQuery1.FieldByName('ID').asInteger of
    1: Form3.Show;
    2: Form7.Show;
    3: Form8.Show;
   end;
end;
Выгрузка данных из Delphi 7 в БД Access
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
19.05.2018, 02:14  [ТС] 15
Delphi выдаёт ошибку при попытке компиляци
[Error] UMySettings.pas(6): Declaration expected but identifier 'TMySettings' found

Добавлено через 16 минут
А ,нашёл ошибку.

Добавлено через 44 минуты
Вот что получилось в конечном итоге , надеюсь я правильно понял про роли...




Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls,UMySettings;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Edit3: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure Edit2KeyPress(Sender: TObject; var Key: Char);
   
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
implementation
 
uses Unit2, Unit3, Unit7, Unit8;
 
{$R *.dfm}
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
ID:integer;
Pass: String ;
begin
DataModule2.ADOQuery1.SQL.text:='Select  Пароль,ID FROM   Матрица_доступа WHERE Логин=:login';
DataModule2.ADOQuery1.Parameters.ParamByName('login').value := edit1.text;
DataModule2.ADOQuery1.Open;
Pass := DataModule2.ADOQuery1.FieldByName('Пароль').AsString;
ID:=DataModule2.ADOQuery1.FieldByName('ID').AsInteger;
if Edit2.Text = Pass then
begin
  Settings.ID:=ID;
  Settings.Login := edit1.text;
  //я без понятия как там вы свои роли храните. в вашем запросе ничего про это нет. возьмите из базы сами
  Settings.Role := 'Select Пользователь FROM Матрица_доступа ';
  ShowMessage('Добро пожаловать, '+Settings.Login);
end
else
begin
  ShowMessage('Вы ввели неверный пароль');
  Application.terminate;
end;
case DataModule2.ADOQuery1.FieldByName('ID').asInteger of
    1: Form3.Show;
    2: Form7.Show;
    3: Form8.Show;
   end;
end;
 
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
if key=#13 then Button1.Click;
end;
 
 
 
end.
0
5582 / 4432 / 1080
Регистрация: 29.08.2013
Сообщений: 27,717
Записей в блоге: 3
19.05.2018, 06:51 16
54 строка это что?

ну и на 60 строке закрывать программу не совсем правильно. ну ввел я пароль неправильно - расстреливать из-за этого теперь?
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
19.05.2018, 08:50 17
я не зря писал про котел в аду для тех, кто именует переменные как попало
в моем мире, если написано ID - это идентфикатор чего-то, число или строка, позволяющая однозначно выбрать один предмет из кучи таких же. Если ROLE - это роль. Администратор, Директор, Менеджер - это роли
а что у вас хранится DataModule2.ADOQuery1.FieldByName('ID').asInteger забудете даже вы сами через неделю
В вашем случае если уж ID это роль, то стоит
Delphi
1
2
3
4
5
TMySettings=class
public
  Login:string;
  Role:string;
end;
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
if Edit2.Text = Pass then
begin
  case DataModule2.ADOQuery1.FieldByName('ID').asInteger of
   1:  Settings.Role:='Админ';
   2:  Settings.Role:='Директор';
   3:  Settings.Role:='Менеджер';
  end;
  Settings.Login := edit1.text;
  //я без понятия как там вы свои роли храните. в вашем запросе ничего про это нет. возьмите из базы сами
  Settings.Role := 'Select Пользователь FROM Матрица_доступа ';
  ShowMessage('Добро пожаловать, '+Settings.Login);
end
Delphi
1
2
3
4
5
6
if Settings.Role='Админ' then
  Form3.Show
else if Settings.Role='Директор' then
  Form7.Show
else if Settings.Role='Менеджер' then
   Form8.Show;
end;
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
19.05.2018, 12:45  [ТС] 18
Надеюсь всё синтаксически правильно построил, ну по крайней мере работает(после некоторых правок )
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Mask, DBCtrls,UMySettings;
 
type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Button1: TButton;
    Button2: TButton;
    Edit3: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
 
 
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
implementation
 
uses Unit2, Unit3, Unit7, Unit8;
 
{$R *.dfm}
 
procedure TForm1.Button2Click(Sender: TObject);
begin
close;
end;
 
procedure TForm1.Button1Click(Sender: TObject);
var
Role:integer;
Pass: String ;
begin
DataModule2.ADOQuery1.SQL.text:='Select  Пароль,ID FROM   Матрица_доступа WHERE Логин=:login';
DataModule2.ADOQuery1.Parameters.ParamByName('login').value := edit1.text;
DataModule2.ADOQuery1.Open;
Pass := DataModule2.ADOQuery1.FieldByName('Пароль').AsString;
Role:=DataModule2.ADOQuery1.FieldByName('ID').AsInteger;
if Edit2.Text = Pass then
begin
  case DataModule2.ADOQuery1.FieldByName('ID').asInteger of
   1:  Settings.Role:='Админ';
   2:  Settings.Role:='Преподаватель';
   3:  Settings.Role:='Студент';
  end;
  Settings.Login := Edit1.text;
  ShowMessage('Добро пожаловать, '+Settings.Login);
end
else
begin
  ShowMessage('Вы ввели неверный пароль');
  Application.terminate;
end;
begin
if Settings.Role='Админ' then
  Form3.Show
else if Settings.Role='Преподаватель' then
  Form7.Show
else if Settings.Role='Студент' then
   Form8.Show;
   end;
   end;
end.
Добавлено через 16 минут
С ролями разобрались а как с оценками быть ? Я переделал систему вывода сообщения через ShowMessage. Или это можно так же через собственный класс как-то вывести ? Например в UMySettings прописать Mark:integer.А после использовать как вывод оценки ?
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
procedure TForm8.EClick(Sender: TObject);
begin
if RB1.Checked then vop[l].otvs:=vop[l].otv1;
if RB2.Checked then vop[l].otvs:=vop[l].otv2;
if RB3.Checked then vop[l].otvs:=vop[l].otv3;
if RB4.Checked then vop[l].otvs:=vop[l].otv4;
kl:=0;
for i:=1 to z do
if vop[i].otvs=vop[i].otv then inc(kl);
if (kl/z)>0.9 then oc:='оценка 5' else
if (kl/z)>0.75 then oc:='оценка 4' else
if (kl/z)>0.50 then oc:='оценка 3' else
oc:= 'оценка 2' ;
ShowMessage('Правильно ' + inttostr(kl)+ ' из ' + inttostr(z)+ oc);
Start.Visible:=True;
0
5868 / 4596 / 1448
Регистрация: 14.04.2014
Сообщений: 20,393
Записей в блоге: 20
19.05.2018, 13:20 19
конечно все пишите в Settings
это просто переменная. где хранится все что вам надо
0
1 / 1 / 1
Регистрация: 18.03.2018
Сообщений: 138
19.05.2018, 14:14  [ТС] 20
Я описал таким вот способом
Добавил в UMySettings переменную ,которая будет отвечать за оценки Mark
Delphi
1
2
3
4
public
  Mark: integer;
  Login:string;
  Role:string;
После этого добавил в свою форму
Delphi
1
2
3
4
5
6
Form8: TForm8;
  k,m,oc: string;
  f:text;
  z,i,l,kl:integer;
  vop:array[1..100] of v;
  Mark:integer;
После чего описал
Delphi
1
Mark:=(Label1.Caption:='Правильно ' + inttostr(kl)+ ' из ' + inttostr(z)+ oc');
Но при компиляции у меня выскакивает предупреждение что Mark должен быть локальной переменной,я что-то не так делаю ?
[Warning] Unit8.pas(59): For loop control variable must be simple local variable

На всякий случай полный код выложу
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
unit Unit8;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;
 
type
v=record
vop,otv1,otv2,otv3,otv4,otv,otvs:string;
Mark:integer;
end;
  TForm8 = class(TForm)
    Label1: TLabel;
    RB1: TRadioButton;
    RB2: TRadioButton;
    RB3: TRadioButton;
    RB4: TRadioButton;
    Start: TButton;
    E: TButton;
    N: TButton;
    P: TButton;
    OpenDialog1: TOpenDialog;
    Button1: TButton;
    procedure StartClick(Sender: TObject);
    procedure NClick(Sender: TObject);
    procedure PClick(Sender: TObject);
    procedure EClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form8: TForm8;
  k,m,oc: string;
  f:text;
  z,i,l,kl:integer;
  vop:array[1..100] of v;
  Mark:integer;
 
implementation
 
{$R *.dfm}
 
procedure TForm8.StartClick(Sender: TObject);
begin
if OpenDialog1.Execute then
k:= OpenDialog1.FileName;
if k <>' ' then begin
assignfile (f,k);
reset(f);
readln (f,m);
Form8.Caption:='' + m;
readln (f,z);
for i:=1 to z do
begin
readln (f,vop[i].vop);
readln (f,vop[i].otv1);
readln (f,vop[i].otv2);
readln (f,vop[i].otv3);
readln (f,vop[i].otv4);
readln (f,vop[i].otv);
end;
closefile (f);
l:=1;
Label1.Caption:= vop[l].vop;
RB1.Caption:=vop[l].otv1;
RB2.Caption:=vop[l].otv2;
RB3.Caption:=vop[l].otv3;
RB4.Caption:=vop[l].otv4;
if l=z then N.Enabled:=False else N.Enabled:=True;
if l=1 then P.Enabled:=False else P.Enabled:=True;
start.Visible:= false;
E.Visible:=true;
P.Visible:=true;
N.Visible:=true;
RB1.Visible:=true;
RB2.Visible:=true;
RB3.Visible:=true;
RB4.Visible:=true;
end else
Form8.Close;
end;
 
 
procedure TForm8.PClick(Sender: TObject);
begin
if RB1.Checked then vop[l].otvs:=vop[l].otv1;
if RB2.Checked then vop[l].otvs:=vop[l].otv2;
if RB3.Checked then vop[l].otvs:=vop[l].otv3;
if RB4.Checked then vop[l].otvs:=vop[l].otv4;
dec(l);
Label1.Caption:=vop[l].vop;
RB1.Caption:=vop[l].otv1;
RB2.Caption:=vop[l].otv2;
RB3.Caption:=vop[l].otv3;
RB4.Caption:=vop[l].otv4;
if vop[l].otvs = vop[l].otv1 then  RB1.Checked:=True else
if vop[l].otvs = vop[l].otv2 then  RB2.Checked:=True else
if vop[l].otvs = vop[l].otv3 then  RB3.Checked:=True else
if vop[l].otvs = vop[l].otv4 then  RB4.Checked:=True ;
 
if l=z then N.Enabled:=False else N.Enabled:=True;
if l=1 then P.Enabled:=False else P.Enabled:=True;
end;
 
 
procedure TForm8.NClick(Sender: TObject);
begin
if RB1.Checked then vop[l].otvs:=vop[l].otv1;
if RB2.Checked then vop[l].otvs:=vop[l].otv2;
if RB3.Checked then vop[l].otvs:=vop[l].otv3;
if RB4.Checked then vop[l].otvs:=vop[l].otv4;
INC(L);
Label1.Caption:=vop[l].vop;
RB1.Caption:=vop[l].otv1;
RB2.Caption:=vop[l].otv2;
RB3.Caption:=vop[l].otv3;
RB4.Caption:=vop[l].otv4;
 
 
end;
procedure TForm8.EClick(Sender: TObject);
begin
if RB1.Checked then vop[l].otvs:=vop[l].otv1;
if RB2.Checked then vop[l].otvs:=vop[l].otv2;
if RB3.Checked then vop[l].otvs:=vop[l].otv3;
if RB4.Checked then vop[l].otvs:=vop[l].otv4;
kl:=0;
for i:=1 to z do
if vop[i].otvs=vop[i].otv then inc(kl);
if (kl/z)>0.9 then oc:=' оценка 5' else
if (kl/z)>0.75 then oc:=' оценка 4' else
if (kl/z)>0.50 then oc:=' оценка 3' else
oc:= 'оценка 2' ;
Mark:=(Label1.Caption:='Правильно ' + inttostr(kl)+ ' из ' + inttostr(z)+ oc');
 
Start.Visible:=True;
 
E.Visible:=False;
P.Visible:=False;
N.Visible:=False;
RB1.Visible:=False;
RB2.Visible:=False;
RB3.Visible:=False;
RB4.Visible:=False;
end;
 
procedure TForm8.Button1Click(Sender: TObject);
begin
Form8.Close;
end;
 
end.
0
19.05.2018, 14:14
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
19.05.2018, 14:14
Помогаю со студенческими работами здесь

Выгрузка данных из таблицы MS Access в MS excel
Добрый день , форумчане. Столкнулся с такой проблемой - имеется база данных, в ней несколько...

Выгрузка данных из Delphi в Excel
Делаю выгрузку данных через процедуру SendtoExcel. При заполнении массива пишу следующий код:...

Выгрузка данных из таблицы Access в тестовой файл
Добрый вечер. Работаю с делфи недавно есть такая задача надо выгрузить данные по sql запросу из...

Выгрузка данных из 1С SQL Торговля и склад в Access
Поставлена задача, настроить выгрузку данных из 1С SQL Торговля и склад в Access. Опыта ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru