Access-o-Mania

Access-Forum (Deutsch/German) => Tabelle/Abfrage => Thema gestartet von: Kloso am Oktober 23, 2016, 13:15:50

Titel: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Kloso am Oktober 23, 2016, 13:15:50
Hallo Freunde,

habe mir folgendes vorgenommen:
Bsp.:
Frage:
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: DF6GL am Oktober 23, 2016, 17:52:34
Hallo,

importiere die Excel-Sheet -Daten in eine Access-Tabelle und benutze SQL, um die nunmehr zwei Access-Tabellen entspr. zu vergleichen.

Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: MaggieMay am Oktober 23, 2016, 19:50:10
Hallo,

je nachdem was du vorhast und wie es damit weitergeht, käme natürlich auch eine Verknüpfung zur Excel-Tabelle infrage, mit der gleichermaßen wie mit einer importierten Tabelle umgegangen werden kann.

ZitatExcel Tabelle mit einem riesigen Inhalt von A1:Y1000
Aus Access-Sicht ist eine Tabelle mit 25 Spalten und 1000 Zeilen nicht "riesig" - eigentlich auch nicht aus Excel-Sicht. ;-)
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Kloso am Oktober 24, 2016, 08:32:35
MaggieMay

wäre die Verknüpfung mit SQL möglich oder bräuchte man dann eher einen VBA?

Ich versuche jetzt erstmal die Tabelle in Access zu importieren hoffe das Weitere klappt dann von alleine.

Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Beaker s.a. am Oktober 24, 2016, 12:19:22
Hallo Kloso,
Verknüpfungen zu externen Daten erstellt man über "Externe Daten" > Excel (in deinem
Fall).
gruss ekkehard
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Kloso am Oktober 25, 2016, 15:14:51
Hallo,

also ich habe rumgebastelt und rumprobiert. Funktioniert. Aber nur teils.
Dieser Query funktioniert, vergleicht aber nur mit dieser Spalte: Field1
SELECT DBfürTestBlatt.*
FROM DBfürTestBlatt
WHERE search_term IN (SELECT Field1 From Testblatt);


da ich aber mit allen Spalten vergleichen will, habe ich diesen Code probiert:

SELECT DBfürTestBlatt.*
FROM DBfürTestBlatt
WHERE search_term IN (SELECT * From Testblatt);


dieser funktioniert aber leider nicht.
Gibt es da einen Trick?

PS: Es ist ja im Prinzip eine SELECT Unterabfrage, und bei Unterabfragen mit SELECT darf man nicht "*" verwenden.
Also müsste man es auf EXISTS umschreiben. Oder?

Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: DF6GL am Oktober 25, 2016, 16:39:21
Hallo,

anfänglich schreibst Du aber von nur einer Spalte......


siehe hier:

http://www.donkarl.com/?FAQ3.16


in dem Beispiel wird ein ID-Feld für den Join benutzt. Da Du aber keinen Primärschlüssel hast, müssen im Abfrageentwurf alle Felder, die eine "Zeile" eindeutig machen, miteinander verknüpft werden.
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Kloso am Oktober 26, 2016, 09:08:25
Hallo, es kann sein dass ich es verwirrend formuliert hatte am Anfang. Habe nun versucht mein Ziel im Paint nachzubauen:


(http://up.picr.de/27238187mr.jpg)


Ich würde es schon gerne so lösen, dass man es mit dem SQL Code schafft, nur wie kann ich die WHERE Bedienung so formulieren, dass sie auf alle Spalten der ExcelTabelle schaut und es mit "Search_term" vergleicht und nicht wie im Bsp nur auf Field2


DF6GL, ich habe mir den Link angeschaut, aber ich glaube dort geht es nur wenn ich jeweils die kompletten Tabellen vergleichen möchte. Oder?

____________________________________

PS:
Habe jetzt probiert die im Link gegebene Information nachzubauen, da kommt es aber aufs selbe raus leider.

(http://up.picr.de/27238273cs.jpg)

Also funktioniert auch nur wenn man ein Bestimmtes Feld in der Excel Tabelle angibt, nicht aber wenn man alle Spalte mit .* angibt.
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: DF6GL am Oktober 26, 2016, 09:22:53
Hallo,


es könnten die einzelnen Spalten der Excel-Liste nacheinander mit entspr. angepassten Abfragen verglichen und in einer UNION-Abfrage zusammengefasst werden:


Select from Datenbank Where search_term in (select Field1 from ImportierteExceltabelle)
Union
Select from Datenbank Where search_term in (select Field2 from ImportierteExceltabelle)
Union
........
Union
.
.
.
.
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Kloso am Oktober 26, 2016, 09:29:40
Hallo DF6GL,

habe das gestern auch genau so gestartet, da hat es auch funktioniert. Auch mit einer verschachtelten Iff Anweisung. Jedoch bei meiner Test Tabelle ist das noch übersichtlich. Bei meiner richtigen Tabelle sind es zig Tausende Spalten, also werde ich es wohl verallgemeinern müssen.

Wenn mann es eventuell so formulieren könnte:
Prüfe ob in Spalte1 wenn ja - zeige, und gehe dann in Spalte1 + 1Spalte nach rechts und prüfe dasselbe und gehe wieder 1Spalte weiter... und dann am Ende zeige mir alle an die gefunden worden sind.
(an der Formulierung des Satzes merkt man das ich noch kein richtiger programmierer bin)
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Beaker s.a. am Oktober 26, 2016, 12:26:49
Hallo Kloso,
ZitatBei meiner richtigen Tabelle sind es zig Tausende Spalten, also werde ich es wohl verallgemeinern müssen.
In Access ist bei 255 Spalten/Feldern Schluss.
Da wirst du den Import wohl auch noch aufteilen müssen.

gruss ekkehard
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: DF6GL am Oktober 26, 2016, 12:34:30
Hallo,


es wird nicht zu umgehen sein, die Excel-Tabelle zu normalisieren:


Mittels Schleife die Felder durchfahren und bei jedem Durchgang die Werte und den Spaltennamen (der später als Primärschlüssel dient)  "vertikal" (mit einer Anfügeabfrage) in eine weitere Tabelle schreiben   (Tabelle transponieren)


Field1   1 
Field1   a 
Field1   11 
Field1   k 
Field2   2 
Field2   b 
Field2   12 
Field2   l 
.
.
Titel: Re: Eine Abfrage die auf eine DB-Tabelle und eine Excel-Tabell/(Datei) zugreift
Beitrag von: Kloso am Oktober 26, 2016, 12:49:19
Habe es eben folgendermaßen geschafft. Unzwar:

Ich habe die ExcelTabelle in Excel mit diesem VBA normalisiert:
Sub AllesInEineSpalte()
  Dim i As Long, j As Long, k As Long
  Dim vnArrQ As Variant, vnArrZ As Variant
  vnArrQ = Rows(1).CurrentRegion.Value
  ReDim vnArrZ(1 To UBound(vnArrQ, 1) * UBound(vnArrQ, 2), 1 To 1)
  For i = 1 To UBound(vnArrQ, 1)
    For j = 1 To UBound(vnArrQ, 2)
      k = k + 1
      vnArrZ(k, 1) = vnArrQ(i, j)
    Next j
  Next i
  Cells(1).CurrentRegion = ""
  Cells(1).Resize(k).Value = vnArrZ
End Sub


Es tut einfach alle Spalten in eine Spalte umschreiben. Dann tue ich diese neue ExcelTabelle als eine neue Datei speichern, tue sie dann erst in Access importieren und dann meinen am Anfang gebastelten Code ausführen:

SELECT DBfürTestBlatt.*
FROM DBfürTestBlatt
WHERE search_term IN (SELECT Field1 From Testblatt);


Ist halt recht kompliziert aber ich komme wenigstens zu dem gewünschten Ergebnis.

Gibt es vielleicht doch eine Möglichkeit den Subquery mit dem * (Alle Spalten) irgendwie auszuführen? Dann wäre nämlich alles so viel viel einfacher. :D