AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken SQL-Server auflisten dauert lange

SQL-Server auflisten dauert lange

Ein Thema von rawi · begonnen am 28. Jun 2020 · letzter Beitrag vom 29. Jun 2020
Antwort Antwort
rawi

Registriert seit: 16. Mär 2010
Ort: im Westen Deutschlands
38 Beiträge
 
Delphi 2010 Professional
 
#1

SQL-Server auflisten dauert lange

  Alt 28. Jun 2020, 13:43
Datenbank: SQL-Server • Version: ab 2012 • Zugriff über: -
Hallo Delphi-Gemeinde,

ich möchte mich heute mit einem (hoffentlich) kleinen Problem an euch wenden. Leider habe ich bisher keine Lösung oder Erklärung für mein Problem gefunden.

Ich habe folgende Routine in mein Programm eingebaut.

Delphi-Quellcode:
procedure TfrmMain.ListAvailableSQLServers(Names: TStringList);
  {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
  function PtCreateADOObject(const ClassID: TGUID): IUnknown;
  var
    Status: HResult;
    FPUControlWord: Word;
  begin
    asm
      FNSTCW FPUControlWord
    end;
    Status := CoCreateInstance(
                CLASS_Recordset,
                nil,
                CLSCTX_INPROC_SERVER or
                CLSCTX_LOCAL_SERVER,
                IUnknown,
                Result);
    asm
      FNCLEX
      FLDCW FPUControlWord
    end;
    OleCheck(Status);
  end;
  {- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - }
var
  RSCon: ADORecordsetConstruction;
  Rowset: IRowset;
  SourcesRowset: ISourcesRowset;
  SourcesRecordset: _Recordset;
  SourcesName, SourcesType: TField;
begin
  SourcesRecordset := PtCreateADOObject(CLASS_Recordset) as _Recordset;
  RSCon := SourcesRecordset as ADORecordsetConstruction;
  SourcesRowset := CreateComObject(ProgIDToClassID('SQLOLEDB Enumerator')) as ISourcesRowset;
  OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset)));
  RSCon.Rowset := RowSet;
  with TADODataSet.Create(nil) do
  try
    Recordset := SourcesRecordset;
    SourcesName := FieldByName('SOURCES_NAME');
    SourcesType := FieldByName('SOURCES_TYPE');
    Names.BeginUpdate;
    Names.Clear;
    try
      while not EOF do
      begin
        if (SourcesType.AsInteger = DBSOURCETYPE_DATASOURCE) and (SourcesName.AsString <> '') then
          Names.Add(SourcesName.AsString);
          Next;
      end;
    finally
      Names.EndUpdate;
    end;
  finally
    Free;
  end;
end;
Hat bisher auch super auf mehreren Rechnern funktioniert. Vor einiger Zeit startete das Programm auf einem Rechner sehr langsam. Auf allen anderen Rechnern startete das Programm wie gewohnt. Bisher jedenfalls. Mittlerweile ist der Programmstart auf allen Rechnern langsam.

Der Grund für den langsamen Start ist wohl die folgende Programmzeile.

OleCheck(SourcesRowset.GetSourcesRowset(nil, IRowset, 0, nil, IUnknown(Rowset)));

Die Ausführung dieses Befehls dauert 45 sekunden. Vorher wurde das kpl. Programm in ca. 5-10 sekunden gestartet.

An den einzelnen Rechnern wurde eigentlich nichts verändert. Normale Win 10 Pro Rechner, mit unterschiedlichen Virenprogrammen (MS und Norton) und unterschiedlichen Office-Paketen (2010 bis Office 365). Lediglich die Windowsupdates wurden installiert.

Nun meine Frage, hat jemand eine Idee wo das Problem liegen könnte?

Vorab schon mal vielen Dank.
Gruß Rainer
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
16.666 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#2

AW: SQL-Server auflisten dauert lange

  Alt 28. Jun 2020, 16:27
Entweder Windows-Update das MS hier in dem Bereich etwas Korrigiert hat
Netzwerk-Timesouts die aktuell zuschlagen
Virenscanner die etwas "übermotiviert" in dem Bereich arbeiten.
Windows Vista - Eine neue Erfahrung in Fehlern.
  Mit Zitat antworten Zitat
rawi

Registriert seit: 16. Mär 2010
Ort: im Westen Deutschlands
38 Beiträge
 
Delphi 2010 Professional
 
#3

AW: SQL-Server auflisten dauert lange

  Alt 29. Jun 2020, 17:27
Hallo Bernhard,

vielen Dank für die Rückmeldung. Die Windowsupdates hatte ich auch schon in Verdacht. Die zwei anderen Tips würde ich mal ausschließen. Auf den getesteten Rechnern laufen unterschiedliche Virenprogramme. Bei meinem lokalen Rechner mit installierten SQL-Express habe ich den Virensanner testweise deaktiviert. Leider ohne eine Verbesserung festzustellen.

Wegen der Updates muss ich mir mal Gedanken machen, wäre aber dankbar für weitere Anregungen.
Gruß Rainer
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
36.127 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: SQL-Server auflisten dauert lange

  Alt 29. Jun 2020, 17:59
Eine Alternative wäre was anderes als ADO zu benutzen und zu hoffen dass es schneller ist.
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:56 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf