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

Вниз

Проблема с LangDriver.   Найти похожие ветки 

 
Викт0р   (2003-01-14 23:16) [0]

Надо обработать даные из таблицы (dBase 4) содержащие текстовые значения на русском языке, которые Delphi понимает так: "##Lr## ##z#" и т.д. Пробовал менять LangDriver и BDE Administrator, не помогло. Тогда реструктурировал таблицу, Desktop"ом: в поле Table Language проставил dBase RUS 866 и все пошло. Так вот каким програмным кодом можно заменить эти изменения Desktop"oм, выполняемые мной вручную. Или подскажите, плз, может есть другое решение. Заранее спасибо.


 
sniknik   (2003-01-15 00:36) [1]

ChangeLangDriver(ExtractFilePath(Edit1.Text), ExtractFileName(Edit1.Text), "cyrr");

procedure 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;


 
Викт0р   (2003-01-15 17:47) [2]

Конечно спасибо. Но только не могу я здесь что то разобраться. А подругому как нибудь можно? И вобше, где можно про это почитать


 
sniknik   (2003-01-15 18:01) [3]

на диске где дельфи установлен в пути
D:\Program Files\Common Files\Borland Shared\BDE
есть хелп BDE32.HLP там все dbi функции описаны. то же самое в дельфях.
пример рабочий можеш так ложить не разбираясь, вызов в начале описан, может так яснее
ChangeLangDriver("D:\", "MyDbf.Dbf", "cyrr");


 
Викт0р   (2003-01-15 18:10) [4]

Попробую...


 
Викт0р   (2003-01-15 18:41) [5]

кольпилятор выдает:
Undeclared indefined "CRTblDesc"
и так про
OptDesc: FLDDesc;
Cur: hDBICur;
Rec: CFGDesc;
И что делать?


 
TTCustomDelphiMaster   (2003-01-15 18:57) [6]

uses bde;


 
Serginio   (2003-01-15 20:26) [7]

Можно еще проще в DBF файле со смещением 29 и размером 1 байт
29 1 n language driver ID D4, D5
0x01 codepage 437 DOS USA Fp
0x02 codepage 850 DOS Multi ling Fp
0x03 codepage 1251 Windows ANSI Fp
0xC8 codepage 1250 Windows EE Fp
0x00 ignored FS, D3, Fb, Fp, CL
http://extensor.boom.ru/dbase.htm


 
LeSSS   (2003-01-16 16:28) [8]

sniknik что значит "cyrr"? Языковой драйвер? А такой есть?
в процедуре сработало raise Exception.Create("Unknown table type");

не мог ли бы ты объяснить вот эту строку
DbiOpenCfgInfoList(nil, dbiREADONLY, cfgPersistent, StrPCopy(OptData, "\DATABASES\"+StrPas(OptData)+"\DB INFO\"),Cur)<>DBIERR_NONE

может не там ищет?...или я её совсем не понимаю


 
sniknik   (2003-01-16 16:39) [9]

cyrr это имя драйвера см. хелп по BDE
секция
Language drivers
....
aradox China 936 china DOS CODE PAGE 936 China
Paradox Cyrr 866 cyrr DOS CODE PAGE 866 Cyrillic
Paradox Czech 852 czech DOS CODE PAGE 852 Czech852
Paradox Czech 867 cskamen DOS CODE PAGE 867 Czech867
....

> сработало raise Exception.Create("Unknown table type");
может действительно неизвестная таблица?
работает только для 2-х типов Dbase и Paradox (и Foxpro как частный случай Dbase но не для всех версий)



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

Форум: "Базы";
Текущий архив: 2003.02.03;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.009 c
14-5204
polizei
2003-01-15 13:18
2003.02.03
Люди добрые! Помогите чем можите! Совсем мне плохо!...


1-4869
Oleg_D
2003-01-24 18:13
2003.02.03
Модификация исполняемого кода.


1-4908
Sedov Vitalik
2003-01-25 08:03
2003.02.03
Внешний вид ScrollBar


1-4896
Makhanev A.S.
2003-01-25 13:00
2003.02.03
Есть ли ошибка в коде?


1-4994
Юра
2003-01-23 15:11
2003.02.03
QReport PrintPreview - как запретить?





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