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;
}
|
|
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!!!
Спасибо Георгий!!! Начинающие программисты тебя не забудут во век!!! |
|
Ansar |
Отправлено: 26.07.2003, 09:33 |
|
Не зарегистрирован
|
Шо цэ такэ народ: Del15.mb, Del15.db? Я так понимаю что это временные файлы — остаток от исползования компонента TTable. Вопрос в том как эти временные файлы убирать а то весят немеренно — десятками метров!!!! |
|
Jean |
Отправлено: 27.07.2003, 17:34 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 34
|
На событии Закрытия формы удаляй. Я делал так в одном проекте. Цикл i от 1 до 999, и в цикле удалял такие файлы del + i.db. Работало и даже достаточно быстро.
А по поводу первого вопроса. Я всегда вставляю первые действия в метод 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
|
Я вот что вспомнил! У меня была проблема с переменными, находящимися во вспомогательных формах, которые были объявлены в главной как внешние. Т.е. формы создаются-то все одна за другой в самом начале программы, а отображаются по мере надобности. Вот и выходило, что переменная еще не создана, например, или в ней мусор, вместо значения. Тогда были ошибки "... обратилась не по адресу..."
А с компонентами, по-моему все в порядке. Во всяком случае, пример-то работает Значит мемо уже есть.
|
|
Георгий |
Отправлено: 28.07.2003, 08:58 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Ну мемо — это враппер стандартного виндусового обьекта — т.е. не чистый VCL обьект. А сложности у меня были именно с базами данных через BDE — т.е. как раз с TTable — он как-то странно создавался...
К сожалению проверить работу TTable смогу не скоро — пересел на QNX и Watcom C 10.6
по поводу "проблема с переменными, находящимися во вспомогательных формах, которые были объявлены в главной как внешние" это (связь между модулями по глобальным переменным) обычно проявляется в случае исправления на скорую руку структуры программы, если она была не корректно спроектирована. Но это уже тема другого топика... |
|
Jean |
Отправлено: 30.07.2003, 06:15 |
|
Дежурный стрелочник
Группа: Участник
Сообщений: 34
|
Все прально гришь Но тем не менее такая проблема есть. Кстати, мож подскажешь. Иногда бывает надо обмениваться переменными между формами. Создаю внешние в одной форме и присваиваю им значение с другой формы. Вот не нравится мне этот метод. Как можно по-другому реализовать сей механизм?
|
|
Георгий |
Отправлено: 30.07.2003, 10:31 |
|
Почетный железнодорожник
Группа: Модератор
Сообщений: 874
|
Попробуй через поля формы, которой больше нравятся эти переменные (не знаю как по другому описать эти чувства, но попробуй выбрать ту форму, где их ты в первую очередь искать будешь :-)
По крайней мере это позволит работать нескольким экземплярам формы без конфликта по данным |
|