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

 
Вопросы по БД и MaskEdit
Magistr(ru)
Отправлено: 14.11.2003, 04:37


Ученик-кочегар

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



1) Допустим маска в MaskEdit1 задана Date(например 01.01.03) , а у меня введено только “01.01”. И далее при любом событии выскакивает EDBEditError. Как мне отловить это?
try …catch(EDBEditError &)
ShowMessage(“FFF”); не катит.

2) По поводу Aliases. Если я в Table1->DatabaseName
введу не Alias указанный в BDEAdminestrator, а укажу путь к таблицам (например C:\Tables) не будет ли это ошибкой при переносе БД на другой комп?

3)Знаю что при использовании BDE база данных обращается к BDE, а не на прямую к таблицам. Не будет ли ошибок при переносе БД на другой комп если в Table1->DatabaseName не Alias, а путь?(при учёте что BDE будет установлена).

4)Как программно добавить в win.ini [FontSubstitutes] Arial,0=Arial,204(для русификации таблиц). А перед этим проверить на существование такой строки. И обязательно ли устанавливать BDE в каталог по умолчанию?

(BCB5; WIN98;PARADOX)
Admin
Отправлено: 16.11.2003, 18:57


Владимир

Группа: Администратор
Сообщений: 1190



1/ А кто мешает поменять маску, например на !99/99/99;1;_
(или воспользоваться компонентом — и это более правильно
типа DateTimePicker)

2 и 3/ Смотря как Вы работаете с базой. Если на другом компе
база размещена также в C:\Tables то ошибкой это не будет,
все будет работать (для таблиц типа Paradox)
Однако есть вариант лучше (универсальней).

Вообще не прописывайте в Database1 путь к базе
или пропишите путь по умолчанию, а путь вводите
в командной строке (для Windows — пропишите в ярлыке),
и тогда если в командной строке ничего не прописано,
берите путь по умолчанию, если прописано — получите
его значение в ParamStr(1) и пропишите в Database
(при запуске программы)

CODE

Database1->DatabaseName = "C:\\Tables";
  if(ParamStr(1) != "")
   Database1->DatabaseName = ParamStr(1);
  Label1->Caption = Database1->DatabaseName;

В этом случае на разных копьютерах база может находиться
в разных каталогах, в ярлыке к программе лишь пропишите
путь к каталогу на данном компьютере.


Magistr(ru)
Отправлено: 17.11.2003, 03:50


Ученик-кочегар

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



1)А как всё-таки отловить??
2,3)У меня зделано так-Query1->DatabaseName=GetCurrentDir()+"\Bas1\\Table1";
Query1->Open();
Никакого Database у меня нету да и зачем он нужен?
А можно ли устанавливать BDE в произвольный каталог например C:\Games? И как БД будет обращаться к BDE?
Admin
Отправлено: 17.11.2003, 10:21


Владимир

Группа: Администратор
Сообщений: 1190



1 Можете бросить на форму компонент ApplicationEvents и
обрабатывать его событие onEvents
CODE

void __fastcall TForm1::ApplicationEvents1Exception(TObject *Sender,
     Exception *E)
{
  if(E->ClassNameIs("EDBEditError") &&
     dynamic_cast<TMaskEdit*>(Sender) &&
    ((TMaskEdit*)Sender)->Name == "MaskEdit1")
     {
      ShowMessage("Неверный формат даты !");
      MaskEdit1->SetFocus();
     }
}


Вернуться в Работа с базами данных в C++Builder