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

Вниз

Как выбрать сервер?   Найти похожие ветки 

 
.alex   (2003-08-03 17:14) [0]

У меня есть клиент, который работает с MS SQL Server. Вопрос: Как мне сделать диалог выбора сервера из списка возможных, для того чтобы программно сделать ConnectionString.


 
Dred2k ©   (2003-08-03 17:50) [1]

Ну так позволь формировать список доступных серверов и сделай диалог выбора.


 
.alex   (2003-08-03 20:52) [2]

Т.е нужно использовать WNetХХХ функции, для получения списка северов?


 
Dred2k ©   (2003-08-03 21:10) [3]

Ты в автомате хочешь?
Тогда сканируй ip-сеть по портам, которые предназначены в MS SQL для определения наличия сервера. Если есть более красивые варианты (сейчас тебе и мне о них расскажут), то воспользуйся этими штатными (?) средствами.
Или просто дай юзеру возможность "добавить", "удалить", "отредактировать", "выбрать" сервер (его полное описание, разумеется).


 
.alex   (2003-08-03 23:16) [4]

Хотелось бы конечно "автоматом", ну если никто не скажет, буду делать делать "в лоб"...


 
sniknik ©   (2003-08-04 01:30) [5]

штатных средств нет (если имеете ввиду компонент штоб ложить на форму)
можеш сканировать сеть на открытие порта в TCP/IP "default port is 1433". с определенной долей вероятности SQL server на машине с открытым портом будет стоять. (могли поменять порт/убрать протоком и т.д.)

или можеш устанавливать на машине с программой SQLDMO которое примерно этим и занимается. обращайся к его методам.

хотя может ты пытаешся сделать то что уже есть в симтеме, имею ввиду PromptDataSource (кстати тоже при неустановленом SQLDMO сервера не показывает).


 
NAlexey ©   (2003-08-04 10:49) [6]

Можно так...

var
Buf : array[0..MAXBUFENUMSIZE - 1] of char;
N: word;
Res: Integer;
S: String;
I, ActualEnum: Integer;
begin
Res := dbserverenum(LOC_SEARCH or NET_SEARCH, Buf, MAXBUFENUMSIZE, @N);
if Res = ENUM_SUCCESS then
begin
S := "";
ActualEnum := 0;
for I := 0 to MAXBUFENUMSIZE - 1 do
begin
if Buf[I] <> #0
then
S := S + buf[I]
else begin
List.Add(S);
( ActualEnum)
Можно так...

var
Buf : array[0..MAXBUFENUMSIZE - 1] of char;
N: word;
Res: Integer;
S: String;
I, ActualEnum: Integer;
begin
Res := dbserverenum(LOC_SEARCH or NET_SEARCH, Buf, MAXBUFENUMSIZE, @N);
if Res = ENUM_SUCCESS then
begin
S := "";
ActualEnum := 0;
for I := 0 to MAXBUFENUMSIZE - 1 do
begin
if Buf[I] <> #0
then
S := S + buf[I]
else begin
List.Add(S);
Inc(ActualEnum);
if ActualEnum = N then
break;
S := "";
end;
end;
end;
end;


 
NAlexey ©   (2003-08-04 10:55) [7]

Ну если быть точным то так...

function dbserverenum(SearchMode: word; servnamebuf: PChar;
sizeservnamebuf:word; numentries: pword): Integer; cdecl; external "ntwdblib.dll";

procedure TForm1.Button1Click(Sender: TObject);
const
MAXBUFENUMSIZE =1024;
LOC_SEARCH =1;
NET_SEARCH =2;
ENUM_SUCCESS =$0;
var
Buf : array[0..MAXBUFENUMSIZE - 1] of char;
N: word;
Res: Integer;
S: String;
I, ActualEnum: Integer;
begin
Res := dbserverenum(LOC_SEARCH or NET_SEARCH, Buf, MAXBUFENUMSIZE, @N);
if Res = ENUM_SUCCESS then
begin
S := "";
ActualEnum := 0;
for I := 0 to MAXBUFENUMSIZE - 1 do
begin
if Buf[I] <> #0
then
S := S + buf[I]
else begin
Memo1.Lines.Add(S);
( ActualEnum)
Ну если быть точным то так...

function dbserverenum(SearchMode: word; servnamebuf: PChar;
sizeservnamebuf:word; numentries: pword): Integer; cdecl; external "ntwdblib.dll";

procedure TForm1.Button1Click(Sender: TObject);
const
MAXBUFENUMSIZE =1024;
LOC_SEARCH =1;
NET_SEARCH =2;
ENUM_SUCCESS =$0;
var
Buf : array[0..MAXBUFENUMSIZE - 1] of char;
N: word;
Res: Integer;
S: String;
I, ActualEnum: Integer;
begin
Res := dbserverenum(LOC_SEARCH or NET_SEARCH, Buf, MAXBUFENUMSIZE, @N);
if Res = ENUM_SUCCESS then
begin
S := "";
ActualEnum := 0;
for I := 0 to MAXBUFENUMSIZE - 1 do
begin
if Buf[I] <> #0
then
S := S + buf[I]
else begin
Memo1.Lines.Add(S);
Inc(ActualEnum);
if ActualEnum = N then
break;
S := "";
end;
end;
end;
end;


 
.alex   (2003-08-04 14:12) [8]

2NAlexey: что-то твоя функция какой-то мусор выдаёт, почему?


 
sniknik ©   (2003-08-04 14:26) [9]

.alex (04.08.03 14:12)
а какой мусор?

у меня правильно выдало, правда только 4 сервера из 13-ти, (т.е. только в одной подсети), и кстати по моему эта dll является частью SQLDMO (т.е. без него тоже работать не будет).

попробуй лутше оригинал
function TDMod.GetSQLServers(ServersItems: TStrings): boolean;
var NameList, Application: OleVariant;
i:Integer;
begin
result:= false;
try
try
Application:= CreateOleObject("SQLDMO.Application");
NameList:= Application.ListAvailableSQLServers;
For i:= 1 to NameList.Count do
ServersItems.Add(NameList.Item(i));
result:= true;
except
( E.Message)
.alex (04.08.03 14:12)
а какой мусор?

у меня правильно выдало, правда только 4 сервера из 13-ти, (т.е. только в одной подсети), и кстати по моему эта dll является частью SQLDMO (т.е. без него тоже работать не будет).

попробуй лутше оригинал
function TDMod.GetSQLServers(ServersItems: TStrings): boolean;
var NameList, Application: OleVariant;
i:Integer;
begin
result:= false;
try
try
Application:= CreateOleObject("SQLDMO.Application");
NameList:= Application.ListAvailableSQLServers;
For i:= 1 to NameList.Count do
ServersItems.Add(NameList.Item(i));
result:= true;
except
on E: Exception do DoIfError(E.Message);
end;
finally
//NameList:= Unassigned;
Application:= Unassigned;
end;
end;



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

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

Наверх




Память: 0.49 MB
Время: 0.014 c
3-92043
NewN
2003-08-04 12:40
2003.08.28
Штрих-код, SQL


3-92075
IBSN
2003-07-30 18:54
2003.08.28
Графический редактор + MySql


3-91976
старичок
2003-08-01 11:31
2003.08.28
Помогите SQL запрос


3-92039
Антон Ю.
2003-08-01 14:38
2003.08.28
Fetch All для запросов в FastReport автономных отчетах


14-92173
Dimich1978
2003-08-11 08:58
2003.08.28
Нужен справочник по высшей матемитике