Delphi World - Не получается вставить в таблицу записи со строками на русском языке
Delphi World - это проект, являющийся сборником статей и малодокументированных возможностей  по программированию в среде Delphi. Здесь вы найдёте работы по следующим категориям: delphi, delfi, borland, bds, дельфи, делфи, дэльфи, дэлфи, programming, example, программирование, исходные коды, code, исходники, source, sources, сорцы, сорсы, soft, programs, программы, and, how, delphiworld, базы данных, графика, игры, интернет, сети, компоненты, классы, мультимедиа, ос, железо, программа, интерфейс, рабочий стол, синтаксис, технологии, файловая система...
Не получается вставить в таблицу записи со строками на русском языке

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

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

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


{ Устанавливает русский 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;

Проект Delphi World © Выпуск 2002 - 2017
Автор проекта: Эксклюзивные курсы программирования