Announcement

Collapse
No announcement yet.

Probleme bei Aktualisierung per Scripting

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

  • Probleme bei Aktualisierung per Scripting

    Hallo Forum,

    ich habe einen MS SQL SRV 2008 WITH ADVANCED SERVICES im Einsatz. Die dort entwickelte Datenbank wird mit Daten von 2 Framddatenbanken gespeist, die via Verbindungsserver angebunden sind.

    Nun will ich diese Daten, die aus externen Anwendungen stammen, natürlich regelmäßig aktualisieren lassen. Dies soll per Scripting geschehen. Nun funzt das für die eine Fremddatenbank (Oracle) sehr gut, aber leider macht mir eine MDB zu schaffen.

    Der Verbindungsserver für die MDB läuft auf jeden Fall, da das nachfolgende Sktipt aus SQL SRV Management Studio das Gewünschte ausführt:

    Code:
    MERGE INTO dbo.tblMitarbeiter
    USING BETRIEBSORG...tblMitarbeiter AS A
    ON dbo.tblMitarbeiter.PNR = A.PNR
    
    WHEN MATCHED THEN
    UPDATE SET
    Anr = A.Anr, 
    Titel = A.Titel, 
    Nachn = A.Nachn, 
    Vorn = A.Vorn, 
    Name = A.Name, 
    Geburtstag = A.Geburtstag,
    Straße = A.Straße,
    PLZ= A.PLZ,
    Ort= A.Ort,
    EMail= A.EMail,
    Eintrittsdat= A.Eintrittsdat,
    Austrittsdat= A.Austrittsdat,
    App= A.App,
    Fax= A.Fax,
    Mobiltelefon_01= A.Mobiltelefon_01,
    Mobiltelefon_02= A.Mobiltelefon_02,
    Ersthelfer= A.Ersthelfer,
    PC_vorh= A.PC_vorh,
    Mit_Skriptname= A.Mit_Skriptname,
    Bemerkung= A.Bemerkung,
    Tel_privat= A.Tel_privat,
    Notfallfunktion= A.Notfallfunktion
    
    WHEN NOT MATCHED THEN
    INSERT(PNR, Anr, Titel, Nachn, Vorn, Name, Geburtstag, Straße, PLZ, Ort, EMail, Eintrittsdat, Austrittsdat, App, Fax, Mobiltelefon_01, Mobiltelefon_02, Ersthelfer, PC_vorh, Mit_Skriptname, Bemerkung, Tel_privat, Notfallfunktion)
    VALUES(A.PNR, A.Anr, A.Titel, A.Nachn, A.Vorn, A.Name, A.Geburtstag, A.Straße, A.PLZ, A.Ort, A.EMail, A.Eintrittsdat, A.Austrittsdat, A.App, A.Fax, A.Mobiltelefon_01, A.Mobiltelefon_02, A.Ersthelfer, A.PC_vorh, A.Mit_Skriptname, A.Bemerkung, A.Tel_privat, A.Notfallfunktion)
    ;
    GO
    Wenn ich aber diese Geschichte in eine Skript-Datei namens "Schimmel_Aktualisierung_Mitarbeiterdaten.sql" verpacke und die über eine ausführbare Datei "Schimmel_Update_Mitarbeiterdaten.bat" anstosse, bekomme ich eine Fehlermeldung.

    Inhalt Schimmel_Update_Mitarbeiterdaten.bat (ist 100%ig korrekt):
    Code:
    sqlcmd -S PC30\SQL2008EXPRESS -d Schimmel -i "U:\WGA_Schimmel\Befehlszeile\Schimmel_Aktualisierung_Mitarbeiterdaten.sql"
    Fehlertext:
    Der OLE DB-Anbieter 'Microsoft.Jet.OLEDB.4.0' für den Verbindungsserver 'BETRIEBSORG' hat die Meldung 'Das Microsoft Jet Datenbankmodul kann die Datei '\\server01\U:\K-B Betriebsorganisation\Zimmer_Struktur_Telefon\Betri ebsorganisation.mdb' nicht öffnen. Sie ist bereits von einem anderen Benutzer exklusiv geöffnet, oder Sie benötigen eine Berechtigung, um die Daten lesen zu können.
    Wie kann ich das Problem lösen???

  • #2
    Hallo!

    Ich würde mal darauf tippen, dass der User unter dem der SQL Server läuft, keinen Zugriff auf die MDB hat.

    Gruß
    Beste Grüße
    Norbert

    _Code * It * Simple * and * Smile_

    Access: FAQAccess-Funktionen
    SQL: sqlfaq ° sqlservercentral ° databasejournal ° insideSQL
    C#: snippets ° C# Corner ° codeproject ° Free ebook ° Pflichtlektüre
    Was nützt die beste Informationstechnik, wenn sich die Menschen nichts zu sagen haben?”

    Comment


    • #3
      Und abgesehen davon ist
      '\\server01\U:\...
      kein gültiger UNC Pfad.

      Um zu sagen, woran es liegt, müsste man mehr wissen, was wie wo ...
      Olaf Helper

      <Blog> <Xing>
      * cogito ergo sum * errare humanum est * quote erat demonstrandum *
      Wenn ich denke, ist das ein Fehler und das beweise ich täglich

      Comment


      • #4
        Zunächst erst einmal vielen Dank für Eure Reaktionen.

        @SQL_Fan:
        Angenommen Deine Theorie träfe zu, wäre dann das Skript aus SQL SRV Management Studio erfolgreich ausführbar, wie es sich momentan darstellt? Denn da arbeite ich auch mit dem User, unter dem der SQL Server läuft, der evtl. keinen Zugriff auf die MDB hat.

        @O.Hoelper:
        Dein Hinweis, entschuldige, dass ich dass so offen ausspreche, KANN!!! nicht korrekt sein, denn meine funktionierende Aktualisierung führt

        sqlcmd -S PC30\SQL2008EXPRESS -d Schimmel -i "U:\WGA_Schimmel\Befehlszeile\Schimmel_Aktualisier ung_Wodisdaten.sql

        korrekt und problemlos aus.

        So gesehen warte ich auf weitere Hinweise ))

        Comment


        • #5
          Hallo!

          Du solltest in deinem -i - Parameter einen UNC Pfad verwenden. Wie du in der Fehlermeldung erkennst, kann er den Pfad nicht richtig auflösen.
          d.h.: \\server\freigabeordner\xyz.mdb

          Die fehlenden Berechtigungen spieln da denke ich keine Rolle, da du ja das ganze eh im SSMS erfolgreich ausgeführt hast.

          Beste Grüße
          Zuletzt editiert von _CISS_; 05.11.2009, 11:41. Reason: sicher ist sicher...
          Beste Grüße
          Norbert

          _Code * It * Simple * and * Smile_

          Access: FAQAccess-Funktionen
          SQL: sqlfaq ° sqlservercentral ° databasejournal ° insideSQL
          C#: snippets ° C# Corner ° codeproject ° Free ebook ° Pflichtlektüre
          Was nützt die beste Informationstechnik, wenn sich die Menschen nichts zu sagen haben?”

          Comment


          • #6
            Hallo zurück,

            auch die Angabe des UNC-Pfades bewirkt nichts. Ich erhalte die gleiche Fehlermeldung.

            Ich denke, dass das Problem eher bei der .LDB-Datei liegt, die bei einer offenen MDB immer gleich mit angelegt wird.

            Das Problem ist aus meiner Sicht weder die Berechtigung, noch der UNC-Pfad, sondern vielmehr die angebliche Sperre.

            Viele Grüße
            Zuletzt editiert von joghurtjens; 05.11.2009, 12:10.

            Comment


            • #7
              Tja, dann lösch die ldb Datei und schließe die mdb. Wenns dann noch immer nicht funzt, würd ich auf den Pfad tippen
              Beste Grüße
              Norbert

              _Code * It * Simple * and * Smile_

              Access: FAQAccess-Funktionen
              SQL: sqlfaq ° sqlservercentral ° databasejournal ° insideSQL
              C#: snippets ° C# Corner ° codeproject ° Free ebook ° Pflichtlektüre
              Was nützt die beste Informationstechnik, wenn sich die Menschen nichts zu sagen haben?”

              Comment


              • #8
                LDB-Datei schließen ist nicht. Immer wenn ich einen SQL SRV starte, der die MDB verknüpft, wird die LDB angelegt.

                Der Pfad ist definitiv richtig. Hab ich gerade zum 1000. mal getestet.

                Comment


                • #9
                  Es sieht so aus, dass dein Verbindungsserver die mdb lockt.
                  Was wäre wenn du keinen Verbindungsserver verwendest, sondern einfach OPENROWSET()
                  http://msdn.microsoft.com/de-de/library/ms190312.aspx

                  Bsp.:
                  SELECT CustomerID, CompanyName
                  FROM OPENROWSET('Microsoft.Jet.OLEDB.4.0',
                  'C:\Program Files\Microsoft Office\OFFICE11\SAMPLES\Northwind.mdb';
                  'admin';'',Customers)
                  GO
                  Beste Grüße
                  Norbert

                  _Code * It * Simple * and * Smile_

                  Access: FAQAccess-Funktionen
                  SQL: sqlfaq ° sqlservercentral ° databasejournal ° insideSQL
                  C#: snippets ° C# Corner ° codeproject ° Free ebook ° Pflichtlektüre
                  Was nützt die beste Informationstechnik, wenn sich die Menschen nichts zu sagen haben?”

                  Comment


                  • #10
                    Hab nun das für eine nicht kennwortgeschützte MDB kreiiert (gem: http://www.itrain.de/knowhow/sql/transfer/adhoc/):
                    SELECT * FROM
                    OPENROWSET('Microsoft.Jet.OLEDB.4.0',
                    ';Database=\\SERVER01\Unternehmensdaten\K-B Betriebsorganisation\Zimmer_Struktur_Telefon\Betri ebsorganisation.mdb',
                    'SELECT * FROM tblMitarbeiter')
                    Im MS SQL SRV Management Studio erhalte ich dann die folgende Fehlerausschrift:
                    Der OLE DB-Anbieter 'Microsoft.Jet.OLEDB.4.0' für den Verbindungsserver '(null)' hat die Meldung 'Unbekannter Fehler' zurückgeben.
                    Meldung 7303, Ebene 16, Status 1, Zeile 2
                    Das Datenquellenobjekt des OLE DB-Anbieters 'Microsoft.Jet.OLEDB.4.0' für den Verbindungsserver '(null)' kann nicht initialisiert werden.

                    Comment


                    • #11
                      OK, hab es nun alternativ über bcp versucht.

                      1. Schritt = Erstellen Formatdatei:
                      bcp Schimmel.dbo._MitarbeiterExport format nul -c -T -S PC206SQL\SQL2008EXPR -f "\\server01\Unternehmensdaten\WGA_Schimmel\Mitarbe iterdaten\MitarbeiterImport.fmt"
                      PAUSE
                      2. Schritt = bcp-Datenimport:
                      bcp Schimmel.dbo._MitarbeiterExport in "\\server01\Unternehmensdaten\WGA_Schimmel\Mitarbe iterdaten\tblMitarbeiter.xls" -T -S PC206SQL\SQL2008EXPR -f \\server01\Unternehmensdaten\WGA_Schimmel\Mitarbei terdaten\MitarbeiterImport.fmt
                      PAUSE

                      Ergebnis = Fehlermeldung.
                      Ungültiger Zeichenwert für Konvertierungsangabe.
                      FÜNF DICKE FRAGEZEICHEN ?????


                      Könnte es sein, dass Datumswerte Probleme bereiten?

                      Comment


                      • #12
                        Klingt für mich jetzt mal, als würde etwas in der fmt-Datei nicht passen. Konvertierungsfehler, wenn das Ganze mal läuft, klingen eher wie "ungültiges Datum", aber bei dir steht ja definitiv "Konvertierungsangabe".

                        bye,
                        Helmut

                        Comment

                        Working...
                        X