PDA

Ver la Versión Completa : Cambiar idioma tablas paradox desde delphi2


tec4eso
02-10-2004, 21:38:18
Hola a todos:

Necesito importar periodicamente unas tablas paradox de un programa que estan en idioma Paradox ascii, a una aplicación en Delphi. El problema surge con las vocales acentuadas que las muestra con caracteres que no se corresponden.

He resuelto el problema manualmente con Paradox5 cambiando el idoma de las tablas (una a una) de Paradox ascii a Paradox 'intl' 850.

He intentado hacerlo utilizando funciones del dbi pero no lo consigo.

Agradeceria mucho si alguien me indicase como puedo cambiar el idioma en tiempo de ejecución desde delphi2.

Muchas gracias

marcoszorrilla
03-10-2004, 17:25:34
No se si funcionará desde D2, pero mírate estas funciones:


uses
DBTables, SYSUtils;

function SetParadoxTableVersion(TablePathName : String; Version : Integer) : Boolean;
function SetParadoxTableBlockSize(TablePathName : String; BlockSize : Integer) : Boolean;
function SetParadoxTableLanguage(TablePathName, LangDriver : String) : Boolean;
function SetParadoxTableStrictIntegrity(TablePathName : String; StrictIntegrity : Boolean) : Boolean;

implementation

uses
DB, BDE;

function RestructureParadoxTable(Table : TTable; Option, OptData: String) : Boolean;
var
hDb: hDBIDb;
Res : DBIResult;
TableDesc : CRTblDesc;
FieldDesc : FLDDesc;
begin
If (Table.Active and Not Table.Exclusive) Then Table.Close;
If (Not Table.Exclusive) Then Table.Exclusive := True;
If (Not Table.Active) Then Table.Open;

Check(DbiGetObjFromObj(hDBIObj(Table.Handle), objDATABASE, hDBIObj(hDb)));

Table.Close;

FillChar(TableDesc, SizeOf(TableDesc), 0);
StrPCopy(TableDesc.szTblName, Table.Tablename);
StrCopy(TableDesc.szTblType, szParadox);

FieldDesc.iOffset := 0;
FieldDesc.iLen := Length(OptData) + 1;
StrPCopy(FieldDesc.szName, Option);

TableDesc.iOptParams := 1;
TableDesc.pFldOptParams := @FieldDesc;
TableDesc.pOptData := @OptData[1];
try
Res := DbiDoRestructure(hDb, 1, @TableDesc, nil, nil, nil, False);
Result := (Res = DBIERR_NONE);
finally
Table.Open;
end;
end;

function SetParadoxTableVersion(TablePathName : String; Version : Integer) : Boolean;
var
MyTable : TTable;
begin
MyTable := TTable.Create(Nil);
MyTable.DatabaseName := ExtractFilePath(TablePathName);
MyTable.TableName := ExtractFileName(TablePathName);

Result := RestructureParadoxTable(MyTable, 'LEVEL', IntToStr(Version));

MyTable.Free;
end;

function SetParadoxTableBlockSize(TablePathName : String; BlockSize : Integer) : Boolean;
var
MyTable : TTable;
begin
MyTable := TTable.Create(Nil);
MyTable.DatabaseName := ExtractFilePath(TablePathName);
MyTable.TableName := ExtractFileName(TablePathName);

Result := RestructureParadoxTable(MyTable, 'BLOCK SIZE', IntToStr(BlockSize));

MyTable.Free;
end;

function SetParadoxTableStrictIntegrity(TablePathName : String; StrictIntegrity : Boolean) : Boolean;
var
MyTable : TTable;
begin
MyTable := TTable.Create(Nil);
MyTable.DatabaseName := ExtractFilePath(TablePathName);
MyTable.TableName := ExtractFileName(TablePathName);

If (StrictIntegrity) Then
Result := RestructureParadoxTable(MyTable, 'STRICTINTEGRTY', 'TRUE')
else
Result := RestructureParadoxTable(MyTable, 'STRICTINTEGRTY', 'FALSE');

MyTable.Free;
end;

function SetParadoxTableLanguage(TablePathName, LangDriver : String) : Boolean;
var
MyTable : TTable;
begin
MyTable := TTable.Create(Nil);
MyTable.DatabaseName := ExtractFilePath(TablePathName);
MyTable.TableName := ExtractFileName(TablePathName);

Result := RestructureParadoxTable(MyTable, 'LANGDRIVER', LangDriver);

MyTable.Free;
end;

end.



Un Saludo.

tec4eso
04-10-2004, 21:01:31
Gracias por las funciones, cambia el idioma pero no corrige los caracteres de las vocales mayusculas acentuadas, como lo hace paradox5 al restructurar la tabla