Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Передача компонентов в класс, Непонятная ошибка 
:(
    Опции темы
Oberon83
Дата 13.9.2005, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 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
PM MAIL ICQ   Вверх
_hunter
Дата 13.9.2005, 11:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



кто тебя так:
obrab_otrav *obrabotka;
объекты создавать учил?
потому и ошибка появляется, что память еще не распределилась.


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Oberon83
Дата 13.9.2005, 11:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: 1
Всего: 1



_hunter obrab_otrav *obrabotka; - это Билдер меня научил.
Если делать obrab_otrav obrabotka;, то при вызове функций класса, он пишет ошибку :
[C++ Error] Otravlenie.cpp(20): E2288 Pointer to structure required on left side of -> or ->*
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
_hunter
Дата 13.9.2005, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



Цитата
это Билдер меня научил.

даа??? интересно как? ( странный у тебя билдер )
Цитата
Если делать obrab_otrav obrabotka;, то при вызове функций класса, он пишет ошибку

а точку слабо поставить?

P.S.
а вообще почитай какую-нить книгу по поводу указателей, динамического создания переменных а потом классов...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Oberon83
Дата 13.9.2005, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 158
Регистрация: 6.5.2005
Где: Республика Чуваши я

Репутация: 1
Всего: 1



Цитата(_hunter @ 13.9.2005, 11:23)
.S.
а вообще почитай какую-нить книгу по поводу указателей, динамического создания переменных а потом классов..

Читал, просто в Buider'e давно не работал, синтаксис забыл. И Builder пришлось переставить, потому что на точку он тоже ругался. Сейчас вроде все работает, спасибо.
--------------------
OpenArea.ru
PM MAIL ICQ   Вверх
_hunter
Дата 13.9.2005, 12:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 24
Всего: 98



єто не синтаксис -- єто грамматика smile
у тебя и дальше косяки полезут с таким способом создания...


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Artemon
Дата 14.9.2005, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


а ты мне нравишься
***


Профиль
Группа: Завсегдатай
Сообщений: 1771
Регистрация: 24.2.2004
Где: Челябинск

Репутация: 7
Всего: 20



Oberon83, а слабо оператор new написать ?


--------------------
Контроль топлива на топливозаправщиках, мониторинг автотранспорта, расчет зарплаты водителей www.rscat.ru
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0487 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.