Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2005.07.18;
Скачать: [xml.tar.bz2];

Вниз

Проблема чтения данных 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.47 MB
Время: 0.038 c
3-1118288172
DimonS
2005-06-09 07:36
2005.07.18
Как правильно скопировать таблицу?


9-1112794393
Кирилл
2005-04-06 17:33
2005.07.18
Effects


14-1119470222
NewWonder
2005-06-22 23:57
2005.07.18
Сколько стоит написать курсовик?


10-1096905096
Avruk
2004-10-04 19:51
2005.07.18
После закрытия программа остается в списке процессов


14-1119526376
Магнум
2005-06-23 15:32
2005.07.18
Pocket PC





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский