Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
3 / 3 / 0
Регистрация: 04.10.2014
Сообщений: 40
1
MS Access

Ошибка при попытке создать форму редактирования данных в таблице

19.11.2016, 16:03. Показов 807. Ответов 4

Author24 — интернет-сервис помощи студентам
Добрый день, срочно нужна помощь.
Пишу курсовой проект, сдача в понедельник. Программа использует БД Access 2003 (*.mdb).
Суть проблемы: почему-то при нажатии на кнопку "Добавить заказ" (т.е. при попытке создать форму, которая должна выбрать из двух других таблиц данные и предоставить для выбора), вылезает ошибка "Access violation at address 0049B05F in module 'CarArendator.exe'. Read of address 00000000." Вот уже полдня бьюсь и все никак не пойму в чем дело.
Насколько я понял, проблема кроется в одном или обоих комбо-боксах выбора № паспорта или ФИО (груп-бокс "Выбор клиента"). Что только не пробовал, и менял настройки полей в Access, и проверял запросы, которые управляют этими комбо-боксами...
Помогите, чем только можно, буду весьма благодарен....
Архив с проектом прилагается....
Ошибка при попытке создать форму редактирования данных в таблице
Ошибка при попытке создать форму редактирования данных в таблице

KURS_2016.zip
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2016, 16:03
Ответы с готовыми решениями:

Ошибка при попытке редактирования DataGridView
Здравствуйте. Помогите, пожалуйста, разобраться. Есть несколько форм: основная и запускаемые по...

Ошибка при попытке обновить содержимое в таблице
Здравствуйте, столкнулся с проблемой, помогите если не сложно) При попытке обновить записи в БД...

Ошибка при попытке добавить запись, используя форму
Здравствуйте. Хочу использовать форму для добавления записей, но появляется следующая ошибка: ...

Ошибка при попытке отправить форму: onsubmit is not a function
Доброго времени суток! Подскажите, пожалуйста, что делаю не так при попытке отправить форму: ...

4
1074 / 987 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
19.11.2016, 19:53 2
Просто пропущен оператор открытия набора данных
Delphi
1
2
3
4
5
6
7
8
    ...
    //определяем, была ли машина в дтп
     DMOrders.QAccident.Close;
     DMOrders.QAccident.SQL.Clear;
     DMOrders.QAccident.SQL.Add('select ДТП from Cars where ...');
     DMOrders.QAccident.Open;  //в оригинальном тексте этой строки нет
     if(DMOrders.QAccident.FieldByName('ДТП').AsBoolean = false) then
     ...
1
3 / 3 / 0
Регистрация: 04.10.2014
Сообщений: 40
19.11.2016, 20:44  [ТС] 3
Цитата Сообщение от Скандербег Посмотреть сообщение
Просто пропущен оператор открытия набора данных
Delphi
1
2
3
4
5
6
7
8
    ...
    //определяем, была ли машина в дтп
     DMOrders.QAccident.Close;
     DMOrders.QAccident.SQL.Clear;
     DMOrders.QAccident.SQL.Add('select ДТП from Cars where ...');
     DMOrders.QAccident.Open;  //в оригинальном тексте этой строки нет
     if(DMOrders.QAccident.FieldByName('ДТП').AsBoolean = false) then
     ...
Но тогда почему после того, как я закрываю сообщение об ошибке (Access violation...), у меня пустые комбобоксы выбора № паспорта и ФИО?
0
3 / 3 / 0
Регистрация: 04.10.2014
Сообщений: 40
20.11.2016, 11:05  [ТС] 4
Цитата Сообщение от Скандербег Посмотреть сообщение
Просто пропущен оператор открытия набора данных
Спасибо, ошибку исправил. Но появилась другая проблема: в таблице при добавлении записи не отображаются поля, кроме полей "Цена" и "Выполнен". Причем при открытии той же БД в Access они заполнены (см. скриншот).
Ошибка при попытке создать форму редактирования данных в таблице

Я думаю, ошибка заключена в обработчиках TAEOrdersForm.BtnMakeClick или TAEOrdersForm.FormCreate (коды см. ниже). Но опять же, не пойму, в чем она состоит.
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
procedure TAEOrdersForm.BtnMakeClick(Sender: TObject);
begin
     if(event = EVENT_ADD) then
     begin
          if(PickBegin.Date > PickEnd.Date) then
          begin
               MessageDlg('Дата начала аренды позднее даты конца. Невозможно сохранить заказ.',mtError,[mbOK],0);
               exit;
          end;
          if((StrToInt(Edit3.Text)>=1930) and (StrToInt(Edit3.Text)<=1979)) then //проверка на год выпуска
          //соответственно изменяется значение цены
          begin
               EditPrice.Text := FloatToStr(StrToFloat(EditPrice.Text)*1.25);
               MessageDlg('Автомобиль выпущен с 1930 по 1979 год. Доплата +25%.',mtInformation,[mbOK],0);
          end;
          if(Label11.Font.Color = clRed) then
          begin
               EditPrice.Text := FloatToStr(StrToFloat(EditPrice.Text)*0.9);
               MessageDlg('Автомобиль побывал в аварии. Скидка -10%.',mtInformation,[mbOK],0);
          end;
          DMOrders.TabOrders.Insert;
          DMOrders.TabOrders.Append;
          DMOrders.TabOrders.FieldByName('Номер_автомобиля').AsString := CmBLics.Text;
          DMOrders.TabOrders.FieldByName('Номер_паспорта').AsString := PaspCombo.Text;
          DMOrders.TabOrders.FieldByName('Дата_начала').AsDateTime := PickBegin.Date;
          DMOrders.TabOrders.FieldByName('Дата_конца').AsDateTime := PickEnd.Date;
          DMOrders.TabOrders.FieldByName('Цена').AsFloat := StrToFloat(EditPrice.Text);
          DMOrders.TabOrders.FieldByName('Выполнен').AsBoolean := false;
          DMOrders.TabOrders.Post;
          Close;
     end; //end "if event = EVENT_ADD"
end;
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
procedure TAEOrdersForm.FormCreate(Sender: TObject);
var i, Marks, Models, Colors, Lics, Pasps, Fios: integer;
begin
     if(event = EVENT_ADD) then
     begin
     DMOrders.QMarksCombo.Close;
     DMOrders.QMarksCombo.SQL.Clear;
     DMOrders.QMarksCombo.SQL.Add('select distinct Марка from Cars');
     DMOrders.QMarksCombo.Open;
     Marks := DMOrders.QMarksCombo.RecordCount;
     CmBMarks.Items.Clear;
     DMOrders.QMarksCombo.First;
     for i:=0 to Marks-1 do
     begin
          CmBMarks.Items.Add(DMOrders.QMarksCombo.Fields[0].AsString);
          DMOrders.QMarksCombo.Next;
     end;
     CmBMarks.ItemIndex := 0;
     DMOrders.QModelsCombo.Close;
     DMOrders.QModelsCombo.SQL.Clear;
     DMOrders.QModelsCombo.SQL.Add('select distinct Модель from Cars where Марка = "'+CmBMarks.Text+'"');
     DMOrders.QModelsCombo.Open;
     Models := DMOrders.QModelsCombo.RecordCount;
     CmBModels.Items.Clear;
     DMOrders.QModelsCombo.First;
     for i:=0 to Models-1 do
     begin
          CmBModels.Items.Add(DMOrders.QModelsCombo.Fields[0].AsString);
          DMOrders.QModelsCombo.Next;
     end;
     CmBModels.ItemIndex := 0;
     DMOrders.QColorsCombo.Close;
     DMOrders.QColorsCombo.SQL.Clear;
     DMOrders.QColorsCombo.SQL.Add('select distinct Цвет from Cars where (Марка = "'+CmBMarks.Text+'") and (Модель = "'+CmBModels.Text+'")');
     DMOrders.QColorsCombo.Open;
     Colors := DMOrders.QColorsCombo.RecordCount;
     CmBColors.Items.Clear;
     DMOrders.QColorsCombo.First;
     for i:=0 to Colors-1 do
     begin
          CmBColors.Items.Add(DMOrders.QColorsCombo.Fields[0].AsString);
          DMOrders.QColorsCombo.Next;
     end;
     CmBColors.ItemIndex := 0;
     DMOrders.QLicenses.Close;
     DMOrders.QLicenses.SQL.Clear;
     DMOrders.QLicenses.SQL.Add('select Номерной_знак from Cars where (Марка = "'+CmBMarks.Text+'") and (Модель = "'+CmBModels.Text+'") and (Цвет = "'+CmBColors.Text+'")');
     DMOrders.QLicenses.Open;
     Lics := DMorders.QLicenses.RecordCount;
     DMOrders.QLicenses.First;
     CmBLics.Items.Clear;
     for i:=0 to Lics-1 do
     begin
          CmBLics.Items.Add(DMOrders.QLicenses.Fields[0].AsString);
          DMOrders.QLicenses.Next;
     end;
     CmBLics.ItemIndex := 0;
     DMOrders.QYears.Close; //начинаем выводить год выпуска в поле Edit3
     DMOrders.QYears.SQL.Clear;
     DMOrders.QYears.SQL.Add('select Год_выпуска from Cars where (Марка = "'+CmBMarks.Text+'") and (Модель = "'+CmBModels.Text+'") and (Цвет = "'+CmBColors.Text+'") and (Номерной_знак = "'+CmBLics.Text+'")');
     DMOrders.QYears.Open;
     Edit3.Text := DMOrders.QYears.Fields[0].AsString;
     //определяем, была ли машина в дтп
     DMOrders.QAccident.Close;
     DMOrders.QAccident.SQL.Clear;
     DMOrders.QAccident.SQL.Add('select ДТП from Cars where (Марка = "'+CmBMarks.Text+'") and (Модель = "'+CmBModels.Text+'") and (Цвет = "'+CmBColors.Text+'") and (Номерной_знак = "'+CmBLics.Text+'") and (Год_выпуска = '+Edit3.Text+')');
     DMOrders.QAccident.Open;
     if(DMOrders.QAccident.FieldByName('ДТП').AsBoolean = false) then
     begin
          Label11.Font.Color := clGreen;
          Label11.Caption := 'Машина не повреждалась';
     end
     else begin
               Label11.Font.Color := clRed;
               Label11.Caption := 'Машина побывала в аварии';
          end;
     DMOrders.QPasports.Close;
     DMOrders.QPasports.SQL.Clear;
     DMOrders.QPasports.SQL.Add('select Паспорт from Clients');
     DMOrders.QPasports.Open;
     Pasps := DMOrders.QPasports.RecordCount;
     PaspCombo.Items.Clear;
     DMOrders.QPasports.First;
     for i:=0 to Pasps-1 do
     begin
          PaspCombo.Items.Add(DMOrders.QPasports.Fields[0].AsString);
          DMOrders.QPasports.Next;
     end;
     PaspCombo.ItemIndex := 0;
     DMOrders.QFios.Close;
     DMOrders.QFios.SQL.Clear;
     DMOrders.QFios.SQL.Add('select ФИО from Clients');
     DMOrders.QFios.Open;
     Fios := DMOrders.QFios.RecordCount;
     FioCombo.Items.Clear;
     DMOrders.QFios.First;
     for i:=0 to Fios-1 do
        begin
             FioCombo.Items.Add(DMOrders.QFios.Fields[0].AsString);
             DMOrders.QFios.Next;
        end;
     FioCombo.ItemIndex := 0;
     Edit1.Text := PaspCombo.Items[0];
     Edit2.Text := FioCombo.Items[0];
     end; //end "if event = EVENT_ADD"
     if(event = EVENT_EDIT) then
     begin
          CmBMarks.Enabled := false;
          CmBModels.Enabled := false;
          CmBColors.Enabled := false;
          CmBLics.Enabled := false;
          CmBLics.Text := DMOrders.TabOrders.FieldByName('Номер_автомобиля').AsString;
          GBSelClient.Enabled := false;
          RBPasport.Enabled := false;
          RBFio.Enabled := false;
          PaspCombo.Enabled := false;
          PaspCombo.Text := DMOrders.TabOrders.FieldByName('Номер_паспорта').AsString;
          FioCombo.Enabled := false;
          Edit1.Enabled := false;
          Edit2.Enabled := false;
          GBDates.Enabled := false;
          PickBegin.Enabled := false;
          PickBegin.Date := DMOrders.TabOrders.FieldByName('Дата_начала').AsDateTime;
          PickEnd.Enabled := false;
          PickEnd.Date := DMOrders.TabOrders.FieldByName('Дата_конца').AsDateTime;
          EditPrice.Text := FloatToStr(DMOrders.TabOrders.FieldByName('Цена').AsFloat);
          CheckBox.Enabled := true;
          CheckBox.Checked := DMOrders.TabOrders.FieldByName('Выполнен').AsBoolean;
          BtnMake.Caption := 'Сохранить';
     end; //end "if event = EVENT_EDIT"
end;
Слегка переделанный проект прилагается:
KURS_2016.zip
0
1074 / 987 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
20.11.2016, 11:53 5
Данные в гриде не появляются из-за того что в его колонках неверно указаны имена полей.
Как надо см. картинку.
Миниатюры
Ошибка при попытке создать форму редактирования данных в таблице  
1
20.11.2016, 11:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.11.2016, 11:53
Помогаю со студенческими работами здесь

При попытке создать директорию ошибка: Невозможно создать файл т.к. он уже существует
Здравствуйте. Использую такой вот код: int WriteLog( ) { ofstream myfile; LPCTSTR path...

Функция формирует форму для редактирования записи в таблице БД
помогите, пожалуйста, при обращении к функции возвращает ошибку &quot; Warning: mysql_fetch_array()...

Ошибка при попытке создать поток
Имеется функция void wait(){ int waitt = (rand() % 3900 + 100); Thread::Sleep(waitt); } при...

Ошибка сегментации при попытке создать массив
#include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; void init(int* arr, int n) { arr = malloc(n *...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru