Delphi通过SQLDMO來控制SQLSERVER
2008-09-20 10:31
183 查看
首先, 需要把 SQLDMO.DLL 文件导入到DELPHI 中。sqldmo.dll 是一个com, 安装SQLServer 后位于 Program
Files/Microsoft SQL Server/80/Tools/Binn
打开Delphi,Project菜单->Import Type
Library...,在列表框中找到"Microsoft SQLDMO ObjectLibrary(Version
8.0)"
导入完后,当我们Compile的时候却发现这个单元无法编译, 提示大意为ID重复定义, 这个简单, 找到不能编辑的地方,把ID 改成
xID就行了,这样就可以编译通过。
在使用过程中,我发现在很多情况下,SQLDMO_TLB.pas中的类是不能用的,
出现av错误。比如Restore,必须这样使用:
CreateOleObject('SQLDMO.Restore');
定义相同的类,如TTABLE等,这个需要处理一下,在TTABLE前加单元名,如DBE.TTABLE
或 SQLDMO_TLB.TTABLE 就OK啦。
下需介绍几个常用的功能。
取SQLSERVER的版本
function getSQLVersion(ServerName,LoginName,LoginPassword:String):TSqlVersion;
var
osqlserver :_SqlServer;
temp :SQLDMO_SQL_VER;
begin
try
oSqlserver :=coSqlserver.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
temp :=oSqlserver.PingSQLServerVersion(ServerName,LoginName,LoginPassword);
if temp=SQLDMOSQLVer_Unknown then
result :=UnknownVer
else if temp=SQLDMOSQLVer_Pre_60 then
result :=SQL60
else if temp=SQLDMOSQLVer_60 then
result :=SQL60
else if temp=SQLDMOSQLVer_65 then
result :=SQL65
else if temp=SQLDMOSQLVer_70 then
result :=SQL70
else
result :=SQL2000;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER版本資訊出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取安裝SQLSERVER操作系統的版本
function getOSType(ServerName:String):ToSTypes;
var
oSqlserver :_SqlServer;
begin
try
oSqlServer :=coSqlServer.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
if oSqlserver.IsOS(SQLDMO_WIN95) then
result :=Win98ORWin95
else if oSqlserver.IsOS(SQLDMO_WINNT) then
result :=WinNTOR2000
else
result :=SysUnknown;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER操作系統出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
停止SQLServer
function stopSQLServer(serverName:String):Boolean;
var
oSqlserver :_SqlServer;
begin
try
oSqlServer :=coSqlserver.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
oSqlServer.Stop;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘停止SQLSERVER服務出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
暫停SQLServer
function PauseSQLServer(ServerName:String):Boolean;
var
oSqlserver :_SqlServer;
begin
try
oSqlServer :=coSqlserver.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
oSqlServer.Pause;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘暫停SQLSERVER服務出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取SQLSERVER的狀態
function getSQLServerStatus(ServerName:String):TSQlServerStatus;
var
oSqlServer :_SqlServer;
begin
try
osqlserver :=coSqlserver.Create;
osqlServer._AddRef;
osqlserver.Name :=serverName;
if oSqlserver.Status=SQLDMOSvc_Unknown then
result :=Unknown
else if oSqlserver.Status=SQLDMOSvc_Running then
result :=Running
else if oSqlserver.Status=SQLDMOSvc_Paused then
result :=Paused
else if oSqlserver.Status=SQLDMOSvc_Stopped then
result :=Stopped
else if oSqlserver.Status=SQLDMOSvc_Starting then
result :=Starting
else if oSqlserver.Status=SQLDMOSvc_Stopping then
result :=Stopping
else if oSqlserver.Status=SQLDMOSvc_Continuing then
result :=Continuing
else if oSqlserver.Status=SQLDMOSvc_Pausing then
result :=Pausing;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER狀態出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
啟動SQLServer服務
function StartSQLServer(ServerName,LoginName,LoginPassword:String):Boolean;
var
oSqlServer :_SqlServer;
begin
try
osqlserver :=coSqlserver.Create;
oSqlServer._AddRef;
osqlserver.Name :=serverName;
if oSqlServer.Status =SQLDMOSvc_Stopped then //服務停止
oSqlServer.Start(False,ServerName,LoginName,LoginPassword);
if oSqlServer.Status=SQLDMOSvc_Paused then //服務暫停
oSqlServer.Continue;
if (oSqlServer.Status=SQLDMOSvc_Paused) or (oSqlServer.Status=SQLDMOSvc_Stopped) then
result :=False
else
result :=true;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
result:=False;
application.MessageBox(Pchar(‘啟動SQLSERVER服務出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
創建備份設備
procedure createBackUpDevice(serverName,LoginName,LoginPassword,DeviceName,FileName:String);
var
osqlServer :_SqlServer;
oBackupDevice :_BackupDevice;
begin
try
osqlServer :=coSqlServer.Create;
osqlserver._AddRef;
osqlServer.Connect(servername,LoginName,LoginPassword);
oBackupDevice :=coBackupDevice.Create;
oBackupDevice.Name :=DeviceName;
oBackupDevice.PhysicalLocation :=FileName;
oBackupDevice.Type_ :=SQLDMODevice_DiskDump;
osqlServer.BackupDevices.Add(oBackupDevice);
osqlServer.DisConnect;
osqlserver._Release;
osqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘創建SQLSERVER備份設備出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
刪除備份設備
procedure dropBackUpDevice(serverName,Loginname,LoginPassword,deviceName:String);
var
osqlServer :_SqlServer;
count,i:Integer;
oBackupDevice :_BackupDevice;
begin
try
osqlServer :=coSqlServer.Create;
osqlServer._AddRef;
osqlServer.Connect(servername,LoginName,LoginPassword);
count :=osqlServer.BackupDevices.Count;
For i :=1 to count do
begin
oBackupDevice:=osqlServer.BackupDevices.Item(i);
if UpperCase(Trim(oBackupDevice.Name))=UpperCase(trim(deviceName)) then
begin
oSqlServer.BackupDevices.Remove(i);
break;
end;
end;
oSqlserver.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘刪除SQLSERVER備份設備出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取所有的備份設備
function GetBackupDeviceInfo(serverName,LoginName,LoginPassword:String):TStringList;
var
osqlServer :_SqlServer;
count,i:Integer;
oBackupDevice :_BackupDevice;
rtn :TStringList;
begin
try
osqlserver :=cosqlServer.Create;
osqlServer._AddRef;
osqlserver.Connect(serverName,LoginName,LoginPassword);
count :=osqlServer.BackupDevices.Count;
rtn :=TStringList.Create;
For i :=1 to count do
begin
oBackupDevice :=oSqlserver.BackupDevices.Item(i);
rtn.Append(oBackupDevice.Name);
end;
result :=rtn;
osqlserver.DisConnect;
osqlserver._Release;
osqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER備份設備資訊出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
殺所有連接SqlServer的線程
procedure killprocess(serverName,dataBaseName,LoginName,LoginPassword:String);
var
oqr :QueryResults;
osqlServer :_SqlServer;
coli,colcount,count,i :Integer;
rs : _RecordSet;
iColPIDNum :Integer;
iColDbName :Integer;
strName,strDBName:String;
lPID :Integer;
begin
try
osqlserver :=coSqlserver.Create;
osqlserver._AddRef;
osqlServer.Connect(serverName,Loginname,LoginPassword);
oqr :=osqlserver.EnumProcesses(-1);
iColPIDNum :=-1;
iColDbName :=-1;
colcount :=oqr.Columns;
for i :=1 to colcount do
begin
strName :=oqr.ColumnName[i];
if Uppercase(strName)=‘SPID‘ then
iColPIDNum :=i
else if Uppercase(strName)=‘DBNAME‘ then
iColDbName :=I;
IF (iColPIDNum<>-1) and (iColDbName<>-1) then
break;
end;
count :=oqr.Rows;
for i :=1 to count do
begin
lPID :=oqr.GetColumnLong(i,iColPIDNum);
strDBName:=oqr.GetColumnString(i,iColDbName);
if Uppercase(Trim(strDBName))=Uppercase(trim(dataBaseName)) then
oSqlserver.KillProcess(lPID);
end;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘刪除Sqlserver線程出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取服務器所有的資料庫
function getAllDataBases(serverName,LoginName,LoginPassword:String):TStringList;
var
oSqlServer :_SqlServer;
rtn :TStringList;
odataBase :_DataBase;
count,i :Integer;
begin
try
osqlServer :=coSqlServer.Create;
osqlServer._AddRef;
osqlServer.Connect(ServerName,LoginName,LoginPassword);
count :=osqlServer.Databases.Count;
rtn :=TStringList.Create;
for i :=1 to count do
begin
odataBase :=osqlserver.Databases.Item(i,‘owner‘);
rtn.Append(odataBase.Name);
end;
result :=rtn;
osqlServer.DisConnect;
oSqlServer._Release;
osqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER資料庫列表出錯了‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取網絡中所有SQLServer服務器列表
Function GetAllServers:TStringList;
var
sApp : _Application ;
sName : NameList;
rtn :TStringList;
count,i :Integer;
begin
try
sApp :=coApplication.Create;
sName :=sApp.ListAvailableSQLServers;
rtn :=TStringList.Create;
count :=SName.Count;
for i :=0 to count -1 do
rtn.Append(sName.Item(i));
result :=rtn;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取網絡中的SQLSERVER列表出錯了‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
刪除資料庫
procedure dropDatabase(serverName,LoginName,LoginPassword,dataBaseName:String);
var
osqlServer:_SqlServer;
begin
try
osqlServer :=coSqlserver.Create;
osqlServer._AddRef;
osqlServer.Connect(serverName,LoginName,LoginPassword);
osqlServer.Databases.Remove(dataBaseName,‘owner‘);
oSqlServer.DisConnect;
osqlServer._Release;
oSqlServer :=nil;
except
on E:Exception do
begin
application.MessageBox(Pchar(‘刪除資料庫錯誤:‘+E.Message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
創建資料庫
procedure createDatabase(serverName,LoginName,LoginPassword,dataBaseName:String);
var
odataBase :_Database;
oDBFileData :_DBFile;
oLogFile :_LogFile;
osqlServer :_SqlServer;
begin
try
osqlServer :=cosqlServer.Create;
osqlServer._AddRef;
osqlServer.Connect(serverName,LoginName,LoginPassword);
odataBase :=coDataBase.Create;
odataBase._AddRef;
oDBFileData :=coDBFile.Create;
oDBFileData._AddRef;
oLogFile :=coLogFile.Create;
oLogFile._AddRef;
oDataBase.Name :=dataBaseName;
oDBFileData.Name :=dataBaseName;
oDBFileData.PhysicalName :=oSqlServer.Registry.SQLDataRoot +‘/data/‘+dataBaseName+‘.mdf‘;
oDBFileData.PrimaryFile :=true;
oDBFileData.Size :=2;
oDBFileData.FileGrowthType := SQLDMOGrowth_MB;
oDBFileData.FileGrowth := 1;
oDatabase.FileGroups.Item(‘PRIMARY‘).DBFiles.Add(oDBFileData);
oLogFile.Name :=dataBaseName+‘Log‘;
oLogFile.PhysicalName :=oSqlServer.Registry.SQLDataRoot +‘/data/‘+dataBaseName+‘.ldf‘;
oLogFile.Size :=2;
oDatabase.TransactionLog.LogFiles.Add(oLogFile);
oSqlServer.Databases.Add(oDatabase);
osqlServer.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
oDataBase._Release;
oDataBase :=nil;
oDBFileData._Release;
oDBFileData :=nil;
oLogFile._Release;
oLogFile :=nil;
except
on E:Exception do
begin
application.MessageBox(Pchar(‘創建資料庫錯誤:‘+E.Message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
停止SQLSERVER代理
procedure stopJobServer(serverName,LoginName,LoginPassword:String);
var
oSqlServer :_SqlServer;
oJobServer :JobServer;
begin
try
oSqlServer :=coSqlServer.Create;
oSqlServer._AddRef;
osqlServer.Connect(ServerName,LoginName,LoginPassword);
oJobServer :=osqlServer.JobServer;
if (oJobServer.Status=SQLDMOSvc_Running) then
OjobServer.Stop;
oSqlServer.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(E.Message+‘停止SQLSERVER代理錯誤!‘),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
啟動SQLServer代理
procedure startJobserver(serverName,LoginName,LoginPassword:String);
var
oSqlServer :_SqlServer;
oJobServer :JobServer;
begin
try
oSqlServer :=coSqlServer.Create;
oSqlServer._AddRef;
osqlServer.Connect(ServerName,LoginName,LoginPassword);
oJobServer :=osqlServer.JobServer;
if (oJobServer.Status<>SQLDMOSvc_Starting) and (oJobServer.Status<>SQLDMOSvc_Running) then
OjobServer.Start;
osqlServer.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(E.Message+‘啟動SQLSERVER代理錯誤!‘),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取SQL的安裝路徑
function getSqlRootPath(serverName,LoginUserName,LoginPassword:String):String;
var
osqlServer :_SqlServer;
begin
try
osqlServer :=coSqlServer.Create;
oSqlServer._AddRef;
oSqlServer.Connect(ServerName,LoginUserName,LoginPassword);
result :=oSqlServer.Registry.SQLRootPath;
osqlServer.DisConnect;
osqlServer._Release;
osqlServer :=nil;
except
Raise;
end;
end;
Files/Microsoft SQL Server/80/Tools/Binn
打开Delphi,Project菜单->Import Type
Library...,在列表框中找到"Microsoft SQLDMO ObjectLibrary(Version
8.0)"
导入完后,当我们Compile的时候却发现这个单元无法编译, 提示大意为ID重复定义, 这个简单, 找到不能编辑的地方,把ID 改成
xID就行了,这样就可以编译通过。
在使用过程中,我发现在很多情况下,SQLDMO_TLB.pas中的类是不能用的,
出现av错误。比如Restore,必须这样使用:
CreateOleObject('SQLDMO.Restore');
定义相同的类,如TTABLE等,这个需要处理一下,在TTABLE前加单元名,如DBE.TTABLE
或 SQLDMO_TLB.TTABLE 就OK啦。
下需介绍几个常用的功能。
取SQLSERVER的版本
function getSQLVersion(ServerName,LoginName,LoginPassword:String):TSqlVersion;
var
osqlserver :_SqlServer;
temp :SQLDMO_SQL_VER;
begin
try
oSqlserver :=coSqlserver.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
temp :=oSqlserver.PingSQLServerVersion(ServerName,LoginName,LoginPassword);
if temp=SQLDMOSQLVer_Unknown then
result :=UnknownVer
else if temp=SQLDMOSQLVer_Pre_60 then
result :=SQL60
else if temp=SQLDMOSQLVer_60 then
result :=SQL60
else if temp=SQLDMOSQLVer_65 then
result :=SQL65
else if temp=SQLDMOSQLVer_70 then
result :=SQL70
else
result :=SQL2000;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER版本資訊出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取安裝SQLSERVER操作系統的版本
function getOSType(ServerName:String):ToSTypes;
var
oSqlserver :_SqlServer;
begin
try
oSqlServer :=coSqlServer.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
if oSqlserver.IsOS(SQLDMO_WIN95) then
result :=Win98ORWin95
else if oSqlserver.IsOS(SQLDMO_WINNT) then
result :=WinNTOR2000
else
result :=SysUnknown;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER操作系統出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
停止SQLServer
function stopSQLServer(serverName:String):Boolean;
var
oSqlserver :_SqlServer;
begin
try
oSqlServer :=coSqlserver.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
oSqlServer.Stop;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘停止SQLSERVER服務出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
暫停SQLServer
function PauseSQLServer(ServerName:String):Boolean;
var
oSqlserver :_SqlServer;
begin
try
oSqlServer :=coSqlserver.Create;
oSqlserver._AddRef;
oSqlserver.Name :=ServerName;
oSqlServer.Pause;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘暫停SQLSERVER服務出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取SQLSERVER的狀態
function getSQLServerStatus(ServerName:String):TSQlServerStatus;
var
oSqlServer :_SqlServer;
begin
try
osqlserver :=coSqlserver.Create;
osqlServer._AddRef;
osqlserver.Name :=serverName;
if oSqlserver.Status=SQLDMOSvc_Unknown then
result :=Unknown
else if oSqlserver.Status=SQLDMOSvc_Running then
result :=Running
else if oSqlserver.Status=SQLDMOSvc_Paused then
result :=Paused
else if oSqlserver.Status=SQLDMOSvc_Stopped then
result :=Stopped
else if oSqlserver.Status=SQLDMOSvc_Starting then
result :=Starting
else if oSqlserver.Status=SQLDMOSvc_Stopping then
result :=Stopping
else if oSqlserver.Status=SQLDMOSvc_Continuing then
result :=Continuing
else if oSqlserver.Status=SQLDMOSvc_Pausing then
result :=Pausing;
oSqlserver._Release;
oSqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER狀態出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
啟動SQLServer服務
function StartSQLServer(ServerName,LoginName,LoginPassword:String):Boolean;
var
oSqlServer :_SqlServer;
begin
try
osqlserver :=coSqlserver.Create;
oSqlServer._AddRef;
osqlserver.Name :=serverName;
if oSqlServer.Status =SQLDMOSvc_Stopped then //服務停止
oSqlServer.Start(False,ServerName,LoginName,LoginPassword);
if oSqlServer.Status=SQLDMOSvc_Paused then //服務暫停
oSqlServer.Continue;
if (oSqlServer.Status=SQLDMOSvc_Paused) or (oSqlServer.Status=SQLDMOSvc_Stopped) then
result :=False
else
result :=true;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
result:=False;
application.MessageBox(Pchar(‘啟動SQLSERVER服務出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
創建備份設備
procedure createBackUpDevice(serverName,LoginName,LoginPassword,DeviceName,FileName:String);
var
osqlServer :_SqlServer;
oBackupDevice :_BackupDevice;
begin
try
osqlServer :=coSqlServer.Create;
osqlserver._AddRef;
osqlServer.Connect(servername,LoginName,LoginPassword);
oBackupDevice :=coBackupDevice.Create;
oBackupDevice.Name :=DeviceName;
oBackupDevice.PhysicalLocation :=FileName;
oBackupDevice.Type_ :=SQLDMODevice_DiskDump;
osqlServer.BackupDevices.Add(oBackupDevice);
osqlServer.DisConnect;
osqlserver._Release;
osqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘創建SQLSERVER備份設備出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
刪除備份設備
procedure dropBackUpDevice(serverName,Loginname,LoginPassword,deviceName:String);
var
osqlServer :_SqlServer;
count,i:Integer;
oBackupDevice :_BackupDevice;
begin
try
osqlServer :=coSqlServer.Create;
osqlServer._AddRef;
osqlServer.Connect(servername,LoginName,LoginPassword);
count :=osqlServer.BackupDevices.Count;
For i :=1 to count do
begin
oBackupDevice:=osqlServer.BackupDevices.Item(i);
if UpperCase(Trim(oBackupDevice.Name))=UpperCase(trim(deviceName)) then
begin
oSqlServer.BackupDevices.Remove(i);
break;
end;
end;
oSqlserver.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘刪除SQLSERVER備份設備出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取所有的備份設備
function GetBackupDeviceInfo(serverName,LoginName,LoginPassword:String):TStringList;
var
osqlServer :_SqlServer;
count,i:Integer;
oBackupDevice :_BackupDevice;
rtn :TStringList;
begin
try
osqlserver :=cosqlServer.Create;
osqlServer._AddRef;
osqlserver.Connect(serverName,LoginName,LoginPassword);
count :=osqlServer.BackupDevices.Count;
rtn :=TStringList.Create;
For i :=1 to count do
begin
oBackupDevice :=oSqlserver.BackupDevices.Item(i);
rtn.Append(oBackupDevice.Name);
end;
result :=rtn;
osqlserver.DisConnect;
osqlserver._Release;
osqlserver :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER備份設備資訊出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
殺所有連接SqlServer的線程
procedure killprocess(serverName,dataBaseName,LoginName,LoginPassword:String);
var
oqr :QueryResults;
osqlServer :_SqlServer;
coli,colcount,count,i :Integer;
rs : _RecordSet;
iColPIDNum :Integer;
iColDbName :Integer;
strName,strDBName:String;
lPID :Integer;
begin
try
osqlserver :=coSqlserver.Create;
osqlserver._AddRef;
osqlServer.Connect(serverName,Loginname,LoginPassword);
oqr :=osqlserver.EnumProcesses(-1);
iColPIDNum :=-1;
iColDbName :=-1;
colcount :=oqr.Columns;
for i :=1 to colcount do
begin
strName :=oqr.ColumnName[i];
if Uppercase(strName)=‘SPID‘ then
iColPIDNum :=i
else if Uppercase(strName)=‘DBNAME‘ then
iColDbName :=I;
IF (iColPIDNum<>-1) and (iColDbName<>-1) then
break;
end;
count :=oqr.Rows;
for i :=1 to count do
begin
lPID :=oqr.GetColumnLong(i,iColPIDNum);
strDBName:=oqr.GetColumnString(i,iColDbName);
if Uppercase(Trim(strDBName))=Uppercase(trim(dataBaseName)) then
oSqlserver.KillProcess(lPID);
end;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘刪除Sqlserver線程出錯:‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取服務器所有的資料庫
function getAllDataBases(serverName,LoginName,LoginPassword:String):TStringList;
var
oSqlServer :_SqlServer;
rtn :TStringList;
odataBase :_DataBase;
count,i :Integer;
begin
try
osqlServer :=coSqlServer.Create;
osqlServer._AddRef;
osqlServer.Connect(ServerName,LoginName,LoginPassword);
count :=osqlServer.Databases.Count;
rtn :=TStringList.Create;
for i :=1 to count do
begin
odataBase :=osqlserver.Databases.Item(i,‘owner‘);
rtn.Append(odataBase.Name);
end;
result :=rtn;
osqlServer.DisConnect;
oSqlServer._Release;
osqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取SQLSERVER資料庫列表出錯了‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取網絡中所有SQLServer服務器列表
Function GetAllServers:TStringList;
var
sApp : _Application ;
sName : NameList;
rtn :TStringList;
count,i :Integer;
begin
try
sApp :=coApplication.Create;
sName :=sApp.ListAvailableSQLServers;
rtn :=TStringList.Create;
count :=SName.Count;
for i :=0 to count -1 do
rtn.Append(sName.Item(i));
result :=rtn;
except
on E :Exception do
begin
application.MessageBox(Pchar(‘取網絡中的SQLSERVER列表出錯了‘+E.message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
刪除資料庫
procedure dropDatabase(serverName,LoginName,LoginPassword,dataBaseName:String);
var
osqlServer:_SqlServer;
begin
try
osqlServer :=coSqlserver.Create;
osqlServer._AddRef;
osqlServer.Connect(serverName,LoginName,LoginPassword);
osqlServer.Databases.Remove(dataBaseName,‘owner‘);
oSqlServer.DisConnect;
osqlServer._Release;
oSqlServer :=nil;
except
on E:Exception do
begin
application.MessageBox(Pchar(‘刪除資料庫錯誤:‘+E.Message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
創建資料庫
procedure createDatabase(serverName,LoginName,LoginPassword,dataBaseName:String);
var
odataBase :_Database;
oDBFileData :_DBFile;
oLogFile :_LogFile;
osqlServer :_SqlServer;
begin
try
osqlServer :=cosqlServer.Create;
osqlServer._AddRef;
osqlServer.Connect(serverName,LoginName,LoginPassword);
odataBase :=coDataBase.Create;
odataBase._AddRef;
oDBFileData :=coDBFile.Create;
oDBFileData._AddRef;
oLogFile :=coLogFile.Create;
oLogFile._AddRef;
oDataBase.Name :=dataBaseName;
oDBFileData.Name :=dataBaseName;
oDBFileData.PhysicalName :=oSqlServer.Registry.SQLDataRoot +‘/data/‘+dataBaseName+‘.mdf‘;
oDBFileData.PrimaryFile :=true;
oDBFileData.Size :=2;
oDBFileData.FileGrowthType := SQLDMOGrowth_MB;
oDBFileData.FileGrowth := 1;
oDatabase.FileGroups.Item(‘PRIMARY‘).DBFiles.Add(oDBFileData);
oLogFile.Name :=dataBaseName+‘Log‘;
oLogFile.PhysicalName :=oSqlServer.Registry.SQLDataRoot +‘/data/‘+dataBaseName+‘.ldf‘;
oLogFile.Size :=2;
oDatabase.TransactionLog.LogFiles.Add(oLogFile);
oSqlServer.Databases.Add(oDatabase);
osqlServer.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
oDataBase._Release;
oDataBase :=nil;
oDBFileData._Release;
oDBFileData :=nil;
oLogFile._Release;
oLogFile :=nil;
except
on E:Exception do
begin
application.MessageBox(Pchar(‘創建資料庫錯誤:‘+E.Message),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
停止SQLSERVER代理
procedure stopJobServer(serverName,LoginName,LoginPassword:String);
var
oSqlServer :_SqlServer;
oJobServer :JobServer;
begin
try
oSqlServer :=coSqlServer.Create;
oSqlServer._AddRef;
osqlServer.Connect(ServerName,LoginName,LoginPassword);
oJobServer :=osqlServer.JobServer;
if (oJobServer.Status=SQLDMOSvc_Running) then
OjobServer.Stop;
oSqlServer.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(E.Message+‘停止SQLSERVER代理錯誤!‘),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
啟動SQLServer代理
procedure startJobserver(serverName,LoginName,LoginPassword:String);
var
oSqlServer :_SqlServer;
oJobServer :JobServer;
begin
try
oSqlServer :=coSqlServer.Create;
oSqlServer._AddRef;
osqlServer.Connect(ServerName,LoginName,LoginPassword);
oJobServer :=osqlServer.JobServer;
if (oJobServer.Status<>SQLDMOSvc_Starting) and (oJobServer.Status<>SQLDMOSvc_Running) then
OjobServer.Start;
osqlServer.DisConnect;
oSqlServer._Release;
oSqlServer :=nil;
except
on E :Exception do
begin
application.MessageBox(Pchar(E.Message+‘啟動SQLSERVER代理錯誤!‘),‘系統提示‘,MB_OK+MB_ICONSTOP);
end;
end;
end;
取SQL的安裝路徑
function getSqlRootPath(serverName,LoginUserName,LoginPassword:String):String;
var
osqlServer :_SqlServer;
begin
try
osqlServer :=coSqlServer.Create;
oSqlServer._AddRef;
oSqlServer.Connect(ServerName,LoginUserName,LoginPassword);
result :=oSqlServer.Registry.SQLRootPath;
osqlServer.DisConnect;
osqlServer._Release;
osqlServer :=nil;
except
Raise;
end;
end;
相关文章推荐
- Delphi通过SQLDMO來控制SQLSERVER
- Delphi通过SQLDMO來控制SQLSERVER
- Delphi在Vasta/win 7下通过UAC控制
- Delphi之通过代码示例学习XML解析、StringReplace的用法(异常控制 good)
- 如何通过 SQLDMO 组件枚举可用的 SQLServer 实例
- Delphi在Vasta/win 7下通过UAC控制
- [寒江孤叶丶的Cocos2d-x之旅_33]RichTextEx一款通过HTML标签控制文字样式的富文本控件
- android之动画通过AnimationDrawable控制逐帧动画
- Delphi控制Word的一些方法
- 通过BGP属性控制路径
- delphi 应用系统- 版本控制
- Delphi导出Execl及控制Execl
- 通过命令获取sqlserver表的结构
- CI框架中通过hook的方式实现简单的权限控制
- 通过word模板 控制程序UI布局
- 通过DNS隧道来控制Meterpreter
- delphi xe5 android 控制蓝牙
- 通过虚函数表调用虚函数与通过虚函数表(绕过访问权限控制)
- 关于SQLSERVER 2008 远程访问控制的配置
- 通过Libvirt控制KVM虚拟机资源的方法