Не получается вставить в таблицу записи со строками на русском языке

Previous  Top  Next

    
 

 

 

В Database Desktop поставьте правильный Language Driver у таблицы, например, Pdox ANSI Cyrr.

 

Это простой вопрос в том случае, если база уже создана на диске. Если мы создаем базу динамически из программы, то как потом поставить русский язык без Database Desktop'а?

 

Оказывается это не так просто. Я перерыл весь инет и так и не нашел. В итоге пришлось потрудится и получилась следующая функция:

Code:

{ Устанавливает русский LANGDRIVER для таблицы BDE (Paradox или dBASE)}

{ Таблица должна уже существовать на диске

Если вы создаете таблицу динамически,

не забудьте вызвать Table.CreateTable }

 

procedure SetTableRussianLanguage(Table: TTable);

var

  Props: CURProps;

  hDb: hDBIDb;

  TableDesc: CRTblDesc;

  OptDesc: FLDDesc;

  OptData: array [0..250] of Char;

  S: string;

const   // Define propertly table type & codepage from list below

  LDName = 'ancyrr';   // Paradox ANSI Cyrillic

  // LDName = 'cyrr';  // Paradox Cyrr 866

  // LDName = 'DB866ru0'; // dBASE RUS cp866

 

begin

// Get handle (if table still not opened)

  Table.Open;

  // Get the table properties to determine table type...

  Check(DbiGetCursorProps(Table.Handle, Props));

 

  // Blank out the structure...

  FillChar(TableDesc, sizeof(TableDesc), 0);

  FillChar(OptDesc, SizeOf(OptDesc), #0);

  // Get the database handle from the table's cursor handle...

 

  Check( DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE,

         hDBIObj(hDb)));

 

  { If table name contain cyrillic or other native character,

     convert name to OEM }

 

  SetLength(S, Length(Table.TableName));

  CharToOEM(PChar(Table.TableName), @S[1]);

 

  // Put the table name in the table descriptor...

  StrPCopy(TableDesc.szTblName, S{Table.TableName});

  // Put the table type in the table descriptor...

  StrPCopy(TableDesc.szTblType, Props.szTableType);

  // Set the Pack option in the table descriptor to TRUE...

 

  StrCopy(OptDesc.szName, 'LANGDRIVER');

  OptDesc.iLen:=Length(LDName)+1;

  TableDesc.iOptParams:=1;

  TableDesc.pfldOptParams:=@OptDesc;

  TableDesc.pOptData:=@OptData;

  StrPCopy(OptData, LDName);

 

  // Close the table so the restructure can complete...

  Table.Close;

  // Call DbiDoRestructure...

  Check(DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False));

end;

 

 

 

©Drkb::02497

       

Взято с http://delphiworld.narod.ru