Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Работа с неUNICODE и UNICODE базами одного Delphi-приложения

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки
Страницы: 1 2

Открыть новую тему     Написать ответ в эту тему

romano501



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
У меня была еще надежда что в FIB-ах какая-нить директива есть, которая приравняет TFIBStringField к TFIBWideStringField

Всего записей: 137 | Зарегистр. 24-03-2007 | Отправлено: 09:49 13-04-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romano501
Мне очень понравилась сортировка в новых фибах - её можно переопределить. Это нужно например для текстового поля номер документа, там префикс и номер. Текстовая сортировка - это не правильно. Но сейчас пользуем старые фибы, сиё мне недоступно, как и уникод. А проблемм переопределить класс любых компонентов прямо перед декларацией формы, таких проблемм нет. Я облявляю
type
  TFIBStringField = class(FIBdataset.TFIBWideStringField)
  ...
  end;
type
  TdmMain = class(TDataModule)
   ...
 
И немного подправляю ручками CheckField virtual
 
Добавлено:
Чтобы понимать что такое датасет необходимо знать несколько процедур

Код:
 
    function GetFieldClass(FieldType: TFieldType): TFieldClass; override;
    procedure CheckFieldCompatibility(Field: TField; FieldDef: TFieldDef); override;
    procedure CreateFields; override;
    procedure InternalInitFieldDefs; override;
    procedure InternalOpen; override;
    procedure BindFields(Binding: Boolean); virtual; // не переопределял
 

 
Добавлено:
Боюсь что изучив эти процедуры, тайна создания филдов для Вас исчезнет навсегда. Лучше начать с GetFieldClass и далее по порядку.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 10:42 13-04-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Я Лука Кизя без перевода читал, советую так же.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 16:18 13-04-2013
romano501



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover

Цитата:
type    TFIBStringField = class(FIBdataset.TFIBWideStringField)

Это как раз то что мне нужно. Спрятать это определение за $DEFINE и UNICODE-версия приложения готова.
Благодарю за наводку!
 

Цитата:
Я Лука Кизя без перевода читал, советую так же.

Дай ссылку, пожалста, бо я даже не понимаю что это за набор слов "Лука Кизя"

Всего записей: 137 | Зарегистр. 24-03-2007 | Отправлено: 17:49 13-04-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romano501

Цитата:
Дай ссылку, пожалста

Лука Кизя это очень известный Украинский афтор, я читал книгу - интернета тогда небыло.
 

Цитата:
Это как раз то что мне нужно.

Рад за наводку если что и мне пригодится.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 19:44 15-04-2013
romano501



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover
Не получилось сделать переопределение  
type
  TFIBStringField = class(FIBdataset.TFIBWideStringField)
 
На этапе запуска программы выдается сообщение
---------------------------
Debugger Exception Notification
---------------------------
Project raised exception class EReadError with message 'Property EmptyStrToNull does not exist'.
 
Подобный код  
TFIBStringField = class(FIBdataset.TFIBWideStringField)
  FEmptyStrToNull: Boolean;
public
  property EmptyStrToNull: Boolean read FEmptyStrToNull default False;
end;
 
не компилируется с сообщением
[DCC Error] DataModule.pas(16): E2217 Published field 'FEmptyStrToNull' not a class or interface type

Всего записей: 137 | Зарегистр. 24-03-2007 | Отправлено: 08:21 16-04-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
romano501
public  
  property
 
попробуй
published
  property
 
так как из формы читается только паблишед
 
Добавлено:
1) property EmptyStrToNull: Boolean read FEmptyStrToNull default False;
Это свойство у тебя readonly по этому оно тоже не может быть изменено при прочтении с формы. Я бы просто скопировал текст из FIB исходника
2) FEmptyStrToNull: Boolean;  Это у тебя паблишед филд, мне кажется должно быть:
TFIBStringField = class(FIBdataset.TFIBWideStringField)  
private
  FEmptyStrToNull: Boolean;  
public  
 
Добавлено:
romano501

Цитата:
default False;  

Объявление свойства умолчания нужно только при сохранении компонента в файл. Так как даже при желании вы не сможете зарегистрировать класс в DesignIDE, то никто Ваш класс сохранять не будет. default писать не надо.

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 09:51 16-04-2013
delover

Advanced Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Посмотрел, в общем надо так:

Код:
type
  TFIBStringField = class(FIBDataSet.TFIBWideStringField)
  private
    FEmptyStrToNull: boolean;
  published
    property EmptyStrToNull:boolean read FEmptyStrToNull write FEmptyStrToNull ;
  end;
 
  TpFIBDataSet = class(pFIBDataSet.TpFIBDataSet)
  protected
    procedure CheckFieldCompatibility(Field: TField; FieldDef: TFieldDef); override;
        //код пустышка
  end;

Всего записей: 1395 | Зарегистр. 25-06-2007 | Отправлено: 12:07 16-04-2013
romano501



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
delover, приветствую!  
Твой последний код сработал, однако вот этот кусок кода не понадобился.  

Код:
 
TpFIBDataSet = class(pFIBDataSet.TpFIBDataSet)     
  protected       
     procedure CheckFieldCompatibility(Field: TField; FieldDef: TFieldDef); override;           
     //код пустышка     
end;

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

Всего записей: 137 | Зарегистр. 24-03-2007 | Отправлено: 10:04 20-04-2013
Открыть новую тему     Написать ответ в эту тему

Страницы: 1 2

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Работа с неUNICODE и UNICODE базами одного Delphi-приложения


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru