如何在BDE别名为空的时候加入别名,为什么总是出错!(100分)

W

wzisme

Unregistered / Unconfirmed
GUEST, unregistred user!
代码如下:
VAR temp:tstringlist;
begin
temp:=tstringlist.Create;
SESSION.GetAliasNames(temp);
if temp.IndexOf('wzdata')<0 then begin
session.AddAlias('wzdata','PARADOX',nil);
session.SaveConfigFile;
end;
temp.free;
当别名为空时出现“错误的参数”的提示
当别名不为空时正常
 
别名是不允许为空的,那你就要给它空值就行了
 
我不是说别名为空
我是指别名的数目为空
 
你看源码中,TSession还需要用到List参数,怎么能赋nil值?
procedure TSession.AddAlias(const Name, Driver: string; List: TStrings);
begin
InternalAddAlias(Name, Driver, List, ConfigMode, True);
end;

procedure TSession.InternalAddAlias(const Name, Driver: string; List: TStrings;
CfgMode: TConfigMode; RestoreMode: Boolean);
var
Params: string;
DrvName: string;
CfgModeSave: TConfigMode;
begin
Params := StringListToParams(List);
DrvName := List.Values[szCFGDBDEFAULTDRIVER];
if (DrvName = '') then
begin
if (CompareText(Driver, szCFGDBSTANDARD) = 0) then
DrvName := szPARADOX else
DrvName := Driver;
end;
LockSession;
try
CfgModeSave := ConfigMode;
try
CheckConfigMode(CfgMode);
Check(DbiAddAlias(nil, PChar(StrToOem(Name)), PChar(StrToOem(DrvName)), PChar(Params), Bool(-1)));
finally
if RestoreMode then ConfigMode := CfgModeSave;
end;
finally
UnlockSession;
end;
DBNotification(dbAddAlias, Pointer(Name));
end;
你改一下看看.
VAR temp:tstringlist;
begin
temp:=tstringlist.Create;
SESSION.GetAliasNames(temp);
if temp.IndexOf('wzdata')<0 then begin
session.AddAlias('wzdata','PARADOX',temp);
session.SaveConfigFile;
end;
temp.free;
 
用你的代码也不行
用以下代码就可以
VAR temp:tstringlist;
begin
temp:=tstringlist.Create;
SESSION.GetAliasNames(temp);

if temp.IndexOf('wzdata')<0 then begin

session.AddStandardAlias('wzdata','','PARADOX');
session.SaveConfigFile;
end;
temp.free;
end;
 
我想知道为什么??
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
I
回复
0
查看
686
import
I
顶部