Announcement

Collapse
No announcement yet.

Win32 error 10061

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

  • Win32 error 10061

    Hallo Leute,

    habe gerade ein Interbase-Problem. Ich wollte von meinem Rechner aus auf eine Interbase-Datenbank im Windows-NT Netzwerk zugreifen, die lokal auf einem anderen Rechner im Netz liegt.
    Sowohl bei mir als auch auf dem Rechner wo die Datenbank liegt, kommt folgende Fehlermeldung:
    "Unable to complete network request to host "xxx.xxx.x.xx". Failed to establish a connection. unknown Win32 error 10061".

    Bei der IBConsole auf dem betreffenden Rechner erhalte ich die gleiche Fehlermeldung. Wer kann mir sagen, was sich hinter der Fehlermeldung verbirgt ?

    Ich benutze übrigens Interbase 6.0.1

    Viele Grüsse,
    Carsten

  • #2
    Hallo,

    hinter dieser Nummer verbirgt sich WSAECONNREFUSED - wobei diese Fehlermeldung immer dann kommt, wenn auf dem Server keine Anwendung auf den angegebenen Port hört. Dies kann zwei Gründe haben: <br>
    1. Der InterBase läuft als Dienst nicht. <br>
    2. Der InterBase wurde auf einen anderen Port konfiguriert

    Comment


    • #3
      Hallo Andreas,

      Danke für die Tips. Ich habe gerade von meinem Test PC über die IBConsole und "Server Diagnostics" eine Connection zur Datenbank aufbauen können. Allerdings habe ich nichts geändert. Dies ist wohl ein Zeichen dafür, daß der Interbase aus irgend einem Grunde nicht als Dienst lief. Gibt es da auch eine Log-Datei, die mir so etwas anzeigt ?

      Jedoch habe ich nun ein zweites, gravierenderes Problem. Obwohl die Anwendung nur von Lokal auf Extern umgestellt wurde, habe ich nun an meinem Testrechner teilweise die folgende Fehlermeldung
      <PRE>
      Dynamic SQL Error
      SQL error code = -804
      SQLDA missing or incorrect version, or incorrect number/type of variables.
      </PRE>
      Was hat es damit auf sich ? Sowohl der Client auf meinem Test-PC als auch der Server haben die Version 6.0.1.

      Viele Grüsse,
      Carste

      Comment


      • #4
        Hallo Carsten,<br><br>
        das ist ein wohl bekannter Bug in InterBase 6 wenn die Stored Procedure 2 oder mehr Rückgabeparameter besitzt. AFAIK tritt dies nur bei Remoteverbindungen auf. Es gibt hierfür 2 Workarounds:<br><br>
        - Explizites Unprepare vor der Verwendung der Stored Procedure
        <pre>
        Unprepare;
        ...
        Prepare;
        Execute;
        </pre>
        - Oder ein SUSPEND im Stored Procedure Body einfügen, und die SP als Selectable Stored Procedure aufrufen. z.B:
        <pre>
        BEGIN
        ...
        SUSPEND;
        END<br><br>
        Aufruf:
        select ... from sp_myprocedure (...)
        </pre>
        Gruss,<br>
        Thoma
        Thomas Steinmaurer

        Firebird Foundation Committee Member
        Upscene Productions - Database Tools for Developers
        Mein Blog

        Comment


        • #5
          Hallo Thomas,

          danke für Deinen Tip, aber so ganz klappt das noch nicht. Ich bin den Weg 1 von Dir gegangen mit
          <PRE>
          Unprepare;
          ...
          Prepare;
          Execute;
          </PRE>

          Von meinem Test-PC aus, wo ebenfalls der IB6.0 installiert ist (incl. zugehöriger gds.dll (Interbase 6.0) bricht der Remote-Zugriff auf die Datenbank mit folgender Fehlermeldung ab:
          <PRE>
          Zugriffsverletzung in Modul "gds32.dll".
          In der IDE steht noch folgender Hinweis:
          Exception EAccessViolation in Modul gds32.dll
          </PRE>

          Bei Steppen in der IDE sehe ich das die Zugriffsverletzung bei folgendem Aufruf auftritt:
          <PRE>
          IBSPgetKundedetail.Unprepare;
          IBSPgetKundedetail.ParamByName('sName').AsString:= DM1.IBDSkonzernName.Value;
          IBSPgetKundedetail.Prepare;
          IBSPgetKundedetail.ExecProc; // hier tritt der Fehler auf !!!
          </PRE>

          Folgende Information noch von einem Rechner auf dem die Firebird-gds.dll installiert ist:
          Von diesem Rechner aus klappt die Verbindung zur Interbase-Datenbank ohne Probleme und der oben beschriebene Fehler tritt nicht auf.

          Was sind die Ursachen für dieses Verhalten ? Kann ich auf den Rechnern problemlos die Firebird-DLL (gds32.dll) installieren oder muß ich dann mit anderen Problemen rechnen ?

          Viele Grüsse und allen ein schönes Wochenende,
          Carste

          Comment


          • #6
            Noch ein kleiner Hinweis:

            Der Fehler tritt im Datenmodul auf bei dem Ereignis "OnDataChange" einer TwwDataSource-Komponente.

            Grüsse, Carste

            Comment


            • #7
              Hallo Carsten,<br><br>
              da ist mir bei der Skizzierung der möglichen Lösung ein kleiner Fehler unterlaufen. Versuch mal folgendes:
              <pre>
              IBSPgetKundedetail.Prepare;
              IBSPgetKundedetail.ParamByName('sName').AsString:= DM1.IBDSkonzernName.Value;
              IBSPgetKundedetail.ExecProc;
              IBSPgetKundedetail.Unprepare;
              </pre>
              Hilft das?<br><br>
              Ob nun in allen Umständen die Firebird Client-Library mit InterBase 6 verwendet werden kann weiß ich nicht. Vor dieser Situation bin ich noch nie gestanden ;-).<br><br>
              Und, wenn schon InterBase 6 Open-Edition, dann unbedingt 6.0.1.6 und keine frühere Version!<br><br>
              Gruss,<br>
              Thoma
              Thomas Steinmaurer

              Firebird Foundation Committee Member
              Upscene Productions - Database Tools for Developers
              Mein Blog

              Comment


              • #8
                Hallo Thomas,

                es klappt leider immer noch nicht vom Test-PC aus. Wo bekomme ich die InterBase 6.0.1.6 Version her ? Vielleicht klappts ja mit anderer DLL. Die Firebird-DLL auf dem anderen Rechner läßt mich die Hoffnung ja nicht aufgeben )

                Na ja, jedenfalls hatte ich gerade noch einen Win32 error 10054 bei dem Rechner mit der Firebird-DLL. Aber ich mußte feststellen, daß der Benutzer seinen Rechner heruntergefahren hat, demzufolge auch keine Connection zu seiner lokalen Datenbank. Na ja, ich jedenfalls mache jetzt wirklich erst mal Feierabend.

                Ansonsten, Thomas wie genau funktioniert Dein 2. Weg. Das Suspend habe ich in meiner Stored Procedure schon drin, habe ich gesehen. Jedoch verstehe ich noch nicht ganz genau, wie der Selectable SP-Aufruf funktionieren soll. Kannst Du mir ein Beispiel geben ?

                Die andere Alternative und wahrscheinlich auch zukunftssichere ist vielleicht auch die folgende Möglichkeit:
                Sichern der vorhandenen Interbase-Datenbank, De-Installation von Interbase und Weiterentwicklung mit Firebird. Wie gehe ich da am besten vor, um alle Daten komplett nach Firebird zu bekommen ?

                Grüsse,
                Carste

                Comment


                • #9
                  Hallo Carsten,<br><br>
                  &gt; Wo bekomme ich die InterBase 6.0.1.6 Version her ?<br><br>
                  http://mers.com oder http://ibinstall.defined.net/, wobei die zweite Website eine bessere Setuproutine zur Verfügung stellt (z.B. Steuerung der Installationsoptionen über Parameter beim Aufruf der Setuproutine). Es gibt auch 6.0.2.0, aber ich würd dir, wenn es nun wirklich InterBase 6 Open-Edition sein muss, trotzdem 6.0.1.6 empfehlen.<br><br>
                  &gt; Ansonsten, Thomas wie genau funktioniert Dein 2. Weg. Das Suspend habe ich in meiner Stored Procedure schon drin, habe ich gesehen. Jedoch verstehe ich noch nicht ganz genau, wie der Selectable SP-Aufruf funktionieren soll. Kannst Du mir ein Beispiel geben ? <br><br>
                  Die Stored Procedure muss am Ende des Body ein SUSPEND haben.
                  <pre>
                  BEGIN
                  ...
                  SUSPEND;
                  END
                  </pre>
                  Der Aufruf in der Client-Anwendung erfolgt dann nicht über eine Stored Procedure Komponente, sondern über eine Komponente die eine Ergebnismenge zurücklieferen kann. z.B. TIBQuery für IBX oder TIB_Query bzw. TIB_Cursor für IBObjects. Diese Komponente fütterst Du dann mit einem regulären SELECT-Statement, wobei die Stored Procedure wie eine Tabelle verwendet werden kann, mit dem Unterschied, dass Du der Stored Procedure Parameter mitübergeben kannst. D.h. in etwa wie folgt.
                  <pre>
                  SELECT * FROM SP_MYPROCEDURE(...);
                  </pre>
                  Die Query-Komponente dann einfach mit der Methode <b>Open</b> öffnen. Die Operationen in der Stored Procedure werden ausgeführt und das SUSPEND gibt die Kontrolle an die aufrufende Anwendung zurück. <b>ABER</b>, bevor Du alles umkrempelst, würd ich vorher einen Versuch mit InterBse 6.0.1.6 oder Firebird 1.0 wagen.<br><br>
                  &gt; Die andere Alternative und wahrscheinlich auch zukunftssichere ist vielleicht auch die folgende Möglichkeit: Sichern der vorhandenen Interbase-Datenbank, De-Installation von Interbase und Weiterentwicklung mit Firebird. Wie gehe ich da am besten vor, um alle Daten komplett nach Firebird zu bekommen ?<br><br>
                  Ich hab mich hierzu mal ziemlich ausführlich im Thread "InterBase 6.0.2 deinstallieren" "ausgelassen".<br><br>
                  Solltest Du IBX verwenden, dann möchte ich allerdings gleich dazusagen, dass es für dieses Gespann vermutlich nicht wirklich eine Zukunft geben wird, weil IBX vom Autor nicht Firebird-kompatibel für spätere Firebird-Versionen gehalten wird.<br><br>
                  Der zweite Punkt ist, dass womöglich Abfragen, die mit InterBase 6 noch funktioniert haben (dürften sie allerdings nicht), von Firebird zurückgewiesen werden. Dazu steht aber etwas unter "Ambigous Query" in den Firebird Release Notes drinnen.<br><br>
                  Schöne Grüße,<br>
                  Thoma
                  Thomas Steinmaurer

                  Firebird Foundation Committee Member
                  Upscene Productions - Database Tools for Developers
                  Mein Blog

                  Comment


                  • #10
                    Hallo Thomas,

                    Deinen Tip mit der InterBase-Version 6.0.1.6 kann man glaube ich ausschließen, da auf der Seite "www.interbase2000.de" unter Projekte der Fehler "SQL = -804" beschrieben ist und unter der Version 6.0.1.6 bzw. früher auftrat.

                    Warum würdest Du nicht die IB-Version 6.0.2 einsetzen ?
                    Bisher tendiere ich wirklich dazu, die Firebird-DLL 1.0 an diesen Rechnern einzusetzen. Denn, wie gesagt, von einem PC mit Firebird-DLL klappt der lesende Zugriff ohne Probleme. Obs mit dem Schreiben klappt, werde ich demnächst mal posten.

                    Grüsse,
                    Carste

                    Comment


                    • #11
                      Hallo zusammen,

                      noch ein kleiner Erfahrungsbericht nach 4 Wochen Testen mit der Firebird-DLL 1.0 (Posting 9):

                      Es läuft an dem Rechner alles problemlos und es sind bisher keine Probleme aufgetreten.

                      Ich kann nur sagen, daß sich diese Möglichkeit bewährt hat und es wirklich einfach war, diese Maßnahme durchzuführen, da ja auf dem betreffenden Rechner nur die DLL auszutauschen war.

                      Grüsse,
                      Carste

                      Comment

                      Working...
                      X