Недавно добавленные исходники

•  DeLiKaTeS Tetris (Тетрис)  118

•  TDictionary Custom Sort  3 307

•  Fast Watermark Sources  3 057

•  3D Designer  4 810

•  Sik Screen Capture  3 307

•  Patch Maker  3 523

•  Айболит (remote control)  3 624

•  ListBox Drag & Drop  2 984

•  Доска для игры Реверси  81 500

•  Графические эффекты  3 911

•  Рисование по маске  3 219

•  Перетаскивание изображений  2 603

•  Canvas Drawing  2 725

•  Рисование Луны  2 549

•  Поворот изображения  2 158

•  Рисование стержней  2 157

•  Paint on Shape  1 561

•  Генератор кроссвордов  2 220

•  Головоломка Paletto  1 761

•  Теорема Монжа об окружностях  2 205

•  Пазл Numbrix  1 678

•  Заборы и коммивояжеры  2 049

•  Игра HIP  1 274

•  Игра Go (Го)  1 220

•  Симулятор лифта  1 467

•  Программа укладки плитки  1 211

•  Генератор лабиринта  1 537

•  Проверка числового ввода  1 346

•  HEX View  1 485

•  Физический маятник  1 351

 
скрыть


Delphi FAQ - Часто задаваемые вопросы

| Базы данных | Графика и Игры | Интернет и Сети | Компоненты и Классы | Мультимедиа |
| ОС и Железо | Программа и Интерфейс | Рабочий стол | Синтаксис | Технологии | Файловая система |



Delphi Sources

Как программно изменить LangDriver для таблиц dBase и Paradox



Автор: Nomadic

Откpываешь help и смотpишь:


.......
var List:TStrings;
.......
BEGIN
.......
List.Add ( 'LANGDRIVER=db866ru0 ');
.......
Session.ModifyDriver( 'DBASE', List );
.......
END;

Это действие я пpовожy пеpед откpытием таблицы

Автор: Ivan Sboev

Это о "русификации" таблицы. В таблицах dBase и Paradox имеется байт, который определяет CodePage содержимого таблицы. Раньше он не использовался и был зарезервирован. Тебе нужно его правильно установить. Это делается через DBD Restructure table. Если хочешь программно, можешь воспользоваться следующей процедурой:


uses DbiTypes, DbiProcs, DbiErrs, DB, WinProcs, SysUtils;

procedure ChangeLangDriver(DatabaseName, TableName, LDName: string);
var
  TblExt: string;
  Database: TDatabase;
  TblDesc: CRTblDesc;
  OptDesc: FLDDesc;
  OptData: array[0..250] of Char;
  Cur: hDBICur;
  Rec: CFGDesc;
begin
  if (TableName = '') or (LDName = '') then
    raise Exception.Create('Unknown TableName or LDName');
  Database := Session.OpenDatabase(DatabaseName);
  try
    if Database.IsSQLBased then
      raise Exception.Create(
        'Function ChangeLangDriver working only with dBase or Paradox tables');
    FillChar(OptDesc, SizeOf(OptDesc), #0);
    FillChar(TblDesc, SizeOf(TblDesc), #0);
    StrCopy(OptDesc.szName, 'LANGDRIVER');
    OptDesc.iLen := Length(LDName) + 1;
    with TblDesc do
    begin
      StrPCopy(szTblName, TableName);
      TblExt := UpperCase(ExtractFileExt(TableName));
      if TblExt = 'DBF' then
        StrCopy(szTblType, szDbase)
      else if TblExt = '.DB' then
        StrCopy(szTblType, szParadox)
      else
      begin
        AnsiToOEM(StrPCopy(OptData, DatabaseName), OptData);
        if DbiOpenCfgInfoList(nil, dbiREADONLY, cfgPersistent,
          StrPCopy(OptData, '\DATABASES\' + StrPas(OptData) + '\DB INFO\')
          Cur) <> DBIERR_NONE then
          raise Exception.Create('Unknown table type');
        try
          while DbiGetNextRecord(Cur, dbiNOLOCK, @Rec, nil) <> DBIERR_EOF do
            if StrComp(Rec.szNodeName, 'DEFAULT DRIVER') = 0 then
            begin
              StrCopy(szTblType, Rec.szValue);
              Break;
            end;
        finally
          Check(DbiCloseCursor(Cur));
        end;
      end;
      iOptParams := 1;
      pfldOptParams := @OptDesc;
      pOptData := @OptData;
    end;
    StrPCopy(OptData, LDName);
    Check(DbiDoRestructure(Database.Handle, 1, @TblDesc, nil,
      nil, nil, False));
  finally
    Session.CloseDatabase(Database);
  end;
end;

Примеры использования:


ChangeLangDriver( 'DBDEMOS', 'EMPLOYEE', 'ancyrr' );
ChangeLangDriver( 'DBDEMOS', 'EMPLOYEE.DB', 'ancyrr' );
ChangeLangDriver( 'C:\DELPHI\DEMOS\DATA', 'CLIENTS.DBF', 'db866ru0' ); 

LDName:
для D1 - имя .LD файла в каталоге IDAPI\LANGDRV;
для D2 и CB - из BDECFG32.HLP поле Short name в табличке по указателю language drivers, dBASE или поле Internal в табличке по указателю language drivers, Paradox;
для D3 и выше - не знаю так как у меня её нет, но думаю, что также, как и в D2.





Похожие по теме исходники

Нейросеть для распознавания образов

Механизм станка качалки для нефти

Весы для взвешивания

Кувшины для воды

 

Доска для игры Реверси

Создание таблиц в Paradox

Таблица совместимости продуктов питания




Copyright © 2004-2024 "Delphi Sources" by BrokenByte Software. Delphi World FAQ

Группа ВКонтакте