Page 1 of 2 1 2 LastLast
Results 1 to 15 of 20

Thread: Is MS SQL Server in de lucht

  1. #1

    Is MS SQL Server in de lucht

    Bij gebruik van ADO Connectionstring krijg ik een melding "Invalid connection string attribute".
    Ondanks dat deze mededeling correct is, is dit voor de gebruiker een heel onduidelijke mededeling. Wat ik wil doen is eerst kijken of de MS SQL server (v.2000)wel on line is en daarna of de database in die server aanwezig is.

    Vragen:
    1) Hoe kan ik checken of de MS Sql Server gereed is (online en gestart)
    2) Hoe kan ik bij een online MS Sql server checken of de database bestaat
    a Delphi User

  2. #2
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Kun je niet beter een Try..Except..End om het moment dat je de ADOConnection wil verbinden? Op het moment dat je een fout afvangt geef je een gebruikersvriendelijke foutmelding..
    !

  3. #3
    Dat is inderdaad een heel goede manier. Behalve wordt deze foutmelding ook gegeven als er iets anders fout is in de connection string behalve een verkeerde server of verkeerde database.

    M.a.w. ik wil de gebruiker eerst vertellen dat de MS Sql server met de naam "...." niet op het netwerk beschikbaar is. Indien deze wel beschikbaar is dan wil ik de gebruiker vertellen dat de gekozen database met de naam "...." niet op de sql server aanwezig is.

    Dit manier van werken bezorgt minder support vragen, omdat de applicatie al aangeeft waar het fout gaat.
    a Delphi User

  4. #4
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Waarschijnlijk wordt per foutmelding wel een andere Exception type gemaakt, dus kijk even welk Exception type je krijgt als de fout "Invalid connection string attribute" zich voordoet...

    Exception type = b.v. EConvertError

    Het Exception type staat ook in de foutmelding
    !

  5. #5
    N.a.v. jouw antwoord heb ik dit even getest. Ik ontvang een TOleException ( waarschijnlijk doordat ADO via Ole werkt). Dit brengt mij dus ook niet verder.
    Bedankt voor het meedenken.
    a Delphi User

  6. #6
    TCustomBuild Rob Bos's Avatar
    Join Date
    Jan 2003
    Location
    Eindhoven
    Posts
    4,213
    We hebben hier op het werk wel een unit die tegen de odbc32.dll praat en zo allerlei info van "welke servers op het netwerk" en "welke databases in een server" ophaalt, maar ik weet niet of ik die zomaar aan je zou kunnen geven. Ik zal zo direct eens voor je nagaan. Ik heb ook al ge-googled voor je op het internet, maar ik kan zo niets over deze library vinden. Zoek anders zelf ook nog eens verder met de odbc32.dll. Daarmee moet je iig de benodigde info kunnen ophalen.

  7. #7
    notice-itter SvG's Avatar
    Join Date
    Apr 2002
    Location
    's-Hertogenbosch
    Posts
    4,865
    Inderdaad,

    het is niet zo'n nette oplossing maar als de foutmelding altijd in het engels is/altijd hetzelfde is dan zou je kunnen kijken naar de foutmelding zelf ( ie. de tekst )

    Die krijg je met
    Code:
      try
    
      except
        On E: Exception do
           Showmessage( E.Message );
      end;
    Last edited by Dees; 31-Aug-04 at 18:56.
    !

  8. #8

  9. #9
    Ik zou denken dat je (met Indy bijvoorbeeld) kunt controleren of je vervinding kunt maken met de host op poort 1433 (de standaard MS SQL server poort). Als dat lukt kun je er volgens mij redelijk vanuit gaan dat je server draait.
    Marcel

  10. #10
    Check ook SQL-DMO in de SQL Server help. Er zijn gewoon DMO (Database Management Objects) beschikbaar waarmee je o.a:
    - je hele netwerk kan laten doorzoeken op instances van SQL Server;
    - kan controleren of een specifieke SQL Server instantie up is;
    - een SQL Server instantie die niet gestart is, kan starten
    en nog meer van deze leuke truukjes. Alles binnen handbereik na het importeren van de TLB

    Overigens krijg je van ADO altijd EOLEExceptions terug, dus aan het type Exception kan je niet teveel waarde hechten.

  11. #11
    Senior Member Henk Schreij's Avatar
    Join Date
    Sep 2002
    Location
    Heino (Raalte)
    Posts
    1,465
    Eric, je vroeg:
    1) Hoe kan ik checken of de MS Sql Server gereed is (online en gestart)
    2) Hoe kan ik bij een online MS Sql server checken of de database bestaat

    Ad 2)
    Wil je controleren of een bepaalde Database bestaat binnen MS Sql Server,
    dan kan dat door de kolom "name" uit te lezen van
    master.dbo.sysdatabases.

    Ik gebruik dat om een lijstje van (windows) users te maken voor een bepaalde database,
    waarvoor ik master.dbo.sysprocesses via "dbid" als INNER JOIN koppel aan sysdatabases.
    Natuurlijk met uitsluiting van nt_username = '' (leeg) en nt_username = 'SYSTEM', want die spid's wil ik niet zien.

    Ad 1)
    Dat test ik via een try-except met een nette foutboodschap bij het openen van de ADOConnection, zoals ook SvG voorstelt. De precieze fout is daarmee niet bekend, maar dat is voor mijn toepassing niet belangrijk.

  12. #12
    Ad2) Dat is een hele mooie oplossing.
    Ad1) Wat minder mooi. Ik wil graag SQL-DMO gebruiken en ga waarschijnlijk wat zitten proberen met de voorbeelden gevonden op:

    http://fsilva.online.pt/node/view/7

    Indien er reeds fora-lezers zijn die hiermee al ervaring hebben, dan lees ik dit graag in deze thread.
    Bedankt voor alle antwoorden tot nu toe.
    a Delphi User

  13. #13
    Ik heb getest met de volgende routine:

    Code:
    // Get available MS SQL server
    procedure TdmDatabaseConnectie.GetAvailableServers ( aServerList : TStringList);
    // Use ComObj in ur uses clause.
    var
      objList : OleVariant;
      iCount: Integer;
      obj : OleVariant;
    begin
      obj := CreateOleObject('SQLDMO.Application');
      objlist := obj.ListAvailableSQlServers;
      for iCount := 1 to objList.Count  do
      begin
        aServerList.Add(objList.Item(iCount));
      end;
    end;
    Als ik deze aanroep met:

    Code:
    procedure TfrmHoofdmenuCIS.Button3Click(Sender: TObject);
    var
      lOK : boolean;
      sMsg : string;
      slString : TStringlist;
    begin
      lOK := true;
      slString := TStringlist.Create;
      if lOK then dmDatabaseConnectie.GetAvailableServers(slString);
      ListBox1.Items.Assign(slString);
      slString.Free;
      if (not lOK) then FoutMelding(sMsg);
    end;
    Dan krijg ik een foutmelding

    OleSysError with message 'Ongeldige klassereeks'.

    Moet ik nog een type library toevoegen, en weet iemand hoe dat moet met Delphi 6?
    a Delphi User

  14. #14
    Old Navigator Matthijs's Avatar
    Join Date
    Mar 2001
    Location
    Ede, NL. Delphi: Delphi 7/2005 :). Matthijs schrijf je Matthijs
    Posts
    2,199
    je kunt ook gewoon een TStrings meegeven. Je declaratie wordt dan:
    Code:
    procedure TdmDatabaseConnectie.GetAvailableServers ( aServerList : TStrings);
    en het gebruik iets als:
    Code:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
      GetAvailableServers(ListBox1.Items);
    end;
    Als ik dat hier doe krijg ik als resultaat:
    (local)
    192.168.0.1
    192.168.0.2
    Toch niet helemaal mijn SQLserver lijstje

    [Edit] Moet ik er wel tStrings van maken.
    Last edited by Matthijs; 08-Sep-04 at 18:31.
    What's in a sig?

    Would my posting be less valuable if it didnot have a sig? (Vrij naar William S.)

    Let op de kleine lettertjes. For all postings: e&oe!
    This program performed an illegal function, the police are on their way

  15. #15
    SillyMember
    Join Date
    May 2003
    Location
    Gent
    Posts
    7,725
    Zoiets?
    Code:
    uses ComObj;
    
    function ISSQLServer(const AServer: string): Boolean;
    var
      SQLDMO : OleVariant;
    begin
      SQLDMO := CreateOleObject('SQLDMO.SQLServer');
      SQLDMO.LoginSecure := True;
      SQLDMO.LoginTimeOut := 20;
      Result := True;
      try
       SQLDMO.Connect(AServer);
      except
        Result := False;
      end;
      SQLDMO.DisConnect;
    end;
    All methodologies are based on fear. -- Kent Beck.

Page 1 of 2 1 2 LastLast

Thread Information

Users Browsing this Thread

There are currently 1 users browsing this thread. (0 members and 1 guests)

Similar Threads

  1. COM DLL als COM+ onder IIS + SQL Server
    By Paul-Jan in forum Koffiehoek
    Replies: 17
    Last Post: 16-Jul-04, 18:02
  2. Date-time in SQL (zonder Delphi parameters)
    By Baldo in forum Databases
    Replies: 16
    Last Post: 14-Jan-04, 16:23
  3. Host_name() Sql Server problemen
    By Link in forum Databases
    Replies: 5
    Last Post: 26-May-03, 19:11

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •