22 个解决方案
#1
方法1:先得到自己的机器名,在和sqlServer列表,作对比,看在不在里面。
方法2:可能存在更简便的方法2。
good luck!
{=================================================================
功 能: 返回网络中SQLServer列表
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败 False
备 注:
版 本:
1.0 2002/10/02 22:44:00
=================================================================}
Function GetSQLServerList(var List: Tstringlist): boolean;
var
i: integer;
sRetValue: String;
SQLServer: Variant;
ServerList: Variant;
begin
Result := False;
List.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
for i := 1 to Serverlist.Count do
list.Add (Serverlist.item(i));
Result := True;
Finally
SQLServer := NULL;
ServerList := NULL;
end;
end;
方法2:可能存在更简便的方法2。
good luck!
{=================================================================
功 能: 返回网络中SQLServer列表
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败 False
备 注:
版 本:
1.0 2002/10/02 22:44:00
=================================================================}
Function GetSQLServerList(var List: Tstringlist): boolean;
var
i: integer;
sRetValue: String;
SQLServer: Variant;
ServerList: Variant;
begin
Result := False;
List.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
for i := 1 to Serverlist.Count do
list.Add (Serverlist.item(i));
Result := True;
Finally
SQLServer := NULL;
ServerList := NULL;
end;
end;
#2
顶一下
#3
你如果用了ADOconnection控件连接SQL,那么只要这样:
try
adoconnection.connected:=true;
showmeessage('ok');
except
showmessage('no');
end;
try
adoconnection.connected:=true;
showmeessage('ok');
except
showmessage('no');
end;
#4
占个学习
#5
谢谢各位,有没有直接可以查看进程来解决的办法?
#6
转贴framework 的回答
把sql server 的协议配置成用tcp/ip的
sql server的默认端口为1433,接着就用socket连接1433连接成功表示已经启动,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address := '127.0.0.1';
ClientSocket1.Port := 1433;
ClientSocket1.Active := True;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('server is open');
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode=10061 then
begin
ShowMessage('Server does not open ');
ErrorCode := 0;
end;
end;
end.
窗体文件
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 104
Top = 160
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object ClientSocket1: TClientSocket
Active = False
ClientType = ctNonBlocking
Port = 0
OnConnect = ClientSocket1Connect
OnError = ClientSocket1Error
Left = 104
Top = 112
end
end
你必须先用sql server的客户端网络实用工具进行tcp/ip协议的配置
把sql server 的协议配置成用tcp/ip的
sql server的默认端口为1433,接着就用socket连接1433连接成功表示已经启动,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address := '127.0.0.1';
ClientSocket1.Port := 1433;
ClientSocket1.Active := True;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('server is open');
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode=10061 then
begin
ShowMessage('Server does not open ');
ErrorCode := 0;
end;
end;
end.
窗体文件
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 104
Top = 160
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object ClientSocket1: TClientSocket
Active = False
ClientType = ctNonBlocking
Port = 0
OnConnect = ClientSocket1Connect
OnError = ClientSocket1Error
Left = 104
Top = 112
end
end
你必须先用sql server的客户端网络实用工具进行tcp/ip协议的配置
#7
当然有了,但是我忘记放在什么地方了,我给你找找把。
#8
关注学习!!
#9
加强学习!
#10
认真学习ing
#11
有没有直接可以查看服务或进程来解决的办法?
#12
刚刚做了一个类似的工具,你可判断一下系统服务中(或远程服务器) MSSQLServer 服务的状态可知是否启动了,也可以打开此服务,再进行连接,但你需要有相应的权限。
#13
Good Good Study,Day Day UP!
#14
!
#15
其实判断本机MSSQLSERVER这个服务是否启动就可以知道了。很简单的
远程的嘛,只有连接试试看了,连上就是启动了,没连上就是没启动。
远程的嘛,只有连接试试看了,连上就是启动了,没连上就是没启动。
#16
强人好多
#17
//最笨又最简单的办法:
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
except
Result := False;
end;
end;
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
except
Result := False;
end;
end;
#18
//错了,应该是这样:
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
Result := True;
except
Exit;
end;
end;
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
Result := True;
except
Exit;
end;
end;
#19
谢谢各位的回答,可能是我没有说清楚。在这里,要连接的数据库信息是用INI文件动态配置的,包括服务器、数据库、用户名和密码,连接字符串自然也提取INI文件的内容动态生成的,然后用ADOC去连接。所以,我想做的是,首先判断SQL服务是否启动,如果启动就去连接数据库,如果没有要先启动服务然后再去连接,因此这个判断是不能根据Connected属性来决定的。现在我想知道怎么获取服务,或者进程来判断,这样才有意义。
#20
???
#21
uses Tlhelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
ProcessList : Thandle;
pe : TPROCESSENTRY32;
ProcList : TStringList;
i : integer;
begin
ProcList := TStringList.Create;
try
ProcessList := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize := sizeof(TPROCESSENTRY32);
if process32first(ProcessList,pe) then
begin
ProcList.Add(pe.szexefile);
while process32next(ProcessList,pe) do
ProcList.Add(pe.szexefile);
end;
for i := 0 to ProcList.Count -1 do
if ProcList[i] = 'sqlservr.exe' then
ShowMessage('SQL Server already Run!');
finally
ProcList.Free;
end;
end;
#22
谢谢 VeryOldMan(老者) !
我要的就是这个东西,下面补充一点,顺便揭帖。
scm -action 1 -slient 1 -service mssqlserver //启动
scm -action 6 -slient 1 -service mssqlserver //停止
我要的就是这个东西,下面补充一点,顺便揭帖。
scm -action 1 -slient 1 -service mssqlserver //启动
scm -action 6 -slient 1 -service mssqlserver //停止
#1
方法1:先得到自己的机器名,在和sqlServer列表,作对比,看在不在里面。
方法2:可能存在更简便的方法2。
good luck!
{=================================================================
功 能: 返回网络中SQLServer列表
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败 False
备 注:
版 本:
1.0 2002/10/02 22:44:00
=================================================================}
Function GetSQLServerList(var List: Tstringlist): boolean;
var
i: integer;
sRetValue: String;
SQLServer: Variant;
ServerList: Variant;
begin
Result := False;
List.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
for i := 1 to Serverlist.Count do
list.Add (Serverlist.item(i));
Result := True;
Finally
SQLServer := NULL;
ServerList := NULL;
end;
end;
方法2:可能存在更简便的方法2。
good luck!
{=================================================================
功 能: 返回网络中SQLServer列表
参 数:
List: 需要填充的List
返回值: 成功: True,并填充List 失败 False
备 注:
版 本:
1.0 2002/10/02 22:44:00
=================================================================}
Function GetSQLServerList(var List: Tstringlist): boolean;
var
i: integer;
sRetValue: String;
SQLServer: Variant;
ServerList: Variant;
begin
Result := False;
List.Clear;
try
SQLServer := CreateOleObject('SQLDMO.Application');
ServerList := SQLServer.ListAvailableSQLServers;
for i := 1 to Serverlist.Count do
list.Add (Serverlist.item(i));
Result := True;
Finally
SQLServer := NULL;
ServerList := NULL;
end;
end;
#2
顶一下
#3
你如果用了ADOconnection控件连接SQL,那么只要这样:
try
adoconnection.connected:=true;
showmeessage('ok');
except
showmessage('no');
end;
try
adoconnection.connected:=true;
showmeessage('ok');
except
showmessage('no');
end;
#4
占个学习
#5
谢谢各位,有没有直接可以查看进程来解决的办法?
#6
转贴framework 的回答
把sql server 的协议配置成用tcp/ip的
sql server的默认端口为1433,接着就用socket连接1433连接成功表示已经启动,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address := '127.0.0.1';
ClientSocket1.Port := 1433;
ClientSocket1.Active := True;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('server is open');
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode=10061 then
begin
ShowMessage('Server does not open ');
ErrorCode := 0;
end;
end;
end.
窗体文件
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 104
Top = 160
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object ClientSocket1: TClientSocket
Active = False
ClientType = ctNonBlocking
Port = 0
OnConnect = ClientSocket1Connect
OnError = ClientSocket1Error
Left = 104
Top = 112
end
end
你必须先用sql server的客户端网络实用工具进行tcp/ip协议的配置
把sql server 的协议配置成用tcp/ip的
sql server的默认端口为1433,接着就用socket连接1433连接成功表示已经启动,
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls, ScktComp;
type
TForm1 = class(TForm)
ClientSocket1: TClientSocket;
Button1: TButton;
procedure Button1Click(Sender: TObject);
procedure ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
procedure TForm1.Button1Click(Sender: TObject);
begin
ClientSocket1.Address := '127.0.0.1';
ClientSocket1.Port := 1433;
ClientSocket1.Active := True;
end;
procedure TForm1.ClientSocket1Connect(Sender: TObject;
Socket: TCustomWinSocket);
begin
ShowMessage('server is open');
end;
procedure TForm1.ClientSocket1Error(Sender: TObject;
Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
var ErrorCode: Integer);
begin
if ErrorCode=10061 then
begin
ShowMessage('Server does not open ');
ErrorCode := 0;
end;
end;
end.
窗体文件
object Form1: TForm1
Left = 192
Top = 107
Width = 696
Height = 480
Caption = 'Form1'
Color = clBtnFace
Font.Charset = DEFAULT_CHARSET
Font.Color = clWindowText
Font.Height = -11
Font.Name = 'MS Sans Serif'
Font.Style = []
OldCreateOrder = False
PixelsPerInch = 96
TextHeight = 13
object Button1: TButton
Left = 104
Top = 160
Width = 75
Height = 25
Caption = 'Button1'
TabOrder = 0
OnClick = Button1Click
end
object ClientSocket1: TClientSocket
Active = False
ClientType = ctNonBlocking
Port = 0
OnConnect = ClientSocket1Connect
OnError = ClientSocket1Error
Left = 104
Top = 112
end
end
你必须先用sql server的客户端网络实用工具进行tcp/ip协议的配置
#7
当然有了,但是我忘记放在什么地方了,我给你找找把。
#8
关注学习!!
#9
加强学习!
#10
认真学习ing
#11
有没有直接可以查看服务或进程来解决的办法?
#12
刚刚做了一个类似的工具,你可判断一下系统服务中(或远程服务器) MSSQLServer 服务的状态可知是否启动了,也可以打开此服务,再进行连接,但你需要有相应的权限。
#13
Good Good Study,Day Day UP!
#14
!
#15
其实判断本机MSSQLSERVER这个服务是否启动就可以知道了。很简单的
远程的嘛,只有连接试试看了,连上就是启动了,没连上就是没启动。
远程的嘛,只有连接试试看了,连上就是启动了,没连上就是没启动。
#16
强人好多
#17
//最笨又最简单的办法:
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
except
Result := False;
end;
end;
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
except
Result := False;
end;
end;
#18
//错了,应该是这样:
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
Result := True;
except
Exit;
end;
end;
function LinkDB(const adocnn: TADOConnection): Boolean;
begin
Result := False;
try
adocnn.Connected := True;
Result := True;
except
Exit;
end;
end;
#19
谢谢各位的回答,可能是我没有说清楚。在这里,要连接的数据库信息是用INI文件动态配置的,包括服务器、数据库、用户名和密码,连接字符串自然也提取INI文件的内容动态生成的,然后用ADOC去连接。所以,我想做的是,首先判断SQL服务是否启动,如果启动就去连接数据库,如果没有要先启动服务然后再去连接,因此这个判断是不能根据Connected属性来决定的。现在我想知道怎么获取服务,或者进程来判断,这样才有意义。
#20
???
#21
uses Tlhelp32;
procedure TForm1.Button1Click(Sender: TObject);
var
ProcessList : Thandle;
pe : TPROCESSENTRY32;
ProcList : TStringList;
i : integer;
begin
ProcList := TStringList.Create;
try
ProcessList := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
pe.dwSize := sizeof(TPROCESSENTRY32);
if process32first(ProcessList,pe) then
begin
ProcList.Add(pe.szexefile);
while process32next(ProcessList,pe) do
ProcList.Add(pe.szexefile);
end;
for i := 0 to ProcList.Count -1 do
if ProcList[i] = 'sqlservr.exe' then
ShowMessage('SQL Server already Run!');
finally
ProcList.Free;
end;
end;
#22
谢谢 VeryOldMan(老者) !
我要的就是这个东西,下面补充一点,顺便揭帖。
scm -action 1 -slient 1 -service mssqlserver //启动
scm -action 6 -slient 1 -service mssqlserver //停止
我要的就是这个东西,下面补充一点,顺便揭帖。
scm -action 1 -slient 1 -service mssqlserver //启动
scm -action 6 -slient 1 -service mssqlserver //停止