Delphi - объектно-ориентированный язык программирования, разработанный компанией Borland в 1995 году. Он основан на языке программирования Pascal, но имеет более расширенные возможности и добавлены новые функции.
Delphi является интегрированной средой разработки (IDE), которая позволяет разрабатывать программное обеспечение для различных платформ, включая Windows, macOS, Android и iOS. Delphi достигает многоплатформенности с помощью...
Откpываешь help и смотpишь:
...... varList:TStrings; ....... BEGIN
....... List.Add ( 'LANGDRIVER=db866ru0 '); ....... Session.ModifyDriver( 'DBASE', List ); ....... END
;
Это действие я пpовожy пеpед откpытием таблицы
Это о "русификации" таблицы. В таблицах dBase и Paradox имеется байт, который определяет CodePage содержимого таблицы. Раньше он не использовался и был зарезервирован. Тебе нужно его правильно установить. Это делается через DBD Restructure table. Если хочешь программно, можешь воспользоваться следующей процедурой:
usesDbiTypes, DbiProcs, DbiErrs, DB, WinProcs, SysUtils; 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
;
Примеры использования:
ChangeLangDriver( 'DBDEMOS', 'EMPLOYEE', 'ancyrr' ); ChangeLangDriver( 'DBDEMOS', 'EMPLOYEE.DB', 'ancyrr' ); ChangeLangDriver( 'C:DELPHIDEMOSDATA', 'CLIENTS.DBF', 'db866ru0' );
LDName
:
для D1 - имя .LD файла в каталоге IDAPILANGDRV;
для D2 и CB - из BDECFG32.HLP поле Short name в табличке по указателю language
drivers, dBASE или поле Internal в табличке по указателю language drivers,
Paradox;
для D3 и выше - не знаю так как у меня её нет, но думаю, что также, как и в D2.