Юзаю TDBF в одном из классов (т.е. компонент брошен не на форму, а в классе динамически создается). Если таблицы не существует — ручками добавляю определения полей и индексов, потом вызываю Avctive = true. TableLevel установлен в 7. Способ создания таблицы — omAutoCreate.
Что самое интересное: получил несколько писем от болгар (привет братьям-славянам
), в которых говорится об ошибке "Не удалось создать пустую базу!". Эта ошибка, собственно, и возникает тогда, когда перехвачен Exception при вызове CreateTable, который, суть, всё одно вызывается, если таблички на диске нету (это я про косвенность вызова Active = true).
Грешу на всяческие Codepage и LanguageID. Беглый просмотр исходников TDBF показал, что вроде как компонент сам разруливает ситуацию с определением кодовых страниц и прочего подобного добра. Мне — так вообще пофигу, какая там локаль: я все текстовые данные держу в Base64.
Пока проблема решилась включением пустой базы в сетап, но чувствую, что это ну просто очень неправильно, т.к. фик его знает, где выплывет косяк на этот раз — база-то создавалась на моей машине, под русской локалью.
Вопрос, собственно, в чем: можно ли как-то дать понять TDBF, что мне наплевать на всяческие локали и пускай он не дурит и просто создаст файлики на диске? И если можно, то где подрихтовать?
Здравствуйте, Flamer, Вы писали:
А нельзя ли уточнить кто создатель компоненты ?
А то у меня конфликт имен
Здравствуйте, Danchik, Вы писали:
D>А нельзя ли уточнить кто создатель компоненты ?
D>А то у меня конфликт имен
Компонент был взят отсюда:
http://tdbf.sourceforge.net/
Здравствуйте, Flamer, Вы писали:
F>Здравствуйте, Danchik, Вы писали:
D>>А нельзя ли уточнить кто создатель компоненты ?
D>>А то у меня конфликт имен
F>Компонент был взят отсюда: http://tdbf.sourceforge.net/
Хм, создаются таблички. Это самое, может креш код (сампл) который крешает (не работает).
Так с ходу у TDBF есть событие OnLocaleError : TDbfLocaleErrorEvent
TDbfLocaleErrorEvent = procedure(var Error: TLocaleError; var Solution: TLocaleSolution) of object;
в котором можна возвратить Solution := lsBinary
Здравствуйте, Danchik, Вы писали:
[]
D>Хм, создаются таблички. Это самое, может креш код (сампл) который крешает (не работает).
Да и у меня тоже создаются
А код довольно простой и тупой:
bool __fastcall TDB::CreateCategoryTable()
{
try
{
// Create table for note categories
FCategoryTable->TableLevel = 7;
FCategoryTable->TableName = FCategoryFileName;
FCategoryTable->OpenMode = omAutoCreate;
FCategoryTable->StoreDefs = true;
FCategoryTable->FieldDefs->Clear();
//DONE: Структура таблицы категорий
TFieldDef* def = FCategoryTable->FieldDefs->AddFieldDef();
def->Required = true;
def->DataType = ftAutoInc;
def->Name = "CategoryID";
def = FCategoryTable->FieldDefs->AddFieldDef();
def->Required = true;
def->DataType = ftString;
def->Name = "CategoryName";
def->Size = MAX_CATEGORY_NAME_LENGTH;
def = FCategoryTable->FieldDefs->AddFieldDef();
def->Required = true;
def->DataType = ftDateTime;
def->Name = "CreatedDate";
def = FCategoryTable->FieldDefs->AddFieldDef();
def->Required = true;
def->DataType = ftBoolean;
def->Name = "Deleted";
def = FCategoryTable->FieldDefs->AddFieldDef();
def->Required = true;
def->DataType = ftInteger;
def->Name = "IconIndex";
def = FCategoryTable->FieldDefs->AddFieldDef();
def->Required = false;
def->DataType = ftInteger;
def->Name = "ParentCategoryID";
FCategoryTable->Active = true;
FCategoryTable->Active = false;
}
catch(Exception& e)
{
#ifdef _DEBUG
Application->ShowException(&e);
#endif
return false;
}
return true;
}
Есть вторая функция на создание второй таблички — там по виду то же самое, за добавлением создания memo-полей. Memo-поля добавляются аналогичным образом. Вот в какой-то из этих функций и происходит облом...
D>Так с ходу у TDBF есть событие OnLocaleError : TDbfLocaleErrorEvent
Спасибо, попробую...