如何在 Delphi 10.2 中连接到 SQL 服务器数据库之前测试 ADOConnection ConnectionString
How to test ADOConnection ConnectionString before connecting to SQL Server database in Delphi 10.2
我正在 Delphi 10.2 上开发一个应用程序,它连接到 SQL Server 2014 数据库。如何在应用程序启动前测试与具有连接字符串的数据库的连接?
我已经使用 ADoconnection
作为连接到上述数据库的接口,使用 try-catch 或 try-except 进行了一些编码以排除不需要的 SQL 服务器错误,并使用仪表条指示我的启动过程的进展(随着查询激活和表单创建而进展)。
所以当连接字符串不对时,我会得到
的错误
Login failed for user 'admin98'
(admin98 是 SQL 服务器用户的名称);当连接字符串正常时,仪表条会继续,在中途我再次遇到同样的错误。
注意:我使用了 freeInstance
或 NewInstance
或其他类似的东西,但没有用。
这是连接到数据库并在遇到错误时捕获错误的函数
function DBConnect: Boolean;
var
conStr : string;
begin
conStr:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=admin'+Fstart_.year_combobox.Text+';PassWord=000;Initial Catalog=student'+Fstart_.year_combobox.Text+';Data Source='+Fstart_.StringTemp+';';
DataModule1.ADOConnection1.Close;
DataModule1.ADOConnection1.ConnectionString:= conStr;
DataModule1.ADOConnection1.LoginPrompt:= False;
if (NOT DataModule1.ADOConnection1.Connected) then
begin
try
DataModule1.ADOConnection1.Open;
Result:= True;
Except on E:Exception do
begin
if e.Message = 'Login failed for user '+chr(39)+'admin'+Fstart_.year_combobox.Text+chr(39) then
//showmessage
if e.Message = '[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied' then
//showmessage
DataModule1.ADOConnection1.Close;
DataModule1.ADOConnection1.ConnectionString:= '';
Result:= False;
end;
end;
end;
end;
问题是它必须工作,我不应该重新启动应用程序,所以我需要在连接之前进行测试或重置整个连接。
我希望连接成功,但即使我更改组合框值并且我知道用户存在于 SQL 服务器
中,我还是再次收到错误
这个答案对我有用,我发现我需要 5 秒 sleep
从 RAM
中获取线程
function DBConnect: Boolean;
var
conStr : string;
begin
ini:= TMemIniFile.Create(GetCurrentDir + '\Settings.ini');
Fstart_.StringTemp:= ini.ReadString('Server Directory', 'Server Name', KeyFileString);
Application.CreateForm(TDataModule1, DataModule1);
DataModule1.ADOConnection1.Close;
conStr:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=admin'+Fstart_.year_combobox.Text+';PassWord=123;Initial Catalog=darman'+Fstart_.year_combobox.Text+';Data Source='+Fstart_.StringTemp+';';
DataModule1.ADOConnection1.ConnectionString:= conStr;
DataModule1.ADOConnection1.LoginPrompt:= False;
try
DataModule1.ADOConnection1.Open;
Result:= True;
Except on E:Exception do
begin
if e.Message = 'Login failed for user '+chr(39)+'admin'+Fstart_.year_combobox.Text+chr(39) then
// Showmessage
[mbOK],0);
if e.Message = '[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied' then
// ShowMessage
DataModule1.ADOConnection1.Close;
DataModule1.Destroy;
Sleep(5000);
end;
end;
end;
我正在 Delphi 10.2 上开发一个应用程序,它连接到 SQL Server 2014 数据库。如何在应用程序启动前测试与具有连接字符串的数据库的连接?
我已经使用 ADoconnection
作为连接到上述数据库的接口,使用 try-catch 或 try-except 进行了一些编码以排除不需要的 SQL 服务器错误,并使用仪表条指示我的启动过程的进展(随着查询激活和表单创建而进展)。
所以当连接字符串不对时,我会得到
的错误Login failed for user 'admin98'
(admin98 是 SQL 服务器用户的名称);当连接字符串正常时,仪表条会继续,在中途我再次遇到同样的错误。
注意:我使用了 freeInstance
或 NewInstance
或其他类似的东西,但没有用。
这是连接到数据库并在遇到错误时捕获错误的函数
function DBConnect: Boolean;
var
conStr : string;
begin
conStr:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=admin'+Fstart_.year_combobox.Text+';PassWord=000;Initial Catalog=student'+Fstart_.year_combobox.Text+';Data Source='+Fstart_.StringTemp+';';
DataModule1.ADOConnection1.Close;
DataModule1.ADOConnection1.ConnectionString:= conStr;
DataModule1.ADOConnection1.LoginPrompt:= False;
if (NOT DataModule1.ADOConnection1.Connected) then
begin
try
DataModule1.ADOConnection1.Open;
Result:= True;
Except on E:Exception do
begin
if e.Message = 'Login failed for user '+chr(39)+'admin'+Fstart_.year_combobox.Text+chr(39) then
//showmessage
if e.Message = '[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied' then
//showmessage
DataModule1.ADOConnection1.Close;
DataModule1.ADOConnection1.ConnectionString:= '';
Result:= False;
end;
end;
end;
end;
问题是它必须工作,我不应该重新启动应用程序,所以我需要在连接之前进行测试或重置整个连接。
我希望连接成功,但即使我更改组合框值并且我知道用户存在于 SQL 服务器
中,我还是再次收到错误这个答案对我有用,我发现我需要 5 秒 sleep
从 RAM
function DBConnect: Boolean;
var
conStr : string;
begin
ini:= TMemIniFile.Create(GetCurrentDir + '\Settings.ini');
Fstart_.StringTemp:= ini.ReadString('Server Directory', 'Server Name', KeyFileString);
Application.CreateForm(TDataModule1, DataModule1);
DataModule1.ADOConnection1.Close;
conStr:= 'Provider=SQLOLEDB.1;Persist Security Info=False;User ID=admin'+Fstart_.year_combobox.Text+';PassWord=123;Initial Catalog=darman'+Fstart_.year_combobox.Text+';Data Source='+Fstart_.StringTemp+';';
DataModule1.ADOConnection1.ConnectionString:= conStr;
DataModule1.ADOConnection1.LoginPrompt:= False;
try
DataModule1.ADOConnection1.Open;
Result:= True;
Except on E:Exception do
begin
if e.Message = 'Login failed for user '+chr(39)+'admin'+Fstart_.year_combobox.Text+chr(39) then
// Showmessage
[mbOK],0);
if e.Message = '[DBNETLIB][ConnectionOpen (Connect()).]SQL Server does not exist or access denied' then
// ShowMessage
DataModule1.ADOConnection1.Close;
DataModule1.Destroy;
Sleep(5000);
end;
end;
end;