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

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

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

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

KURS_2016.zip
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.11.2016, 16:03
Ответы с готовыми решениями:

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

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

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

4
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
19.11.2016, 19:53
Просто пропущен оператор открытия набора данных
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  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
Просто пропущен оператор открытия набора данных
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  [ТС]
Цитата Сообщение от Скандербег Посмотреть сообщение
Просто пропущен оператор открытия набора данных
Спасибо, ошибку исправил. Но появилась другая проблема: в таблице при добавлении записи не отображаются поля, кроме полей "Цена" и "Выполнен". Причем при открытии той же БД в 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
1076 / 989 / 340
Регистрация: 07.08.2012
Сообщений: 2,790
20.11.2016, 11:53
Данные в гриде не появляются из-за того что в его колонках неверно указаны имена полей.
Как надо см. картинку.
Миниатюры
Ошибка при попытке создать форму редактирования данных в таблице  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.11.2016, 11:53
Помогаю со студенческими работами здесь

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

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

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

Ошибка при попытке создать поток
Имеется функция 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 * sizeof(int)); int i; for (i =...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru