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