Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1240to1244
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datenbank abfragen

Datenbank abfragen
Maik.F
Hallo,
ich habe mich zum ersten Mal an eine Datenbankabfrage gewagt. Da ich nur abfragen und auf keinen Fall etwas in die Datenbank reinschreiben will, nutze ich Query. Hierzu habe ich den folgenden Code:
Private Sub CommandButton1_Click()
Range("BF1:BJ65536").Clear
With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _
"ODBC;DSN=dBASE-Dateien;DefaultDir=C:\;DriverId=533;FIL=dBase 5.0;MaxBufferSize=204" _
), Array("8;PageTimeout=5;")), Destination:=Range("BF1"))
.CommandText = Array( _
"SELECT ABPOS.ART_NR, ABPOS.SART_NR, ABPOS.MG_BES, ABPOS.TERMIN, ABPOS.AUSLIEFNR" & Chr(  _
_
13) & "" & Chr(10) & "FROM {oj `F:\STAND94`\ABPOS.DBF ABPOS LEFT OUTER JOIN `F:\STAND94`\ABKOPF. _
DBF ABKOPF ON ABPOS.AB_NR = ABKOPF.AB_NR}" & Chr(13) & "" & Chr(10) & "WH" _
, "ERE (ABKOPF.DEB_NR Like '1100%') AND (ABPOS.TERMIN Like '" & Format(CDate(Date), "yy")  _
_
& "%') AND (ABPOS.MG_GEL Is Null) AND (ABPOS.AUSLIEFNR Is Not Null)")
.Name = "Abfrage von dBASE-Dateien"
.FieldNames = False
.RowNumbers = False
.FillAdjacentFormulas = False
.PreserveFormatting = False
.RefreshOnFileOpen = False
.BackgroundQuery = False
.RefreshStyle = xlOverwriteCells
.SavePassword = False
.SaveData = True
.AdjustColumnWidth = False
.RefreshPeriod = 0
.PreserveColumnInfo = False
.Refresh BackgroundQuery:=False
End With
Call DieseArbeitsmappe.StarteAuswahlBox 'Hier beginnen die weiteren Auswertungen
End Sub

Das funktioniert so auch schon sehr gut, aber:
1.: Es werden ALLE Datensätze entsprechend der Abfrage importiert, leider auch die, die in der Datenbank als gelöscht gekennzeichnet sind. Kann ich das Importieren gelöschter Datensätze verhindern?
2.: Durch die Abfrage wird für den Bereich, in dem die Daten eingefügt werden, ein Name vergeben. Die Befehle
ActiveWorkbook.Names("Abfrage_von_dBASE_Dateien").Delete
oder
ActiveSheet.QueryTables.Clear
funktionieren nicht. Wie kann ich den Namen gleich nach erfolgter Abfrage wieder Löschen? Oder noch besser: Gar nicht erst einen Namen vergeben?
Bin für jede Hilfe dankbar!
Maik

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: Datenbank abfragen
12.12.2011 08:23:59
guentherh
Hallo Maik,
Zu 1) Das muss an der Abfrage liegen. In deiner DB sollte es ein Feld geben das deleted markiert. Dies ist zu suchenund in die where-Clause aufzunehmen
zu 2) wird mit
ActiveSheet.QueryTables("Abfrage von dBASE-Dateien").delete
gelöscht
Wenn Du nur den Namen nicht in der Liste haben willst, kannst Du Ihn wahrscheinlich verstecken:
ActiveWorkbook.Names("Abfrage_von_dBASE_Dateien").Visible = False
Gruß,
Günther
AW: Datenbank abfragen
12.12.2011 08:49:47
Maik.F
Hallo Günther,
vielen Dank für Deine Hilfe.
zu 1.: Das war auch meine Idee, aber in der DBF-Datenbank gibt es leider dieses Datenfeld nicht. Daher ist diese Frage erstmal noch offen.
zu 2.: Der .Delete-Befehl funktioniert super. Mein Problem besteht darin, das jedes Mal, wenn die Abfrage läuft, ein neuer Name vergeben wird. Dadurch wird die Namensliste unnötig immer länger. Beispiel:
Abfrage_von_dBASE_Dateien
Abfrage_von_dBASE_Dateien_1
Abfrage_von_dBASE_Dateien_2
Abfrage_von_dBASE_Dateien_3
Ich war schon bis zur 54 und da ich den Namen nicht mehr brauche ist Löschen schon der bessere Weg. Frage 2 ist also erledigt.
Maik
Anzeige
AW: Datenbank abfragen
12.12.2011 09:21:03
guentherh
Hallo Maik,
Vermutlich würdest Du besser zurechtkommen, wenn Du die Abfrage nur einmal zu erstellst, und im Makro nur die Methode
ActiveSheet.QueryTables("Abfrage von dBASE-Dateien").Refresh
verwendest. Das bringt die aktuellen Daten an den bestehenden Platz
Kannst Du manuell einen Import erzeugen, der keine gelöschten Datensätze enthält?
evtl. muss dem Treiber eine Option mitgegeben werden, die nur aktive Datensätze zurückgibt.
vielleicht gibt es jemanden derdBase erfahrung mit Excel hat und hier helfen kann.
AW: Datenbank abfragen
12.12.2011 09:54:03
Maik.F
Hallo Günther,
die Idee mit dem .Refresh hätte mir auch kommen können! Funktioniert super.
Zu Deiner Frage

Kannst Du manuell einen Import erzeugen, der keine gelöschten Datensätze enthält? 

kann ich kurz und knapp mit NEIN! antworten. Ich habe auch schon im Query eine entsprechende Option gesucht; leider ohne Erfolg.
Maik
Anzeige
AW: Datenbank abfragen
12.12.2011 10:58:18
guentherh
Ich habe zum Thema gelöschte Datensätze bei dBase zwar etwas im Web gefunden, leider nur für das gleiche Problem bei Access. Dort muss der Treiber in der MSAccess.ini eingestellt werden.
Könnte also sein das es um einen Registry-Eintrag geht, habe aber halt nichts konkretes für Dich
Gruß,
Günther

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige