Îòêpûâàåøü help è ñìîòpèøü:
.......
var List:TStrings;
.......
BEGIN
.......
List.Add ( 'LANGDRIVER=db866ru0 ');
.......
Session.ModifyDriver( 'DBASE', List );
.......
END;
Ýòî äåéñòâèå ÿ ïpîâîæy ïåpåä îòêpûòèåì òàáëèöû
Ivan Sboev
(2:5049/36.15)Ýòî î "ðóñèôèêàöèè" òàáëèöû.  òàáëèöàõ dBase è Paradox èìååòñÿ áàéò, êîòîðûé îïðåäåëÿåò CodePage ñîäåðæèìîãî òàáëèöû. Ðàíüøå îí íå èñïîëüçîâàëñÿ è áûë çàðåçåðâèðîâàí. Òåáå íóæíî åãî ïðàâèëüíî óñòàíîâèòü. Ýòî äåëàåòñÿ ÷åðåç DBD Restructure table. Åñëè õî÷åøü ïðîãðàììíî, ìîæåøü âîñïîëüçîâàòüñÿ ñëåäóþùåé ïðîöåäóðîé:
uses DbiTypes, 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:\DELPHI\DEMOS\DATA', 'CLIENTS.DBF',
'db866ru0' );
Farid Zaripov
farid@aduis.kiev.ua (2:463/201.101)