Бывалый

Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я
Репутация: 1 Всего: 1
|
Пишу программу, работающую с базой данных. Т.к. возможно последующее расширение программы, решил все функции работы с БД вынести в отдельный класс. Для работы с формой из класса я передаю указатели на объекты вкачестве параметров функции члена-класса, которая в свою очередь связывает их с закрытыми членами, определенными в классе. До недавнего времени все шло хорошо, пока я не решил убрать временные ComboBox'ы из листинга. Тут начала выпадать следующая ошибка: Project Project1.exe raised exception class EAccessViolation with message 'Access violation at address 00401B59 in module 'Project1.exe'.Write of address 00000000'.Process stoped. Use Step or Run to continue.Если ComboBox'ы вернуть на место, ошибка больше не появляется. Если убрать или добавить еще один ComboBox - ошибка появляется вновь. Ничего не пойму. Помогите кто может, вот исходники: Файл Project.cpp: | Код | //---------------------------------------------------------------------------
#include <vcl.h> #pragma hdrstop
#include "Otravlenie.h"
//--------------------------------------------------------------------------- #pragma package(smart_init) #pragma resource "*.dfm" TForm1 *Form1;
#include "obrab_otrav.h"
//--------------------------------------------------------------------------- __fastcall TForm1::TForm1(TComponent* Owner) : TForm(Owner) { obrab_otrav *obrabotka; obrabotka->init_component(ADOConnection1,ADOQuery1,ComboBox1,Edit1, ComboBox2,Edit2,ComboBox3,Edit3,Edit4,Edit5,Edit6,Edit7, Edit8,ComboBox4,Edit9,Edit10,ComboBox5,Edit11,Edit12,ComboBox6, ComboBox7,ComboBox8,Edit16,ComboBox9,ComboBox10,ComboBox11, ComboBox12,Edit13,Edit14,Edit15); obrabotka->init_form();
//--Вот эти ComboBox'ы из-за которых происходит ошибка, если их убрать ComboBox13->Items->Insert(0,"1234567"); ComboBox13->Items->Insert(1,"123456"); ComboBox13->Items->Insert(2,"12345"); ComboBox13->Items->Insert(3,"1234"); ComboBox13->Items->Insert(4,"123"); ComboBox13->Items->Insert(5,"12");
}
|
Описание класса файл obrab_otrav.h | Код | class obrab_otrav{ private:
TADOConnection* Conection; TADOQuery* Query; TComboBox* ucregdenie; TEdit* fio; TComboBox* pol; TEdit* vozrast; TComboBox* soc_pol; TEdit* adres1; TEdit* adres2; TEdit* adres3; TEdit* adres4; TEdit* adres5; TEdit* adres6; TComboBox* mesto_proishestviya; TEdit* mesto_proishestviya_pr; TEdit* name_mesta_proish; TComboBox* data; TEdit* data_val; TEdit* diagnoz; TComboBox* diagnoz_ustanovlen; TComboBox* okazana_pom; TComboBox* mesto_smerti; TEdit* mesto_smerti_pr; TComboBox* harakter_obstoyatelstva; TComboBox* name_tip; TComboBox* obstoyatelstva_otrav; TComboBox* mesto_priobreteniya; TEdit* mesto_priobreteniya_pr; TEdit* data_zapoln; TEdit* med_rabotnik;
int* ucregdenie_mas; int* pol_mas; int* soc_pol_mas; int* mesto_proishestviya_mas; int* data_mas; int* diagnoz_ustanovlen_mas; int* okazana_pom_mas; int* mesto_smerti_mas; int* harakter_obstoyatelstva_mas; int* name_tip_mas; int* obstoyatelstva_otrav_mas; int* mesto_priobreteniya_mas;
public:
obrab_otrav();
//Передача компонентов в класс, создание копий void init_component(TADOConnection* Conection1,TADOQuery* Query1,TComboBox* ucregdenie1, TEdit* fio1,TComboBox* pol1,TEdit* vozrast1,TComboBox* soc_pol1,TEdit* adres11, TEdit* adres22,TEdit* adres33,TEdit* adres44,TEdit* adres55,TEdit* adres66, TComboBox* mesto_proishestviya1,TEdit* mesto_proishestviya_pr1,TEdit* name_mesta_proish1, TComboBox* data1,TEdit* data_val1,TEdit* diagnoz1,TComboBox* diagnoz_ustanovlen1, TComboBox* okazana_pom1,TComboBox* mesto_smerti1,TEdit* mesto_smerti_pr1, TComboBox* harakter_obstoyatelstva1,TComboBox* name_tip1,TComboBox* obstoyatelstva_otrav1, TComboBox* mesto_priobreteniya1,TEdit* mesto_priobreteniya_pr1,TEdit* data_zapoln1, TEdit* med_rabotnik1);
// void init_form(); // void zapoln_combobox(int* x,AnsiString sql,AnsiString nom,AnsiString val,TComboBox* box);
bool log_control(); //bool write_bd(); //bool read_bd(); //bool generate_report(); };
bool obrab_otrav::log_control(){ fio->Text = "??????"; return 1; }
void obrab_otrav::init_component(TADOConnection* Conection1,TADOQuery* Query1,TComboBox* ucregdenie1, TEdit* fio1,TComboBox* pol1,TEdit* vozrast1,TComboBox* soc_pol1,TEdit* adres11, TEdit* adres22,TEdit* adres33,TEdit* adres44,TEdit* adres55,TEdit* adres66, TComboBox* mesto_proishestviya1,TEdit* mesto_proishestviya_pr1,TEdit* name_mesta_proish1, TComboBox* data1,TEdit* data_val1,TEdit* diagnoz1,TComboBox* diagnoz_ustanovlen1, TComboBox* okazana_pom1,TComboBox* mesto_smerti1,TEdit* mesto_smerti_pr1, TComboBox* harakter_obstoyatelstva1,TComboBox* name_tip1,TComboBox* obstoyatelstva_otrav1, TComboBox* mesto_priobreteniya1,TEdit* mesto_priobreteniya_pr1,TEdit* data_zapoln1, TEdit* med_rabotnik1) { Conection = Conection1; <---- "При возникновении ошибки, компилятор указывает вот сюда" Query = Query1; ucregdenie = ucregdenie1; fio = fio1; pol = pol1; vozrast = vozrast1; soc_pol = soc_pol1; adres1 = adres11; adres2 = adres22; adres3 = adres33; adres4 = adres44; adres5 = adres55; adres6 = adres66; mesto_proishestviya = mesto_proishestviya1; mesto_proishestviya_pr = mesto_proishestviya_pr1; name_mesta_proish = name_mesta_proish1; data = data1; data_val = data_val1; diagnoz = diagnoz1; diagnoz_ustanovlen = diagnoz_ustanovlen1; okazana_pom = okazana_pom1; mesto_smerti = mesto_smerti1; mesto_smerti_pr = mesto_smerti_pr1; harakter_obstoyatelstva = harakter_obstoyatelstva1; name_tip = name_tip1; obstoyatelstva_otrav = obstoyatelstva_otrav1; mesto_priobreteniya = mesto_priobreteniya1; mesto_priobreteniya_pr = mesto_priobreteniya_pr1; data_zapoln = data_zapoln1; med_rabotnik = med_rabotnik1; }
void obrab_otrav::init_form(){ //?????????? ??????????--------------------------------------------------------- AnsiString sql,nom,val; //------------------------------------------------------------------------------ //??????????? ? ?? Conection->ConnectionString = "Provider=MSDASQL.1;Persist Security Info=False;User ID=Administrator;Data Source=MyBD"; Conection->Provider = "MSDASQL"; Conection->DefaultDatabase = "Otrava"; Conection->Connected = true; Query->Connection = Conection;
//?????????? ?????? "?????????? ???????????????" sql = "select UCREGDENIE,NAME from UCREGDENIE_ZDRAV"; nom = "UCREGDENIE"; val = "NAME"; zapoln_combobox(ucregdenie_mas,sql,nom,val,ucregdenie);
//?????????? ?????? "???" sql = "select POL,NAME_POL from POL"; nom = "POL"; val = "NAME_POL"; zapoln_combobox(pol_mas,sql,nom,val,pol);
//?????????? ?????? "?????????? ?????????" sql = "select SOC_POL,NAME_SOC_POL from SOC_POLOGENIE"; nom = "SOC_POL"; val = "NAME_SOC_POL"; zapoln_combobox(soc_pol_mas,sql,nom,val,soc_pol);
//?????????? ?????? "????? ????????????" sql = "select MESTO_PROISHESTVIYA,NAME_MESTA from MESTO_PROISHESTVIYA"; nom = "MESTO_PROISHESTVIYA"; val = "NAME_MESTA"; zapoln_combobox(mesto_proishestviya_mas,sql,nom,val,mesto_proishestviya);
//?????????? ?????? "????" sql = "select DATA,NAME_DATA from DATA_PROISHESTVIYA"; nom = "DATA"; val = "NAME_DATA"; zapoln_combobox(data_mas,sql,nom,val,data);
//?????????? ?????? "??????? ??????????" sql = "select DIAGNOZ_USTANOVLEN,NAME_DIAGNOZ from DIAGNOZ_USTANOVLEN"; nom = "DIAGNOZ_USTANOVLEN"; val = "NAME_DIAGNOZ"; zapoln_combobox(diagnoz_ustanovlen_mas,sql,nom,val,diagnoz_ustanovlen);
//?????????? ?????? "??????? ???. ??????" sql = "select OKAZANA_POM,NAME_POM from OKAZANA_POM"; nom = "OKAZANA_POM"; val = "NAME_POM"; zapoln_combobox(okazana_pom_mas,sql,nom,val,okazana_pom);
//?????????? ?????? "?????? ?????????" sql = "select MESTO_SMERTI,NAME from SMERT_NASTUPILA"; nom = "MESTO_SMERTI"; val = "NAME"; zapoln_combobox(mesto_smerti_mas,sql,nom,val,mesto_smerti);
//?????????? ?????? "?????????????? ?????????? - ????????" sql = "select HARAKTER_OBSTOYATELSTVA,NAME_OBSTOYATELSTVA from HARAKTER_OBSTOYATELSTVA"; nom = "HARAKTER_OBSTOYATELSTVA"; val = "NAME_OBSTOYATELSTVA"; zapoln_combobox(harakter_obstoyatelstva_mas,sql,nom,val,harakter_obstoyatelstva);
//?????????? ?????? "?????????????? ?????????? - ???" sql = "select NAME_TYPE,NAME_T from NAME_TYPE"; nom = "NAME_TYPE"; val = "NAME_T"; zapoln_combobox(name_tip_mas,sql,nom,val,name_tip);
//?????????? ?????? "????? ???????????? ???" sql = "select MESTO_PRIOBRETENIYA,NAME_MESTA from MESTO_PRIOBRETENIYA"; nom = "MESTO_PRIOBRETENIYA"; val = "NAME_MESTA"; zapoln_combobox(mesto_priobreteniya_mas,sql,nom,val,mesto_priobreteniya);
Conection->Connected = false; }
void obrab_otrav::zapoln_combobox(int* x,AnsiString sql, AnsiString nom,AnsiString val,TComboBox* box){ int temp=0; Query->SQL->Clear(); Query->SQL->Add(sql); Query->Open(); temp = Query->RecordCount; if(temp!=0){ x = new int[ temp ]; for(int i=0;i<temp;i++){ x[i] = Query->operator [](nom); box->Items->Insert(i,Query->operator [](val)); Query->Next(); } } Query->Close();
}
| Это сообщение отредактировал(а) Oberon83 - 13.9.2005, 09:02
--------------------
OpenArea.ru
|