tutorials.de Buch-Aktion 05/2012
Like Tree2Danke
  • 1 Beitrag von Yaslaw
  • 1 Beitrag von Vereth
ERLEDIGT
JA
ANTWORTEN
7
ZUGRIFFE
2904
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    ash_ol ash_ol ist offline Rookie
    Registriert seit
    Apr 2010
    Beiträge
    6
    Guten Morgen ihr,

    Ich bin neu hier und schon fast am verzweifeln bei der Arbeit.

    Momentan bin ich dabei eine Bestandsdatenbank für unsere Tape Library in C# zu programmieren und hab schon die halbe Tischkante abgekaut weil diese blöde Datenbank nicht das ausspuckt was ich sehen will.

    Aber zu meinem Problem:

    Ich habe eine Access-Datenbank mit 2 Tabellen.
    Eine davon ist eine "lokale" und die andere eine verknüpfte Tabelle welche direkt aus der Tape Library _liest_, da der Treiber nur ein improvisierter Treiber vom Hersteller ist und keinen schreibenden Zugang freigibt.

    Nun brauch ich eine SQL-Anweisung die mir alle Datensätze aus der lokalen Tabelle ausgibt, welche _nicht_ in der verknüpften Tabelle sind.
    Beispiel:

    Tabelle 1 (lokal)
    a
    b
    c
    d
    e

    Tabelle 2 (verknüpft)
    a
    c
    d
    f

    Ausgabe
    b
    e

    Ich habs versucht mit 2 SELECTs die sich mit einem EXCEPT ausschließen, nem LEFT OUTER JOIN aber ständig krieg ich Fehlermeldungen:
    Entweder
    -System.Data.OleDB.OleDBException (0x80004005): IErrorInfo.GetDescription failed with E_FAIL(0x80004005) beim EXCEPT oder
    -System.Data.OleDB.OleDBException (0x80040E21): Verknüpfung über Memo-, OLE- oder Hyperlinkobjekt (tabelle1.spalte1 = tabelle2.spalte1) nicht möglich.

    Die SQL-Anweisungen sind vom Quellcode her auf jeden Fall korrekt, soviel ist sicher.
    Ich hab eigentlich nicht vor die beiden Spalten erst in Arrays einzulesen und dann auszuwerten, das ist mir ehrlich gesagt zu umständlich für so eine "kleine" Abfrage.
    Muss ich irgendwas bei der Einbindung der Datenbank in Access beachten oder habe ich noch andere Möglichkeiten die Tabelle in mein Projekt einzubinden?

    Danke im Voraus

    ash_ol
     

  2. #2
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    Code sql:
    1
    2
    3
    
    SELECT T1.Field1, T2.Field1
    FROM T1 LEFT JOIN T2 ON T1.Field1 = T2.Field1
    WHERE T2.Field1 IS NULL;
     
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  3. #3
    ash_ol ash_ol ist offline Rookie
    Registriert seit
    Apr 2010
    Beiträge
    6
    Zitat Zitat von yaslaw Beitrag anzeigen
    Code sql:
    1
    2
    3
    
    SELECT T1.Field1, T2.Field1
    FROM T1 LEFT JOIN T2 ON T1.Field1 = T2.Field1
    WHERE T2.Field1 IS NULL;
    Danke für die schnelle Antwort.
    Leider funktioniert diese Anweisung nicht, bis auf die WHERE-Klausel hatte ich ja auch so eine Anweisung.

    Fehler:
    -System.Data.OleDB.OleDBException (0x80040E21): Verknüpfung über Memo-, OLE- oder Hyperlinkobjekt (tabelle1.spalte1 = tabelle2.spalte1) nicht möglich.
     

  4. #4
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Wenn gar nichts hilft, kannst du es auch mit der Brutalo-Methode versuchen:
    Code sql:
    1
    2
    3
    4
    
    SELECT Field1
      FROM T1
     WHERE Field1 NOT IN 
    ( SELECT DISTINCT Field1 FROM T2 )
    Das DISTINCT kannst du weglassen, wenn Field1 ein eindeutiger Schlüssel ist.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  5. #5
    ash_ol ash_ol ist offline Rookie
    Registriert seit
    Apr 2010
    Beiträge
    6
    Zitat Zitat von Vereth Beitrag anzeigen
    Wenn gar nichts hilft, kannst du es auch mit der Brutalo-Methode versuchen:
    Code sql:
    1
    2
    3
    4
    
    SELECT Field1
      FROM T1
     WHERE Field1 NOT IN 
    ( SELECT DISTINCT Field1 FROM T2 )
    Das DISTINCT kannst du weglassen, wenn Field1 ein eindeutiger Schlüssel ist.
    =(

    Geht immer noch nicht. Aber zumindes hab ich einen anderen Fehlercode jetzt:

    -System.Data.OleDB.OleDBException (0x80040E21): Ungültiges Memo- oder OLE-Objekt in Unterabfrage ('T1.Field1').

    Nach der Mittagspause kommt nochmal so ein Dipl.-Dr.-Dr. der sich wohl den ganzen Tag mit SQL und so beschäftigt.
    Vielleicht kann der mir helfen. Werds dann auch reinschreiben.

    Trotzdem danke für die Antwort.
     

  6. #6
    Avatar von Yaslaw
    Yaslaw Yaslaw ist offline n/a
    tutorials.de Moderator
    Registriert seit
    Dec 2007
    Ort
    Winterthur(CH)
    Beiträge
    5.205
    O, du willst memo-Felder vergleichen. Dazu sind Memo-Felder aber nicht da!

    du solltest sie in Strings wandeln wenn sie nicht grösser als 255 Zeichen sind.
    ash_ol bedankt sich. 
    ---------------------------------------------------------------------------------------------------
    item: Ich habe es mir aus gesundheitlichen Gründen abgewöhnt unformatierten Code zu lesen (Auch SQL-Statements kann man formatieren!)
    item: Tutorial: [PHP][MySQL] Debug Queries
    item: Schreibt mir keine PN mit Fragen die im Forum beantwortet werden können - ich mache kein persönliches coaching
    item: Bitte zur besseren Lesbarkeit PHP-Code in [PHP]...[/PHP], SQL in [SQL]...[/SQL], Visual Basic in [VB]...[/VB] etc. schreiben

  7. #7
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Wenn deine Datenbank zu Verwechslungen neigt, dann gib die Tabellennamen einfach mit an.
    Code sql:
    1
    2
    3
    4
    
    SELECT T1.Field1
      FROM T1
     WHERE T1.Field1 NOT IN 
    ( SELECT DISTINCT T2.Field1 FROM T2 )
    ash_ol bedankt sich. 
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  8. #8
    ash_ol ash_ol ist offline Rookie
    Registriert seit
    Apr 2010
    Beiträge
    6
    Zitat Zitat von yaslaw Beitrag anzeigen
    O, du willst memo-Felder vergleichen. Dazu sind Memo-Felder aber nicht da!

    du solltest sie in Strings wandeln wenn sie nicht grösser als 255 Zeichen sind.
    Verdammt das kann ich nicht. Wie gesagt der Treiber für die ODBC-Datenbank ist rein standardisierter ODBC-Treiber sondern solch einer der nur lesen kann.
    Mit ändern is da nichts. Ich denke nicht das die Admins mich hier am Produktivsystem rumspielen lassen. =D

    Zitat Zitat von Vereth Beitrag anzeigen
    Wenn deine Datenbank zu Verwechslungen neigt, dann gib die Tabellennamen einfach mit an.
    Code sql:
    1
    2
    3
    4
    
    SELECT T1.Field1
      FROM T1
     WHERE T1.Field1 NOT IN 
    ( SELECT DISTINCT T2.Field1 FROM T2 )
    Das hab ich bereits getan, hilft aber auch nichts. =((

    Ich wer jetzt einfach die Tabelle 2 in eine dritte Tabelle (TMP) kopieren und dann die Abgleiche fahren.
    Kann ich denn die Einträge in den Memofeldern auf Datenbankebene einfach in ein Stringfeld kopieren?

    EDIT: Habs jetzt hinbekommen! Einfach vor jeder Abfrage die verknüpfte Tabelle in eine TMP-Tabelle kopiert und von dort aus die Abgleiche fahren! Danke
    Geändert von ash_ol (13.04.10 um 13:44 Uhr)
     

Ähnliche Themen

  1. Antworten: 11
    Letzter Beitrag: 14.11.09, 10:20
  2. [mysql] Daten aus Tabelle auslesen, die nicht in einer anderen enthalten sind
    Von esprit1st im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 13.09.07, 15:22
  3. right join - datensatz anzeigen der nicht an anderer tabelle ist
    Von Shooter2k im Forum Relationale Datenbanksysteme
    Antworten: 3
    Letzter Beitrag: 22.09.06, 19:35
  4. Antworten: 2
    Letzter Beitrag: 19.07.05, 14:03
  5. Datensätze aus tabelle A welche nicht in tabelle B sind anzeigen
    Von JohannesProgrammiert im Forum Relationale Datenbanksysteme
    Antworten: 5
    Letzter Beitrag: 19.05.04, 14:36

Stichworte