在用DELPHI做还原数据库时 老是出现 “数据库正在运行” 还原数据库失败的问题。我想通过这样来解决: 在还原数据库前先停止数据库的运行,还原数据库之后 再让数据库运行。不知 这样是否可以?另外,在DELPHI中如何控制SQL SERVER的“停止、运行”?
请高手 指点,谢谢。
请高手 指点,谢谢。
解决方案 »
- 某个视频编码软件工作后需数十分钟才能完成,它工作完成后不会关闭自己,如何得知这个程序已经压缩完成了呢?
- delphi中有按位与运算符吗?
- sql问题,请教各位!谢谢
- 从一个表中查询出结果,并写到另一个表中的程序,这样写对吗?请高手过招,给分。
- ExpressPrinting System和ExpressQuantumGrid 求页记录数
- 千刀万剐,小偷黑心贼;痛哭流涕,我的文曲星!!!为它哀吊3秒,呜呼哀哉...谨防小偷!!!
- soap应用程序如何发布?
- 请问如何动态的从bpl包中动态的加载类
- 本周话题(3),现在都有哪些数据库建模工具呢?为什么建模,怎么建模,c/s用得着吗?好像还用系统分析之类的工具,偶也想见识一下,拜托介绍一下,最好告诉哪里能得到??
- 将BDE连接SQL SERVER的程序修改成用ADO连接后,如何修改代码呢?
- 怎么画这个图?
- 提醒、提醒、整天在CSDN游当的虾兵虾将们,让每个人都清醒,也包括我!
[email protected]
2 停止sql server可以用
EXEC xp_cmdshell 'net stop sqlserver', no_output
OpenSCManager
OpenService
QueryServiceStatus
StartService // 停止-->启动
ControlService // 暂停-->启动
难道这样写:
procedure Tfrm_store_n.Button3Click(Sender: TObject);
begin
StartService ;
ControlService
end;
这样行吗?
本人E文差,看了半天的MSDN也搞不东。
然后在interface部分写:function StartSQLServer(szErrorMsg:string):Boolean;
在implementation部分写:const
SERVICE_UNKNOWN =0;type
enumSQLSCMCommands=(SQLSCMCmd_STOP,SQLSCMCmd_PAUSE,SQLSCMCmd_START,SQLSCMCmd_CONTINUE);
const
wn95scm='w95scm.dll';
// Function prototypes
function SQLSCMLocalServiceControlA(lpszSvc:LPSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlA';
function SQLSCMLocalServiceControlW(lpszSvc:LPWSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlW';
function SQLSCMGetLocalServiceStateA(lpszSvc:LPSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateA';
function SQLSCMGetLocalServiceStateW(pwszSvc:LPWSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateW';
{$ifdef UNICODE}
function SQLSCMLocalServiceControl(lpszSvc:LPSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlW';
function SQLSCMGetLocalServiceState(pwszSvc:LPWSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateW';
{$else}
function SQLSCMLocalServiceControl(lpszSvc:LPSTR;iCommand:integer;
pdwErr:LPDWORD;iCount:integer;lpStartParameter:Pointer):BOOL;stdcall
external wn95scm name 'SQLSCMLocalServiceControlA';
function SQLSCMGetLocalServiceState(lpszSvc:LPSTR;pdwErr:LPDWORD):DWORD;stdcall
external wn95scm name 'SQLSCMGetLocalServiceStateA';
{$endif} // !UNICODEfunction StartSQLServer(szErrorMsg:string):Boolean;
var
szService:LPSTR;
dwErr:PDWORD;
dwServiceState:DWORD;
bControlSuccessful:BOOL;
lsStr:string;
begin
result:=false; szService := 'MSSQLServer'; bControlSuccessful:=TRUE;
dwServiceState := SQLSCMGetLocalServiceState(szService, dwErr);
while ((dwServiceState <>0) and (bControlSuccessful = TRUE))do
begin
if (dwServiceState = SERVICE_RUNNING) then
break;
case dwServiceState of
SERVICE_PAUSED:begin // Paused, so continue.
bControlSuccessful := SQLSCMLocalServiceControl(szService,
Ord(SQLSCMCmd_CONTINUE),dwErr, 0, nil);
end;
SERVICE_STOPPED:begin // Stopped, start service.
bControlSuccessful := SQLSCMLocalServiceControl(szService,
Ord(SQLSCMCmd_START), dwErr, 0, nil);
end;
else // Error if state is 0 otherwise state is changing.
begin
if (dwServiceState = 0) then
begin // Error. Return failure.
StrPCopy(PChar(dwErr),lsStr);
szErrorMsg:='Error '+lsStr+' on attempt to determine service state.';
exit;
end;
end;
end;
Sleep(5);
dwServiceState := SQLSCMGetLocalServiceState(szService, dwErr);
end;
if (bControlSuccessful) then
begin
StrPCopy(PChar(dwErr),lsStr);
szErrorMsg:='Error '+lsStr+' returned on attempt to change service state.';
end;
result:=bControlSuccessful;
end;
以上是启动SQL Server 的服务,至于停止服务可以根据以上代码自己编写,很容易实现的。
(好像还有另一种方法,通过service管理器api)1. 这种方式很简单, 你可以直接在命令行模式下手工试一下,
net start mssqlserver
net stop mssqlserver2.
OpenSCManager --- 打开服务管理器
OpenService --- 打开一个服务
QueryServiceStatus --- 查询此服务的状态
StartService ---- 如果状态为"停止"的, 就调用这个.
ControlService ----- 如果状态为"暂停"的, 就调用这个.你如果要做一个控制程序,要注意,停止或者关闭一个服务, 可能会需要一些时间.俺这儿只有c++的例子, 你可以参见楼上的.
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
winexec('net start mssqlserver',SW_SHOW)
end;
停止的话就用stop代替start