Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблема чтения данных Paradox 3.5 (DOS) [D6, Paradox]


msguns ©   (2005-06-09 09:16:00) 

Используются компоненты ADO + источник данных ODBC
Не могу добиться транслирования кириллицы в "человеческий" вид.
В ODBC настройку LANGDRIVER не нашел.
Помогите кто чем может бывшему депутату Госдумы ;))


Anatoly Podgoretsky   (2005-06-09 19:37:00) [1]

msguns ©   (09.06.05 17:28) [7]
сделай с начала самое простое.
TDbgrid, TDatasource, TTable свяжи их
Не указывай никаких полей и попробуй открыть. Скажи что получится.


sniknik   (2005-06-09 17:46:00) [2]

это не опция это синтаксис. можно в хелпе по локал sql посмотреть.


msguns   (2005-06-09 17:28:00) [3]

>Anatoly Podgoretsky ©   (09.06.05 14:31) [6]

Где такая опция ?


Anatoly Podgoretsky   (2005-06-09 14:31:00) [4]

msguns ©   (09.06.05 14:26) [5]
"Русское имя поля"


msguns   (2005-06-09 14:26:00) [5]

BDE не "берет" таблицы с русскими именами полей


Anatoly Podgoretsky   (2005-06-09 11:50:00) [6]

В любом случае проблема не в Парадоксе, а в звезлах.

msguns ©   (09.06.05 10:59) [2]
А БДЕ не хочешь применить?


sniknik   (2005-06-09 11:26:00) [7]

для jet
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\4.0\Engines\Paradox\DataCodePage

> Настройку надо искать не в ODBC, а в BDE или в JET. В зависимости от расположения звезд на клиенте.
+ всетаки в драйвере ODBC если звезды "лягут" на старую систему. с неустановленным jet-ом, но имеюшимся старым же ODBC драйвером парадокса... (для парадокса правда не уверен полностью, а для dBase именно такая тройная схема)
ну и в самом файле (если конечно в этом формате это уже было)

> BDE просто отказывается их интерпретировать.
возможно проблема именно в несоответствии значка в файле с реальной кодировкой.
попробуй применить процедуру к таблице (вообщето это из хелпа, немного переделано)
procedure TDatMod.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('D:\', 'Table1.db', 'cyrr');
а после открой в BDE (без конвертаций), и даже если получится, русские буквы в названиях это нехорошо.


msguns   (2005-06-09 10:59:00) [8]

Вся табла, Анатолий в том, что в DOC имена полей русские и BDE просто отказывается их интерпретировать. ODBC все очень хорошо читатает и даже туда пишет, но вот с кодировкой трабла - вместо половины русских букв - символы-заменители типа '<','?','>' и т.д. Да и символы не соответствуют оригиналу. Т.е. надо как-то это все преобразовать в ansi и отображать внятно. А вот как сделать не знаю. Пробовал ставить на OnGetText полей конвертацию OEMToChar, но никакого эффекта. Чего-то не допонимаю, имхо, но вот куда копать ?


Anatoly Podgoretsky   (2005-06-09 09:27:00) [9]

Ой и где это еще встречается. Да еще к этому и через АДО лезть.
Настройку надо искать не в ODBC, а в BDE или в JET. В зависимости от расположения звезд на клиенте.


Наверх

Титульная страница Поиск, карта сайта Написать письмо