Главная страница
    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.47 MB
Время: 0.043 c
1-1119938713
drakena
2005-06-28 10:05
2005.07.18
Обработка KeyDown


4-1116429235
AlexaB
2005-05-18 19:13
2005.07.18
Как программно изменить текущий пароль


10-1096808482
SMT
2004-10-03 17:01
2005.07.18
Работа с компонентами ExcelApplication и другими со страницы Serv


1-1120041414
Vad74
2005-06-29 14:36
2005.07.18
Windows_CE и Delphi


14-1118658811
Sergey Masloff
2005-06-13 14:33
2005.07.18
4 диска с собой на необитаемый остров ;-)





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский