Matthias: IDC / HTX

Hallo Leute,

auch auf die Gefahr das ich Euch ein wenig auf die Nerven gehe, bedanke ich mich erst mal bei Euch für die Hilfe. Leider hat sie noch nicht zum Erfolg geführt.

Ich habe eine ACCESS Datenbank ( testdatenbank) aus der ich etwas auslesen ( über Browser ) will.
Diese Datenbank besteht aus zwei Tabellen (1. testdatenbank 2. testdatenbank2)
Die letzte Spalte "techniken" möchte ich aus der zweiten Tabelle ( testdatenbank2) auslesen. Hoer heisst sie "techniken1".
Leider liesst er mit den folgenden Quellcode immer nur aus einer Datenbank etwas aus.
-------------------------------------------------
SQLStatement: SELECT testdatenbank.*, testdatenbank2.techniken1 FROM testdatenbank, testdatenbank2

  • where testdatenbank.Name like '%Name%'
  • and testdatenbank2.name.vorname = testdatenbank.name.vorname
  • and testdatenbank.techniken = testdatenbank2.techniken1
    ---------------------------------------------------
    Gute Ideen sind sehr gefragt.

Danke für Eure Hilfe

Matthias

  1. Hallo Matthias

    Möglicherweise liegt nur eine Begriffverwechslung vor, ich versuche es baer trotzdem mal zu erklären.

    Mit einem SELECT-Statement kann man ein oder mehrere Tabellen in _einer_ Datenbank abfragen.
    Im Stil:
       SELECT t1.feld1, t1.feld2, t1.feld3, t2.feld1, t2.feld2, t2.feld3  
       FROM tabelle1 AS t1, tabelle2 AS t2
       WHERE t1.keyfield1 = t2.keyfield2

    Es ist _nicht_ möglich mit einem SELECT-Statement zwei (oder mehrere) Tabellen in _verschiedenen_ Datenbanken abzufragen.
    Falls dies jedoch Deine Absicht ist, hast Du zwei Möglichkeiten:
    1. Die Tabelle aus der einen Datenbank zu exportieren und in die andere Datenbank zu importieren.
       Access erlaubt Dir aber auch, in der einen Datenbank eine Verknüpfung auf eine Tabelle in einer andern Datenbank anzulegen.
       Dies können Tabellen in einer anderen mdb sein, es können aber auch Tabellen auf einem SQL-Server sein, die Du über ODBC ansprechen kannst.
       Auf diese verknüpften Tabellen kannst Du (mehr oder weniger) gleich zugreifen, wie auf eine feste eingebundene Access-Tabelle (Bei ODBC-verknüpften Tabellen sind nicht immer Update/Insert/Delete-Statements möglich, Select-Statemenst soltten jedoch immer funktionieren).
    z.B:
       SELECT t1.feld1, t1.feld2, t1.feld3, t2.feld1, t2.feld2, t2.feld3  
       FROM eingebetteteTabelle1 AS t1, verknüpfteTabelle2 AS t2
       WHERE t1.keyfield1 = t2.keyfield2
      
    2. Du kannst in einer serverseitigen Programmiersprache (z.B. ASP) zuerst eine Verbindung zu der einen Datenbank öffnen, das SQL-Statement absetzen und das Recordset-Objekt speichern, anschliessend eine zweite Connection zur anderen Datenbank öffnen, das zweite SQL-Statement absetzen und das Recordset-Objekt in einer weiteren Variable speichern.
        Anschliessend kannst Du die beiden Recordset-Objekte in einer Schlaufe parallel verarbeiten:
    z.B. (ASP, mit VBScript)

    ' DB-Connection 1
       Set db1 = Server.CreateObject("ADODB.Connection")
       db1.Open "DataSourceName1"

    ' Abfrage 1
       Set rs1 = Server.CreateObject("ADODB.RecordSet")
       SQL1 = "SELECT  keyfield1, feld1, feld2, feld3 FROM tabelle1
       rs1.open SQL1, db1, adOpenDynamic

    ' DB-Connection 2
       Set db2 = Server.CreateObject("ADODB.Connection")
       db2.Open "DataSourceName2"

    ' Abfrage 2
       Set rs2 = Server.CreateObject("ADODB.RecordSet")
       SQL2 = "SELECT  keyfield2, feld1, feld2, feld3 FROM tabelle2
       rs2.open SQL2, db2, adOpenDynamic

    Do Until rs1.EOF
          if rs1("keyfield1) = rs2("keyfield2") then
             ' tue irgendwas
         end if
       loop

    Grundsätzlich gilt: Ein SQL-Statement kann nur Operationen in einer Datenbank ausführen.
    Darum wird das SQL-Statement auch immer in Bezug zu einer DB-Verbindung ausgeführt.

    Ich hoffe, dass ich damit Dein Problem lösen konnte.

    Grüsse
    Tom

    1. Hallo Matthias

      Möglicherweise liegt nur eine Begriffverwechslung vor, ich versuche es baer trotzdem mal zu erklären.

      Mit einem SELECT-Statement kann man ein oder mehrere Tabellen in _einer_ Datenbank abfragen.
      Im Stil:
         SELECT t1.feld1, t1.feld2, t1.feld3, t2.feld1, t2.feld2, t2.feld3  
         FROM tabelle1 AS t1, tabelle2 AS t2
         WHERE t1.keyfield1 = t2.keyfield2

      Es ist _nicht_ möglich mit einem SELECT-Statement zwei (oder mehrere) Tabellen in _verschiedenen_ Datenbanken abzufragen.

      Herzlich Dank erstmal für deine sehr guten und ausführlichen Ausführungen (Glaub ich muss mich bald mal mit ASP beschaeftigen, das aber nur nebenbei)

      Ich habe _NUR EINE_ Datenbank (Name: Testdatenbank.mdb). In dieser sind zwei Tabellen 1. Name: testdatenbank, 2.Name: testdatenbank2.

      Die Tabelle "testdatenbank" habe ich Kopiert und eingefügt als "testdatenbank2". Jetzt habe ich in der Tabelle " testdatenbank2" den Spaltennamen TECHNIKEN in TECHNIKEN1 geändert und einige Eintraege verändert. Mit dem Quellcode:
      --------------------------------------------------------------
      SQLStatement: SELECT testdatenbank.*, testdatenbank2.techniken1 FROM testdatenbank, testdatenbank2

      • where testdatenbank.Name like '%Name%'
      • and testdatenbank2.name = testdatenbank.name
      • and testdatenbank.techniken = testdatenbank2.techniken1
        ------------------------------------------------------------
        wollte ich jetzt bloss die Eintraäge der "testdatenbank2.techniken1" statt testdatenbank.techniken auslesen.
        Leider liesst er aber alles aus der testdatenbank aus und berührt die testdatenbank2 gar nicht.

      gruss

      matthias


      1. SQLStatement: SELECT testdatenbank.*, testdatenbank2.techniken1 FROM testdatenbank, testdatenbank2

        • where testdatenbank.Name like '%Name%'
        • and testdatenbank2.name = testdatenbank.name
        • and testdatenbank.techniken = testdatenbank2.techniken1

        Leider liesst er aber alles aus der testdatenbank aus und berührt die testdatenbank2 gar nicht.

        Hi !

        Das lässt mich Deinem Problem etwas näher kommen. Ich glaube, ich weiß jetzt, woran es liegt.
        Du musst bei SELECT testdatenbank.*, ... natürlich auch noch das Feld mit der Langform auslesen:

        SQLStatement: SELECT testdatenbank.*, testdatenbank2.techniken1, testdatenbank2.techniken_lang FROM testdatenbank, testdatenbank2

        • where testdatenbank.Name like '%Name%'
        • and testdatenbank2.name = testdatenbank.name
        • and testdatenbank.techniken = testdatenbank2.techniken1

        Ansonsten werden die beiden Tabellen zwar verknüpft, aber Du hast ja bisher nur die Spalte ausgelesen, die in der anderen Tabelle eh schon mit den gleichen Werten vorhanden ist (das sogenannte Schlüsselfeld).

        Vielleicht haben wir es jetzt ja... ansonsten stehst Du kurz davor, den Preis für die größte Hartnäckigkeit im SELFHTML-Forum zu bekommen ;)

        Tschö
        H-Man


        1. SQLStatement: SELECT testdatenbank.*, testdatenbank2.techniken1 FROM testdatenbank, testdatenbank2

          • where testdatenbank.Name like '%Name%'
          • and testdatenbank2.name = testdatenbank.name
          • and testdatenbank.techniken = testdatenbank2.techniken1

          Das lässt mich Deinem Problem etwas näher kommen. Ich glaube, ich weiß jetzt, woran es liegt.
          Du musst bei SELECT testdatenbank.*, ... natürlich auch noch das Feld mit der Langform auslesen:

          SQLStatement: SELECT testdatenbank.*, testdatenbank2.techniken1, testdatenbank2.techniken_lang FROM testdatenbank, testdatenbank2

          • where testdatenbank.Name like '%Name%'
          • and testdatenbank2.name = testdatenbank.name
          • and testdatenbank.techniken = testdatenbank2.techniken1

          hallo

          danke das du noch mal schreibst. Nocheinmal bitte ...
          ich habe eine Datenbank (testdatenbank.mdb). In dieser sind zwei Tabellen (testdatenbank und testdatenbank2). Die testdatenbank2 ist eine copy von der tabelle testdatenbank, nur die Spalte TECHNIKEN in der Tabelle testdatenbank wurde geändert in der zweiten Tabelle testdatenbank2 in TECHNIKEN1. Ich will alle Werte aus testdatenbank auslesen und nur die Werte aus TECHNIKEN1 aus der Tabelle testdatenbank2. TECHNIKEN aus table testdatenbank interessiert mich nicht.
          Ich weiss jetzt nicht mehr so richtig was du meinst mit techniken_lang. Das war meine erste Idee, ich wollte nur eine zweite Tabelle aufmachen umd hier die erklärungen reinschreiben (techniken_lang). Diese Idee habe ich aber irgendwie verworfen und nun die ursprüngliche Tabelle testdatenbank copiert in testdatenbank2 und die letzte Spalte TECHNIKEN in TECHNIKEN1 umgewandelt und die Einträge hier verändert.

          Ich hoffe es war nicht zu verwirrend, weil ich so hartnäckig bin :) bin Student und schreibe diese Abfrage für eine Firma, man muss sich ja irgendwie sein Geld verdienen.

          danke

          Matthias

          1. Hi !

            Also nochmal 8)

            SQLStatement: SELECT testdatenbank.*, testdatenbank2.techniken1, testdatenbank2.techniken_lang FROM testdatenbank, testdatenbank2

            • where testdatenbank.Name like '%Name%'
            • and testdatenbank2.name = testdatenbank.name
            • and testdatenbank.techniken = testdatenbank2.techniken1

            Ich weiss jetzt nicht mehr so richtig was du meinst mit techniken_lang. Das war meine erste Idee, ich wollte nur eine zweite Tabelle aufmachen umd hier die erklärungen reinschreiben (techniken_lang). Diese Idee habe ich aber irgendwie verworfen und nun die ursprüngliche Tabelle testdatenbank copiert in testdatenbank2 und die letzte Spalte TECHNIKEN in TECHNIKEN1 umgewandelt und die Einträge hier verändert.

            Es genügt, eine zweite Tabelle mit den folgenden Feldern aufzumachen:

            techniken1  =  Kürzel für die Techniken, gleiche Werte wie in den Feldern in der testdatenbank-tabelle

            techniken_lang = Die lange Form der Techniken, die für das Kürzel eingesetzt werden soll.

            Dann müsste es klappen. Kannst das meiste von der kopierten Tabelle rausschmeißen :)

            Wichtig dabei ist, dass im Feld TECHNIKEN der Tabelle "Testdatenbank" und im Feld "TECHNIKEN1" der Tabelle "Testdatenbank2" die gleichen Werte drinstehen, damit eine Verknüpfung stattfinden kann. Ansonsten gibt die Abfrage keine Werte zurück, da es beim Abfragenteil

            "where ... and testdatenbank.techniken = testdatenbank2.techniken1"

            keine Treffer gibt.

            Ich hoffe es war nicht zu verwirrend, weil ich so hartnäckig bin :) bin Student und schreibe diese Abfrage für eine Firma, man muss sich ja irgendwie sein Geld verdienen.

            Falls Du noch einen technischen Berater brauchst - ich muss mir ja auch mein Geld verdienen ;)

            Tschö
            H-Man