Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.01.06;
Скачать: CL | DM;

Вниз

Как программно создать System DSN для доступа к MSSQL2000?   Найти похожие ветки 

 
Worder   (2002-12-12 08:36) [0]

Господа, ну подскажите, каким же образом это делается.
С возможностью создания алияса сервера. Естесно тоже программно.
На Win2000.

Также приветствуется помощь ссылкой.


 
Севостьянов Игорь ©   (2002-12-12 10:46) [1]

Только не понятно зачем тебе это нужно ?
Ведь, если тебе надо коннектится к серверу можно использовать ADO
Там можно и без DNS обойтись

А лучше работать через SQL API (DBLib)


 
Севостьянов Игорь ©   (2002-12-12 12:17) [2]

Ну, а вот собственно и код создания System ODBC

procedure TForm1.Button1Click(Sender: TObject);
const
keyODBC = "\SOFTWARE\ODBC\ODBC.INI\";
keyODBCINST = "\SOFTWARE\ODBC\ODBCINST.INI\";
keyODBCDrivers = keyODBCINST + "ODBC Drivers\";
keySQLServer = "SQL Server";
keyODBCDataSrcs = "ODBC Data Sources";

vdInstalled = "Installed";
vnDriver = "Driver";
vnDataBase = "DataBase";
vnDescription = "Description";
vnLastUser = "LastUser";
vnServer = "Server";

NewDNSName : string = "NewDNSName";
DataBase : string = "master";
Description : string = "UAIGORS SQL Server";
LastUser : string = "sa";
Server : string = "UAIGORS";
Driver : string = "sqlsrv32.dll";

var
Reg : TRegistry;

begin
Reg := TRegistry.Create;
with Reg do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey(keyODBC, False) and OpenKey(keyODBCINST, False) then
begin
if OpenKey(keyODBCDrivers, False) then
if ReadString(keySQLServer) = vdInstalled then
begin
if not KeyExists(keyODBC + "\" + NewDNSName) then
begin
if OpenKey(keyODBCINST + "\" + keySQLServer, False) then
Driver := ReadString(vnDriver);

if CreateKey(keyODBC + "\" + NewDNSName) then
begin
OpenKey(keyODBC + "\" + NewDNSName, False);
WriteString(vnDataBase, DataBase);
WriteString(vnDescription, Description);
WriteString(vnDriver, Driver);
WriteString(vnLastUser, LastUser);
WriteString(vnServer, Server);
if OpenKey(keyODBC + "\" + keyODBCDataSrcs, False) then WriteString(NewDNSName, keySQLServer);
end
else
MessageBox(0, PChar("Can not create new registry key: "+NewDNSName), "Warning", MB_ICONWARNING);
end
else
MessageBox(0, "This DNS name already exists", "Warning", MB_ICONWARNING);
end
else
MessageBox(0, "SQL Server driver not installed", "Warning", MB_ICONWARNING);
end
else
MessageBox(0, "ODBC not installed", "Warning", MB_ICONWARNING);
finally
Reg.Free;
end;
end;


 
Worder   (2002-12-12 13:03) [3]

Мда...
Круто. Что самое приятное, то, что почти все сразу сработало.
Спасибо, Игорь.

Дело-то в том, что мне нужно еще и кровь из носа, чтобы в качестве Network Libraries для клинтской конфигурации стояло обязательно Named Pipes (в приведенном примере выставляется TCP\IP).

Я конечно покопаюсь дальше сам, но если кому известно, как это сделать, то буду признателен.


 
Севостьянов Игорь ©   (2002-12-12 15:20) [4]

Для этого надо конфигурировать клиента - ща посмотрю ...


 
Севостьянов Игорь ©   (2002-12-12 16:21) [5]

Ну вроже накропал и для Named Pipes (only) + Multi Histance
procedure CreateSystemDNS;
const
keyODBC = "\SOFTWARE\ODBC\ODBC.INI\";
keyODBCINST = "\SOFTWARE\ODBC\ODBCINST.INI\";
keyODBCDrivers = keyODBCINST + "ODBC Drivers\";
keySQLServer = "SQL Server";
keyODBCDataSrcs = "ODBC Data Sources";
keyConnectTo = "\SOFTWARE\Microsoft\MSSQLServer\Client\ConnectTo\";


vdInstalled = "Installed";
vnDriver = "Driver";
vnDataBase = "DataBase";
vnDescription = "Description";
vnLastUser = "LastUser";
vnServer = "Server";

NewDNSName : string = "DNS_SQL2000";
DataBase : string = "master";
Description : string = "UAIGORS SQL Server";
LastUser : string = "sa";
Server : string = "UAIGORS\SQL2000";
Driver : string = "sqlsrv32.dll";

MultiHinst : string = "";
PipeName : string = "DBNMPNTW,\\%s\pipe\%ssql\query";


var
Reg : TRegistry;
begin
Reg := TRegistry.Create;
with Reg do
try
RootKey := HKEY_LOCAL_MACHINE;
if OpenKey(keyODBC, False) and OpenKey(keyODBCINST, False) then
begin
if OpenKey(keyODBCDrivers, False) then
if ReadString(keySQLServer) = vdInstalled then
begin
if not KeyExists(keyODBC + "\" + NewDNSName) then
begin
if OpenKey(keyODBCINST + "\" + keySQLServer, False) then
Driver := ReadString(vnDriver);
//=======
if OpenKey(keyConnectTo, True) then
if Pos("\", Server) <> 0 then
begin
MultiHinst := Trim(Copy(Server, Pos("\", Server)+1, Length(Server)));
WriteString(Server, Format(PipeName,
[Trim(Copy(Server, 1, Pos("\", Server)-1)), "MSSQL$"+MultiHinst+"\"]));
end
else
WriteString(Server, Format(PipeName, [Server, ""]));
//=======
if CreateKey(keyODBC + "\" + NewDNSName) then
begin
OpenKey(keyODBC + "\" + NewDNSName, False);
WriteString(vnDataBase, DataBase);
WriteString(vnDescription, Description);
WriteString(vnDriver, Driver);
WriteString(vnLastUser, LastUser);
WriteString(vnServer, Server);
if OpenKey(keyODBC + "\" + keyODBCDataSrcs, False) then WriteString(NewDNSName, keySQLServer);
end
else
MessageBox(0, PChar("Can not create new registry key: "+NewDNSName), "Warning", MB_ICONWARNING);
end
else
MessageBox(0, "This DNS name already exists", "Warning", MB_ICONWARNING);
end
else
MessageBox(0, "SQL Server driver not installed", "Warning", MB_ICONWARNING);
end
else
MessageBox(0, "ODBC not installed", "Warning", MB_ICONWARNING);
finally
Reg.Free;
end;
end;



Страницы: 1 вся ветка

Текущий архив: 2003.01.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.012 c
8-15161
кондратий
2002-09-16 19:13
2003.01.06
что загрузил ???


14-15251
id_privin
2002-12-15 13:20
2003.01.06
ГОСТ 19.301-79 “Программа и методика испытаний”


3-14918
Vick
2002-12-02 16:26
2003.01.06
Сортировка в TClientDataSet


7-15332
lakich
2002-10-28 15:28
2003.01.06
папка с Виндой


1-15138
hp1100
2002-12-20 20:08
2003.01.06
Загрузка ассоциированных файлов в уже запущенную программу