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

Вниз

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

 
.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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.48 MB
Время: 0.006 c
1-92097
-=GaLaN=-
2003-08-14 16:18
2003.08.28
Возвращение данных функцией из dll


3-92064
Relaxxx
2003-08-02 16:02
2003.08.28
Popup Menu на DBGrid


6-92140
zeugene
2003-06-22 15:49
2003.08.28
IntraWeb 5.1 и ADO


6-92158
Hogo
2003-06-03 12:17
2003.08.28
Объект на основе TIdConnectionIntercept


3-92003
Maxim E. Lobanov
2003-08-06 04:23
2003.08.28
Проблема при поиске по дате





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