Announcement

Collapse
No announcement yet.

SQL-DMO auf Kundenrechner nutzen

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • SQL-DMO auf Kundenrechner nutzen

    Hallo

    Ich habe ein Programm geschrieben das SQL-DMO nutzt nun will ich es auf den Kundenrechner zum laufen bringen. Was muß ich installieren ? Es kommt immer die Meldung 'Klasse nicht registriert'. Den SQL Server läuft auf einen anderen Rechner.

  • #2
    Hi,
    <br>
    <br>wenn man auf dem Client Rechner die MS SQL Client-Software installiert sollte es auf jeden fall funktionieren.
    <br>D.h. normales Setup starten und dann die Option Client-Software auswählen. Hier kann man dann auch nur die Zugriffskomponenten auswählen, falls Der Enterprise Manager etc. nicht erwünscht sind.
    <br>
    <br>mfg
    <br>P

    Comment


    • #3
      Hallo

      Erst mal vielen Dank für die Antwort. Ich habe auf den Kundenrechner die Zugriffskomponenten installiert aber es kommt die gleiche Meldung. Nur wenn ich die Client Software mit installiere geht es.
      Gibt es den eine andere möglichkeit ? Da ich beim Kunden eine MSDE installiert habe und er die Client-Software ja nicht installieren darf soweit ich weiß wenn er nicht den SQL-Server kauft.
      Schön währe es auch wenn ich es in das Setup von meinem Programm einbauen könnte

      Comment


      • #4
        Hi,
        <br>
        <br>Was wird denn mit SQL DMO gemacht?
        <br>In welcher Sprache wird denn entwickelt?
        <br>Ist das Phänomen auf einem frisch installierten Rechner reproduzierbar?
        <br>
        <br>mfg
        <br>P

        Comment


        • #5
          Hallo

          Es wird in Delphi entwickelt. Ich mache über den SQL DMO das ich mir alle verfügbaren SQL Server auflisten lasse und erstelle darüber Datenbank und Tabelle. Ich habe am Wochenende ein neu installiertes Win98 und Win 2000 System ausprobiert und bei beiden ist es das gleiche wie beim Kunden.

          mfg
          Pasca

          Comment


          • #6
            Hallo,

            &gt;Der SQL Server läuft auf einen anderen Rechner.

            wie sieht ein kurzes Beispiel aus? Wenn die MSDE nicht auf dem eigenen Rechner installiert ist, kann das eigene Delphi-Programm ja nur den Zugriff über DCOM versuchen. Allerdings greifen hier die DCOM-Rechte, so dass die Fehlermeldung "Klasse nicht registriert" in diesem Fall nichts mit der MSDE zu tun hat, sondern mit dem SCM vom DCOM.

            &gt;..wenn ich es in das Setup von meinem Programm einbauen könnte.

            Dieser Teil des Setups muss dann nur auf dem Rechner gestartet werden, auf dem die MSDE läuft. Da es sich dann um einen lokalen COM-Zugriff handelt, bleibt das Sicherheitssystem des SCM außen vor

            Comment


            • #7
              Hallo

              Hier habe ich mal ein Teil wo ich es benutze.

              <PRE>
              var
              MSSQLApp: _Application;
              SrvList: NameList;
              i: Integer;
              begin
              frmLadeHinweis := TfrmLadeHinweis.Create(self);
              frmLadeHinweis.Show;
              frmLadeHinweis.Repaint;
              cbSQLServer.Clear;
              MSSQLApp := CoApplication.Create;
              SrvList := MSSQLApp.ListAvailableSQLServers;
              for i := 1 to SrvList.Count do
              cbSQLServer.Items.Add(SrvList.Item(i));
              MSSQLApp := nil;
              if SrvList.Count > 0 then
              btSave.Enabled := True
              else
              begin
              cbSQLServer.Items.Add('Kein SQL-Server gefunden');
              cbSQLServer.ItemIndex := 0;
              end;
              frmLadeHinweis.Release;
              </PRE>

              Wo muß ich den was einstellen um das mit dem DCOM hinzubekommen ?
              Was mich nur wundert ist das wenn ich den Enterprise Manager installiere geht alles wunderbar. Oder wird bei der Installation des Enterprise Manger was an DCOM konfiguriert ?

              mfg
              Pasca

              Comment


              • #8
                Hallo,

                &gt;..wenn ich den Enterprise Manager installiere geht alles wunderbar..

                der Enteprise Manager verwendet ebenfalls SQLDMO für den Zugriff auf die Server-Instanzen.

                &gt;..um das mit dem DCOM hinzubekommen

                Anstelle von <i>CoApplication.Create</i> wird die Funktion <i>MSSQLApp := CoApplication.<b>CreateRemote('Servername')</b></i> genutzt. Allerdings müssen für den Zugriff über die frühe Bindung zwei Bedingungen erfüllt sein: <br>
                1. Die Typbibliothek von SQLDMO muss auf dem Client-Rechner registriert werden <br>
                2. Die Zugriffsrechte auf den DCOM-Server (SQLDMO-Objekte der MSDE) müssen konfiguriert werden.

                Es gibt aber noch einen dritten Weg: Die MSDE wird auch auf dem Client-Rechner installiert, damit die SQLDMO-Objekte verfügbar sind. Über die lokalen SQLDMO-Objekte kann man dann die andere Serverinstanz über das Netzwerk konfigurieren

                Comment


                • #9
                  Hallo Pascal,

                  für NT/2000/XP würde sich folgende Alternative anbieten:

                  <pre>
                  uses
                  JwaLM;

                  function GetAvailableServer(ServerType: DWORD; AStrings: TStrings): NET_API_STATUS;
                  var
                  nRes: Integer;
                  BufPtr: Pointer;
                  nLevel: DWORD;
                  nPrefMaxLen: DWORD;
                  nEntriesRead: DWORD;
                  nTotalEntries: DWORD;
                  nResumeHandle: DWORD;
                  i: Integer;
                  ServerInfo: TServerInfo101;
                  TempBufPtr: PServerInfo101;
                  SIZE_SI_101: Integer;
                  begin
                  // Funktionen stehen nur unter NT/2000/XP zur verfügung
                  if IsNTVersion = True then
                  begin
                  if Assigned(AStrings) = FALSE then
                  raise Exception.Create(cNoStringList);

                  BufPtr := nil;
                  nPrefMaxLen := $FFFFFFFF;
                  nLevel := 101;
                  nEntriesRead := 0;
                  nTotalEntries := 0;
                  nResumeHandle := 0;
                  SIZE_SI_101 := sizeof(TServerInfo101);

                  AStrings.Clear;

                  repeat
                  nRes := NetServerEnum(nil, nLevel, BufPtr,
                  nPrefMaxLen, nEntriesRead, nTotalEntries,
                  ServerType, nil, @nResumeHandle);
                  result := nRes;

                  if ((nRes = ERROR_SUCCESS) or (nRes = ERROR_MORE_DATA)) and (nEntriesRead > 0) then
                  begin
                  TempBufPtr := PServerInfo101(BufPtr);
                  for i := 1 to nEntriesRead do
                  begin
                  CopyMemory(@ServerInfo, TempBufPtr, SIZE_SI_101);
                  AStrings.Add(ServerInfo.sv101_name);
                  Inc(TempBufPtr, 1);
                  end
                  end;
                  NetApiBufferFree(BufPtr)
                  until nEntriesRead >= nTotalEntries
                  end
                  else
                  begin
                  result := ERROR_NO_BROWSER_SERVERS_FOUND;
                  end;
                  end;

                  Aufruf mit:

                  GetAvailableServer(SV_TYPE_SQLSERVER, cbSQLServer.Items);
                  </pre>

                  Die Unit JwaLM findet sich unter http://www.delphi-jedi.org/Jedi:APILIBRARY:282158#windows

                  Es muß auf jeden Fall im Projekt "DYNAMIC_LINK" als Bedingung definiert werden, damit diese API-Funktionen nur dynamisch in der Exe verwendet werden.

                  Damit kannst Du dir auf jeden Fall unter den NT-Versionen die Installation von SQL-DMO sparen

                  Comment

                  Working...
                  X