Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.07.18;
Скачать: CL | DM;

Вниз

Проблема чтения данных Paradox 3.5 (DOS)   Найти похожие ветки 

 
msguns ©   (2005-06-09 09:16) [0]

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


 
Anatoly Podgoretsky ©   (2005-06-09 09:27) [1]

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


 
msguns ©   (2005-06-09 10:59) [2]

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


 
sniknik ©   (2005-06-09 11:26) [3]

для 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 (без конвертаций), и даже если получится, русские буквы в названиях это нехорошо.


 
Anatoly Podgoretsky ©   (2005-06-09 11:50) [4]

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

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


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

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


 
Anatoly Podgoretsky ©   (2005-06-09 14:31) [6]

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


 
msguns ©   (2005-06-09 17:28) [7]

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

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


 
sniknik ©   (2005-06-09 17:46) [8]

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


 
Anatoly Podgoretsky ©   (2005-06-09 19:37) [9]

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



Страницы: 1 вся ветка

Текущий архив: 2005.07.18;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.045 c
1-1119795483
heady
2005-06-26 18:18
2005.07.18
нажатие Enter в Edit


3-1118123435
ShotGuN
2005-06-07 09:50
2005.07.18
Чем заменить Convert?


14-1119730079
Unleashed
2005-06-26 00:07
2005.07.18
Где бы найти работу.....


3-1117572128
alex-drob
2005-06-01 00:42
2005.07.18
Связь двух таблиц


1-1120366420
Revers
2005-07-03 08:53
2005.07.18
Команды меню Edit