Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Базы";
Текущий архив: 2003.01.06;
Скачать: [xml.tar.bz2];

Вниз

Как программно создать 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.57 MB
Время: 0.035 c
14-15299
stone
2002-12-18 11:30
2003.01.06
FAQ для оверклокеров и фрикеров


1-15038
trotski
2002-12-24 06:37
2003.01.06
Самые быстрые парни


1-15089
Александр
2002-12-22 12:23
2003.01.06
Работа с принтером


3-14954
Павка
2002-12-15 05:19
2003.01.06
Ссумирование


14-15221
·•·?c?p·•·
2002-12-14 01:29
2003.01.06
Прога!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский