View Full Version : تشخیص وجود SQL SERVER در دستگاه مشتری
  
kheyri
شنبه 05 اسفند 1385, 16:38 عصر
سلام دوستان
چطوری میشه توسط دلفی تشخیص داد که SQL SERVER روی دستگاه نصب هست یا نه. توی سایت جستجو کردم ولی جواب شفافی پیدا نکردم. بعضی از دوستان Try ..Except رو پیشنهاد کرده بودند ولی خیلی روشن نبود که دقیقا کدوم Except  رو باید کنترل کرد. اگر امکان داره در این زمینه راهنمایی بفرمائید.
ممنون
mzjahromi
شنبه 05 اسفند 1385, 19:46 عصر
قبلا همینجا کد شناسائی Instance های موجود در شبکه رو دیده بودم یه جستجو بکن  پیداش می کنی
babak869
شنبه 05 اسفند 1385, 21:53 عصر
یک راهش اینه که شما چک کنید آیا سرویس  SQL.Exe  در حال اجراست یا خیر .برای این منظور هم میتونید از نمونه برنامه ای بنام  Kill Task  که در سایت هست استفاده کنید و نصب و در حال اجرا بودن این سرویس رو چک کنید . البته این به شرطیه که اجرای سرویس مذکور اتوماتیک باشه و اگه کاربر اونو  Manual  کرده باشه این روش ممکنه جواب نده
موفق باشید
sasan_vm
یک شنبه 06 اسفند 1385, 12: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, 03:00 صبح
http://www.barnamenevis.org/forum/showthread.php?t=51574
Mah
دوشنبه 07 اسفند 1385, 09:59 صبح
سلام 
من از رجیستری استفاده می کنم . در لیست نرم افزارهای نصب شده چک می کنم که آیا SQLServer نصب شده است یا نه .(کلید آن وجود دارد یا نه)
موفق باشید .
Sohrab_Tapar
سه شنبه 22 اسفند 1385, 12: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.