View Full Version : تشخیص وجود SQL SERVER در دستگاه مشتری
kheyri
شنبه 05 اسفند 1385, 15:38 عصر
سلام دوستان
چطوری میشه توسط دلفی تشخیص داد که SQL SERVER روی دستگاه نصب هست یا نه. توی سایت جستجو کردم ولی جواب شفافی پیدا نکردم. بعضی از دوستان Try ..Except رو پیشنهاد کرده بودند ولی خیلی روشن نبود که دقیقا کدوم Except رو باید کنترل کرد. اگر امکان داره در این زمینه راهنمایی بفرمائید.
ممنون
mzjahromi
شنبه 05 اسفند 1385, 18:46 عصر
قبلا همینجا کد شناسائی Instance های موجود در شبکه رو دیده بودم یه جستجو بکن پیداش می کنی
babak869
شنبه 05 اسفند 1385, 20:53 عصر
یک راهش اینه که شما چک کنید آیا سرویس SQL.Exe در حال اجراست یا خیر .برای این منظور هم میتونید از نمونه برنامه ای بنام Kill Task که در سایت هست استفاده کنید و نصب و در حال اجرا بودن این سرویس رو چک کنید . البته این به شرطیه که اجرای سرویس مذکور اتوماتیک باشه و اگه کاربر اونو Manual کرده باشه این روش ممکنه جواب نده
موفق باشید
sasan_vm
یک شنبه 06 اسفند 1385, 11:06 صبح
سلام
من از توابع LAN Manager Functions استفاده می کنم ، تا به حال هم مشکلی نداشته و
درست کار میکنه.
کدی که میفرستم با BCB نوشتم ولی تبدیل آن به Delphi اصلا مشکل نیست :چشمک:
//---------------------------------------------------------------------------
void ListAvailableServers(const DWORD ServerType, TStrings * ServerNames)
{
PWideChar PDomainUnicode;
SERVER_INFO_101 * ServerInfo = NULL;
DWORD EntriesRead, ResumeHandle, TotalEntries, errCode;
ResumeHandle = 0;
PDomainUnicode = NULL;
errCode = NetServerEnum(
NULL, 101, (unsigned char**)&ServerInfo,
sizeof(SERVER_INFO_101) * MAXSRVR, &EntriesRead,
&TotalEntries, ServerType, PDomainUnicode, &ResumeHandle);
if ( errCode == NERR_SUCCESS )
{
try
{
ServerNames->Clear();
for ( DWORD i = 1; i <= EntriesRead; i++ )
{
ServerNames->Add(ServerInfo->sv101_name);
ServerInfo++;
}
}
__finally
{
NetApiBufferFree(ServerInfo);
}
}
}
//---------------------------------------------------------------------------
// روش استفاده
void __fastcall TFormCnt2::FormCreate(TObject *Sender)
{
ListAvailableServers(SV_TYPE_SQLSERVER, ComboBoxServer->Items);
}
//---------------------------------------------------------------------------
vcldeveloper
دوشنبه 07 اسفند 1385, 02:00 صبح
http://www.barnamenevis.org/forum/showthread.php?t=51574
Mah
دوشنبه 07 اسفند 1385, 08:59 صبح
سلام
من از رجیستری استفاده می کنم . در لیست نرم افزارهای نصب شده چک می کنم که آیا SQLServer نصب شده است یا نه .(کلید آن وجود دارد یا نه)
موفق باشید .
Sohrab_Tapar
سه شنبه 22 اسفند 1385, 11:34 صبح
با این کد میتونین لیست instance های نصب شده رو از رجیستری بدست بیارین
procedure TMainForm.SQLInstances(var Instances: TStrings);
Var
reg : TRegistry;
Buf : Pointer;
BufSize: Integer;
begin
If Instances = nil Then
Instances := TStringList.Create;
reg := TRegistry.Create;
try
reg.RootKey := HKEY_LOCAL_MACHINE;
If (reg.OpenKey('\SOFTWARE\Microsoft\Microsoft SQL Server',False))AND(reg.ValueExists('InstalledInsta nces')) Then Begin
BufSize := reg.GetDataSize('InstalledInstances');
GetMem(Buf, BufSize);
reg.ReadBinaryData('InstalledInstances', Buf^, BufSize);
try
GetDoubleNullStrings(Buf, Instances);
finally
FreeMem(Buf);
End;
End
Else Begin//sql server is not installed
End;
Finally
reg.Free;
End;
end;
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.