使用 sqldmo 来启动 Sqlserver 不成功。
各位,我在VC++6.0中使用 sqldmo 来启动 sqlserver,可是却不成功,请看以下代码:
_SQLServerPtr pSqlserver;
try
{
HRESULT hr;
hr = pSqlserver.CreateInstance("SQLDMO.SQLServer");
if (SUCCEEDED(hr))
hr = pSqlserver->Start(TRUE,_variant_t("(local)"),_variant_t("sa"),_variant_t(""));
}
catch(_com_error e)
......
可是,怎么也启动不了,请问这是作甚????
问题点数:50、回复次数:8Top
1 楼nullhue(dream.vision.realiz)回复于 2002-11-26 18:25:52 得分 0
少个参数吧,还有用户名和密码,服务器名都正确吗?Top
2 楼wczwcg(我成长我成功)回复于 2002-11-26 18:34:17 得分 0
没有,前面的 AfxOleInit() 也加了,调试时,发现连 CreateInstance 都通不过,真是不理解。。。。Top
3 楼CharmDream()回复于 2002-11-27 13:26:59 得分 0
gzTop
4 楼wczwcg(我成长我成功)回复于 2002-11-28 10:14:46 得分 0
忘了说了,我的以上语句是写在 DllMain 函数中的,如果是拿出来放在另一个函数中就可以执行,但是放在 DllMain 中就不行,连 CreateInstance 都不能执行,真是不能理解,难道是在 DllMain 中不能产生任何对象吗?Top
5 楼title(桶漆底脱)回复于 2002-11-28 10:30:00 得分 5
楼主你好像少了连接这步呀!而且创建方式好像有问题呀!
这是我在DELPHI中的代码,运行没有问题,我想你应该可以看懂的。
var oSqlServer:Variant;
sOwnerName:String;
i:integer;
begin
oSqlServer:=CreateOleObject('Sqldmo.sqlServer');
oSqlServer.Connect(Edit1.text,edit2.text,edit3.text);
for i:=1 to oSqlserver.databases.count do
begin
listbox1.Items.Add('-------------');
listbox1.items.Add('名称:'+oSqlServer.databases.Item(i).name);
listbox1.items.Add('大小:'+Inttostr(oSqlServer.databases.Item(i).size));
end;
Memo1.Lines.Add('----------');
//memo1.lines.Add(oSqlServer.databases.item('carManage').Owner);
oSqlServer:=null;
end;Top
6 楼wczwcg(我成长我成功)回复于 2002-11-28 11:00:38 得分 0
To Title:
在 VB 和 Delphi 中的确是如此,在 VC 中若不是 Dll 也可以,但是若是
放在 DllMain 函数中就不行了,而且连 AfxOleInit 放在其中执行后好象也
没有用,在其他地方调用 COM 前也一样还是要调用一次 AfxOleInit(), 真是
很不理解。。。。?????Top
7 楼Phourm()回复于 2002-11-28 11:45:51 得分 45
你在DllMain的哪个地方AfxOleInit()?
最好还是在dwReason == DLL_PROCESS_ATTACH的AfxInitExtensionModule之后加上::CoInitialize(or CoInitializeEx)而在DLL_PROCESS_DETACH的时候::CoUninitialize afxoleinit有一些资源问题可能DLLMAIN还没有分配Top
8 楼wczwcg(我成长我成功)回复于 2002-11-28 16:11:54 得分 0
谢谢,问题已解决。。Top




