Главная страница
    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
14-15236
laza admin
2002-12-14 23:52
2003.01.06
Люди срочно надо до понедельника составить на паскале прогу, кото


3-14944
Botcha
2002-12-14 13:41
2003.01.06
MS Access&Delphi


3-14896
volph7777
2002-12-12 13:31
2003.01.06
как разделять SQL-запросы в TQuery?


14-15248
Sergo
2002-12-16 12:07
2003.01.06
Фильтр низжших частот


14-15242
der
2002-12-15 15:27
2003.01.06
DBGrid с нормальным мультиселектом.





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