C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Buildera zamuchila!!!!!
Ansar
  Отправлено: 25.07.2003, 11:02


Не зарегистрирован







Problema sleduyushaya: Kogda puskayu na debug progu (ona nije)
bivaet zapuskaetsya (no chashe naoborot-zavisaet) i eshe vsyakie raznie faili sozdayutsya tipa Del1.MB DEL1.DB Del2.MB Del2.db. Tochnee ne visnet a vo vremya Run-a formochku ne otobrajaet a bivaet s tem je kodom otobrajaet. Pochemu? Esli nado mogu ves` projrkt otoslat`. Narod pomogite nachinayushim programmistam — oni nujdayutsya v vashei podderjke!!!

PS: U menya WinXP, rabotayu cherez BDE
//---------------------------------------------------------------------------

#include
#pragma hdrstop

#include "main.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{

Variant s="";
String s1="";
Variant A[10][10];
ExcelInit(s);

for (int i=1; i<10; i++)
for (int j=1; j<10; j++)
{
A[i][j]=fromExcelCell(i,j);
}

int i=0;

for (Table1->First(); !(Table1->Eof); Table1->Next(), i++)
for (int j=0; j<10; j++)
{
Table1->Insert();
Table1->Fields->FieldByName("FNAME")->AsString="Gehoevich";
Table1->Post();
}


Sh.Clear();
App.Clear();
}

//---------------------------------------------------------------------------------------------------------
void __fastcall TForm1::ExcelInit(String File)
{
try {
App=Variant::CreateObject("Excel.Application");
} catch(...)
{ShowMessage("Cannot create Excel object: may be Excel not installed on this PC.Error");}

try {
if (File==""){
App.OlePropertyGet("WorkBooks").OleProcedure("Open", "xlsdb");}
else{
App.OlePropertyGet("WorkBooks").OleProcedure("add");}
Sh=App.OlePropertyGet("WorkSheets",1);
} catch(...)
{ShowMessage("Error in opening Microsoft Excel WorkBook");}
}
//---------------------------------------------------------------------------------------------------------
Variant __fastcall TForm1::fromExcelCell(int Row, int Column)
{
Variant result;
try {
cur = Sh.OlePropertyGet("Cells",Row,Column);
result = cur.OlePropertyGet("Value");
} catch(...) {;}
return result;
}
sad.gif
Gedeon
Отправлено: 25.07.2003, 11:42


Ветеран

Группа: Модератор
Сообщений: 1742



А что у тебя с языком я нихрена не понял, а расшифровкой заниматься не хочется, напиши по русски
Георгий
Отправлено: 25.07.2003, 18:05


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



транслит это конечно плохо, но ещё хуже то, что ты в конструкторе формы обращаешься к обьектам VCL (TTable) — они этого не любят т.к. почему-то создаются после отработки конструктора.
Я лечил это размещением в OnActivate такого кода:
CODE
static bool z=true;
if (z)
{
z=false;
...
//код что у тебя в конструкторе
...
};
Другого лечения я не знаю...
sibo
Отправлено: 26.07.2003, 08:41


Не зарегистрирован







Spasibo Georgiy!!! Nachinayushie programmisty tebya vo vek ne zabudut!!! biggrin.gif cool.gif smile.gif

Спасибо Георгий!!! Начинающие программисты тебя не забудут во век!!!biggrin.gif cool.gif smile.gif
Ansar
Отправлено: 26.07.2003, 09:33


Не зарегистрирован







Шо цэ такэ народ: Del15.mb, Del15.db? Я так понимаю что это временные файлы — остаток от исползования компонента TTable. Вопрос в том как эти временные файлы убирать а то весят немеренно — десятками метров!!!! wink.gif
Jean
Отправлено: 27.07.2003, 17:34


Дежурный стрелочник

Группа: Участник
Сообщений: 34



На событии Закрытия формы удаляй. Я делал так в одном проекте. Цикл i от 1 до 999, и в цикле удалял такие файлы del + i.db. Работало и даже достаточно быстро. smile.gif
А по поводу первого вопроса. Я всегда вставляю первые действия в метод show формы. Тогда можно обойтись без переменной z.
Георгий
Отправлено: 27.07.2003, 19:03


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



А по поводу первого вопроса. Я всегда вставляю первые действия в метод show формы. Тогда можно обойтись без переменной z.
Если речь идёт о onShow главной формы то тогда действительно можно обойтись без дополнительной переменной, но если о onShow любой другой формы, то тут без z не обойтись т.к. без неё этот код будет выполняться при каждом показе формы, что не всегда приемлемо.

Смущает то, что Borland так странно спроектировала свои VCL обьекты, что приходится через ... с ними работать (тут, наверное, ноги растут из Pascal`евского происхождения VCL).
Jean
Отправлено: 27.07.2003, 21:01


Дежурный стрелочник

Группа: Участник
Сообщений: 34



...этот код будет выполняться при каждом показе формы...[I]
Точно. Но если есть такой код, который выполняется один раз в самом начале проекта, то есть смысл настроить все ручками. Во всяком случае, я очень стараюсь уйти от таких решений. А то, что должно каждый раз появляться — в OnShow.

void __fastcall TForm1::Button1Click(TObject *Sender)
{
Form2->ShowModal();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
Memo1->Lines->Add("Activate");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormCreate(TObject *Sender)
{
Memo1->Lines->Add("Create");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormPaint(TObject *Sender)
{
Memo1->Lines->Add("Paint");
Memo1->Lines->Add("-----");
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormShow(TObject *Sender)
{
Memo1->Lines->Add("Show");
}
//---------------------------------------------------------------------------
У второй формы абсолютно тоже самое. Для главной каждый раз пейнт, для воторой — три события, кроме создания.

Отредактировано Jean — 27/07/2003, 22:06
Георгий
Отправлено: 27.07.2003, 22:42


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



а разве во время выполнения FormCreate все VCL обьекты уже созданы?
я когда 2,5 года назад с этим мучился мне показалось, что конструктор и Create формы вызываются тогда, когда некоторые VCL обьекты (TTable и т.п.) ещё не создались, поэтому и стал использовать onActivate (onShow мне почему-то не понравился :-) с програмный триггером.
Jean
Отправлено: 27.07.2003, 22:54


Дежурный стрелочник

Группа: Участник
Сообщений: 34



Я вот что вспомнил! У меня была проблема с переменными, находящимися во вспомогательных формах, которые были объявлены в главной как внешние. Т.е. формы создаются-то все одна за другой в самом начале программы, а отображаются по мере надобности. Вот и выходило, что переменная еще не создана, например, или в ней мусор, вместо значения. Тогда были ошибки "... обратилась не smile.gif по адресу..."
А с компонентами, по-моему все в порядке. Во всяком случае, пример-то работает smile.gif Значит мемо уже есть.
Георгий
Отправлено: 28.07.2003, 08:58


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Ну мемо — это враппер стандартного виндусового обьекта — т.е. не чистый VCL обьект. А сложности у меня были именно с базами данных через BDE — т.е. как раз с TTable — он как-то странно создавался...
К сожалению проверить работу TTable смогу не скоро — пересел на QNX и Watcom C 10.6

по поводу "проблема с переменными, находящимися во вспомогательных формах, которые были объявлены в главной как внешние" это (связь между модулями по глобальным переменным) обычно проявляется в случае исправления на скорую руку структуры программы, если она была не корректно спроектирована. Но это уже тема другого топика...
Jean
Отправлено: 30.07.2003, 06:15


Дежурный стрелочник

Группа: Участник
Сообщений: 34



Все прально гришь smile.gif Но тем не менее такая проблема есть. Кстати, мож подскажешь. Иногда бывает надо обмениваться переменными между формами. Создаю внешние в одной форме и присваиваю им значение с другой формы. Вот не нравится мне этот метод. Как можно по-другому реализовать сей механизм?
Георгий
Отправлено: 30.07.2003, 10:31


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



Попробуй через поля формы, которой больше нравятся эти переменные smile.gif (не знаю как по другому описать эти чувства, но попробуй выбрать ту форму, где их ты в первую очередь искать будешь :-)
По крайней мере это позволит работать нескольким экземплярам формы без конфликта по данным

Вернуться в Вопросы программирования в C++Builder