怎么用程序的方式修改*.udl文件的内容,以前的贴子都没有解决(100分)

  • 主题发起人 主题发起人 zhangxinfu
  • 开始时间 开始时间
Z

zhangxinfu

Unregistered / Unconfirmed
GUEST, unregistred user!
如果ADOConnection.conncetionstring 是用*.udl 即用文件的方式连接,
如果我在设计的过程中想修改文件上的的内容(如数据库的名称),来改变连接 然后保存,该如何做
 
好象很难呀!

你可以用ultraedit看看他的内容,然后把他当成记事本处理就行!
先保存原设置,用你新的设置覆盖掉,保存后再想办法执行!
 
*.udl文件是可以当作一个文本来打开的,
把它当作文本文件来处理看行不行。
其实可以用ini文件来作连接,只是里面的内容要自己写。
 
在线等待,有没有程序源码
 
直接修改,然后保存,我一直这么做。。。
 
可程序里需要根据操作用户来动态修改*.udl里的数据库
 
可以找到建立UDL文件的那个窗体并创建出来,我现在一下想不起来,过一会告诉你
 
给你一个例子!
procedure TForm11.N2Click(Sender: TObject);
var
{lcpath:string;}
icount:integer;
atablelist:TStringList;
begin
{lcpath:=ExtractFilePath(Application.ExeName)+'data/destination.UDL';
ShellExecute(handle,nil,pchar(ExtractFilePath(Application.ExeName)+'data/destination.UDL'),nil,nil,sw_shownormal);
Database.connectiondest(lcpath);}
b:='1';
try
atablelist:=TStringList.Create;
database.destconnection.GetTableNames(atablelist);
combobox1.Clear;
combobox9.Clear;
for icount:=0 to atablelist.Count-1 do
begin
combobox1.Items.add(atablelist.strings[icount]);
combobox9.Items.Add(atablelist.strings[icount]);
end;
finally
showmessage('联接数据转储库成功!');
atablelist.free;
end;
end;
 
再给你一个:
procedure TForm11.N3Click(Sender: TObject);
var
lcpath:string;
icount:integer;
atablelist:TStringList;
begin
lcpath:=ExtractFilePath(Application.ExeName)+'data/datasource.udl';
ShellExecute(handle,nil,pchar(ExtractFilePath(Application.ExeName)+'data/datasource.udl'),nil,nil,sw_shownormal);
Database.connectionsource(lcpath);
try
atablelist:=TStringList.Create;
database.sourceconnection.GetTableNames(atablelist);
combobox2.Clear;
for icount:=0 to atablelist.Count-1 do
begin
combobox2.Items.add(atablelist.strings[icount]);
end;
finally
atablelist.free;
end;
a:='1';
end;
 
出现如下错误:
[Error] Unit1.pas(38): Undeclared identifier: 'ShellExecute'

语句 database.sourceconnection.GetTableNames(atablelist);出现如下三个错误
[Error] Unit1.pas(39): Undeclared identifier: 'Database'
[Error] Unit1.pas(42): Missing operator or semicolon
[Error] Unit1.pas(42): Missing operator or semicolon
 
试一试这种方法吧,可能你能用的着,该程序调试通过,能调用设置
数据连接的那个窗口,和udl的面一样。能返回连接字符串。

在uses 中添加 OLEDB,comObj,ActiveX 单元

procedure TForm1.Button2Click(Sender: TObject);
var
Str :WideString;
begin
Str := 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=sa;Initial Catalog=XJTZF;Data Source=YGT';
Str := PromptDataSource(Handle, Str) ;
end;

function PromptDataSource(ParentHandle: THandle; InitialString: WideString): WideString;
var
DataInit: IDataInitialize;
DBPrompt: IDBPromptInitialize;
DataSource: IUnknown;
InitStr: PWideChar;
begin
Result := InitialString;
DataInit := CreateComObject(CLSID_DataLinks) as IDataInitialize;
if InitialString <> '' then
DataInit.GetDataSource(nil, CLSCTX_INPROC_SERVER,
PWideChar(InitialString), IUnknown, DataSource);
DBPrompt := CreateComObject(CLSID_DataLinks) as IDBPromptInitialize;
if Succeeded(DBPrompt.PromptDataSource(nil, ParentHandle,
DBPROMPTOPTIONS_PROPERTYSHEET, 0, nil, nil, IUnknown, DataSource)) then
begin
InitStr := nil;
DataInit.GetInitializationString(DataSource, True, InitStr);
Result := InitStr;
end;
end;
 
to Yaogt
有一点希望,但怎么不出现设置窗口,把原有的 aaa.udl 载入,并把原数据库工a1修为B1
用程序的方式完成,该怎么改
 
我不明白你为什么非要使用udl文件,不能把这个字符串存到一个文本里,
修改之前读出来,修改之后写回去不就行啦。
把文本的后缀改成udl好啦,只是只能通过程序修改啦!!!!!!
非要想用的话
在uses 中加入 ShellApi
调用以下代码:
procedure TForm11.N3Click(Sender: TObject);
var
lcpath:string;
begin
lcpath:=ExtractFilePath(Application.ExeName)+'dataBase.udl';
ShellExecute(handle,nil,pchar(lcpath),nil,nil,sw_shownormal);
end;
怎么样,快点给分吧!
 
to Yaogt
udl 中原数据库a1修为B1用程序的方式完成,
 
结束 发分
 
结束 发分
 
后退
顶部