UDL的关联程序是OLE DB CORE SERVICE,所以双击会弹出DATA LINK PROPERTIES对话框,但如果你反点,选打开方式为NOTEPAD,则可以直接查看里面的内容! 我在程序中使用TSTRINGLIST对象和TEXTFILE类型变量读取的UDL文件内容都是乱码,为什么,怎么解决?
procedure SetConnectionStr;
var
DataInit:IDataInitialize;
FName,ConnectionStr:POleStr;
Reg:TRegistry;
begin
Reg:=TRegistry.Create ;
with Reg do
begin
RootKey:=HKEY_LOCAL_MACHINE;
OpenKey('SOFTWARE\HD\MAS',False);
FName:=POleStr(ReadString('InstDir')+'\MAS_DB_INI.UDL');
//★上面这个如果我写成FName:=ReadString('InstDir')+'\MAS_DB_INI.UDL'则报告一
//个编译错误,但如果我按照上面的方法写,则最后写到注册表中的串是个空的,说明
//根本没有找到我指定读取串的文件!怎么解决?
DataInit:=CreateComObject(CLSID_DataLinks) as IDataInitialize;
DataInit.LoadStringFromStorage(FName,ConnectionStr);
WriteString('ConnectionStr',ConnectionStr);
CloseKey;
Free;
DataInit:=Nil;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: TStringList;
begin
s := TMyStringList.Create;
s.LoadFromFile('E:\DBDEMOS.udl');
Memo1.Lines.Assign(s);
s.Free;
end;
{ TMyStringList }
procedure TMyStringList.SetTextStr(const Value: string);
var
P: PChar;
PEnd: PChar;
S: string;
begin
BeginUpdate;
try
Clear;
P := Pointer(Value);
PEnd := Pointer(PChar(Value) + Length(Value));
if P <> nil then
while P <= PEnd do
begin
S := '';
while not (P^ in [#10, #13]) and (P <= PEnd) do
begin
if (P^ <> #0) and (P^ > #0) and (P^ <= #127) then
S := S + P^;
Inc(P);
end;
if S <> '' then Add(S);
if P^ = #13 then Inc(P);
if P^ = #10 then Inc(P);
end;
finally
EndUpdate;
end;
end;