Главная страница
    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.47 MB
Время: 0.008 c
7-15321
Sirus
2002-10-23 07:12
2003.01.06
Народ... Как узнать что файл копируется кудо-то???


14-15297
OZZY OSBOURNE
2002-12-17 23:01
2003.01.06
Ищу Леля.


3-14958
4x4
2002-12-12 13:32
2003.01.06
Query в Query?


1-14986
Anton Tsvilikh
2002-12-23 21:41
2003.01.06
Вид кнопки вверху окна


1-14975
BaSergey
2002-12-23 18:05
2003.01.06
Как правильно освобождать память из-под COM/ActiveX?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский