uses
ComObj;
function OpenConnection(ConnectionString: AnsiString): Integer;
var
ADODBConnection: OleVariant;
begin
ADODBConnection := CreateOleObject('ADODB.Connection');
ADODBConnection.CursorLocation := 3; // User client
ADODBConnection.ConnectionString := ConnectionString;
Result := 0;
try
ADODBConnection.Open;
except
Result := -1;
end;
end;
function DataBaseConnection_Test(bMessage: Boolean): AnsiString;
var
asTimeout, asUserName, asPassword, asDataSource, ConnectionString: AnsiString;
iReturn: Integer;
OldCursor: TCursor;
begin
OldCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
asTimeout := '150';
asUserName := 'NT_Server';
asPassword := 'SA';
asDataSource := 'SQL Server - My DataBase';
ConnectionString := 'Data Source = ' + asDataSource +
'User ID = ' + asUserName +
'Password = ' + asPassword +
'Mode = Read|Write;Connect Timeout = ' + asTimeout;
try
iReturn := OpenConnection(ConnectionString);
if (bMessage) thenbeginif (iReturn = 0) then
Application.MessageBox('Connection OK!', 'Information', MB_OK)
elseif (iReturn = -1) then
Application.MessageBox('Connection Error!', 'Error', MB_ICONERROR +
MB_OK);
end;
if (iReturn = 0) then
Result := ConnectionString
elseif (iReturn = -1) then
Result := '';
finally
Screen.Cursor := OldCursor;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
DataBaseConnection_Test(True);
end;
Here's a translation of the text into Russian:
Функция подключения ADO
Функция OpenConnection создает экземпляр объекта ADODB-connection, настраивает его свойства (локация курсора и строка подключения) и пытается открыть соединение. Если это удалось, она возвращает 0; если нет, то -1.
Использование вызова CreateOleObject для создания COM-объекта можно улучшить с помощью функции CoCreateInstance.
Обработка ошибок может быть улучшена за счет ловли конкретных исключений вместо просто повторения исключения с помощью Result := -1.
Рассмотрите добавление дополнительной логики или сообщений об ошибках для предоставления более информации о том, что пошло не так.
Тестирование подключения к базе данных
Функция DataBaseConnection_Test является оберткой вокруг функции OpenConnection, которая проверяет успешность соединения. Если это удалось, она возвращает строку подключения; если нет, то пустую строку.
Функция использует много магических строк (например, 'Data Source = ' + asDataSource), которые можно улучшить с помощью констант или отдельного файла настройки.
Рассмотрите добавление более robust обработки ошибок для случаев, когда строка подключения недействительна или не может быть открыта.
Использование вызовов Application.MessageBox для отображения сообщений можно улучшить с помощью более современной и платформо-независимой методики (например, использования третьей-сторонней библиотеки).
Другие предложения
Рассмотрите использование более современного API для баз данных (например, DBX), который легче использовать и более эффективен, чем ADO.
Код использует тип AnsiString, который можно улучшить с помощью типа UnicodeString.
Код может получить пользу от дополнительных комментариев и документации для объяснения, что каждая функция делает и как она работает.
Обновленная версия кода
Вот обновленная версия кода, которая включает некоторые из этих предложений:
usesComObj,DBX;functionOpenConnection(ConnectionString:UnicodeString):Integer;varADODBConnection:OleVariant;beginADODBConnection:=CoCreateInstance('ADODB.Connection');ADODBConnection.CursorLocation:=3;// User clientADODBConnection.ConnectionString:=ConnectionString;Result:=0;tryADODBConnection.Open;exceptonE:ExceptiondobeginResult:=-1;Writeln(Format('Error opening connection: %s',[E.Message]));end;end;end;functionDataBaseConnection_Test(bMessage:Boolean):UnicodeString;varasTimeout,asUserName,asPassword,asDataSource,ConnectionString:UnicodeString;iReturn:Integer;beginConnectionString:=Format('Data Source=%s;User ID=%s;Password=%s;',[asDataSource,asUserName,asPassword]);tryiReturn:=OpenConnection(ConnectionString);ifbMessagethenbeginifiReturn=0thenApplication.MessageBox('Connection OK!','Information',MB_OK)elseifiReturn=-1thenApplication.MessageBox('Connection Error!','Error',MB_ICONERROR+MB_OK);end;ifiReturn=0thenResult:=ConnectionStringelseifiReturn=-1thenResult:='';finally// Удалите курсор на экранеend;end;procedureTForm1.Button1Click(Sender:TObject);beginDataBaseConnection_Test(True);end;
Обратите внимание, что это только одна из возможных версий улучшения кода, и есть много других способов сделать это.
В статье описывается пример кода на Delphi, который демонстрирует создание ADO-connection к базе данных SQL Server с использованием компонента ADODB.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS
Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.