Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Базы данных и репортинг > краказябры в таблице =(


Автор: uranpro 15.12.2008, 14:47
программа коряво добавляет русские слова в таблицу, но не на всех компах(странно)

принцип такой

Код

q.sql.text:=
inset into t1 values :pName

...

q.params.items[0].value:=eName.text;
q.execsql;

...


на некоторых компах вместо рус букв пишет ####

т.е.
пишу = БДЕ МАСДАЙ !!!
в таблице = ### ###### !!!

пробовал менять у едита чарсет, помогало, но не всегда =(

что делать ??

Автор: uranpro 15.12.2008, 15:32
что, никто не знает ?

Автор: Frees 15.12.2008, 15:42
В 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

Добавлено через 1 минуту и 47 секунд
Цитата(uranpro @  15.12.2008,  16:47 Найти цитируемый пост)
программа коряво добавляет русские слова в таблицу, но не на всех компах(странно)

может BDE переставить там где не работает

Автор: uranpro 15.12.2008, 15:59
Frees, спс, попробую...

Автор: Akella 16.12.2008, 19:52
Цитата(uranpro @  15.12.2008,  14:47 Найти цитируемый пост)
но не на всех компах(странно)

Нужно настроить BDE (Paradox lang)
http://ipicture.ru/Gallery/Viewfull/10392148.html


http://ipicture.ru/Gallery/Viewfull/10392149.html

Для работы с DBase Нужно настроить языковый драйвер на dBASE RUS cp866 опять же в двух местах.


Цитата(uranpro @  15.12.2008,  14:47 Найти цитируемый пост)
пишу = БДЕ МАСДАЙ !!!

Неужели нельзя отказаться от BDE и перейти на клиент/сервер?

Автор: Akella 16.12.2008, 20:14
Проще всего настроить BDE на одном компьютере и потом параметры реестра экспортировать.

Автор: uranpro 17.12.2008, 13:30
Akella, да, спасибо)) разобрался) 

Цитата(Akella @  16.12.2008,  19:52 Найти цитируемый пост)
Неужели нельзя отказаться от BDE и перейти на клиент/сервер?

конечно, я так и сказал им))) программа только на одном буке стоять будет, он не в сети и инет не постоянный 10кб/с )) да вобще он во Франции, ###...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)