Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

DBF-Datenbankabfrage per VBA in Excel

Frage Microsoft Microsoft Office

Mitglied: HAPO-MF

HAPO-MF (Level 1) - Jetzt verbinden

12.12.2011, aktualisiert 16:29 Uhr, 7536 Aufrufe, 4 Kommentare

Excel-2003

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:
01.
Private Sub CommandButton1_Click() 
02.
     Range("BF1:BJ65536").Clear 
03.
     With ActiveSheet.QueryTables.Add(Connection:=Array(Array( _ 
04.
        "ODBC;DSN=dBASE-Dateien;DefaultDir=C:\;DriverId=533;FIL=dBase 5.0;MaxBufferSize=204" _ 
05.
           ), Array("8;PageTimeout=5;")), Destination:=Range("BF1")) 
06.
        .CommandText = Array( _ 
07.
           "SELECT ABPOS.ART_NR, ABPOS.SART_NR, ABPOS.MG_BES, ABPOS.TERMIN, ABPOS.AUSLIEFNR" & Chr(   _ 
08.
     13) & "" & Chr(10) & "FROM {oj `F:\STAND94`\ABPOS.DBF ABPOS LEFT OUTER JOIN `F:\STAND94`\ABKOPF. _ 
09.
     DBF ABKOPF ON ABPOS.AB_NR = ABKOPF.AB_NR}" & Chr(13) & "" & Chr(10) & "WH" _ 
10.
           , "ERE (ABKOPF.DEB_NR Like '1100%') AND (ABPOS.TERMIN Like '" & Format(CDate(Date), "yy")  _ 
11.
     & "%') AND (ABPOS.MG_GEL Is Null) AND (ABPOS.AUSLIEFNR Is Not Null)") 
12.
        .Name = "Abfrage von dBASE-Dateien" 
13.
        .FieldNames = False 
14.
        .RowNumbers = False 
15.
        .FillAdjacentFormulas = False 
16.
        .PreserveFormatting = False 
17.
        .RefreshOnFileOpen = False 
18.
        .BackgroundQuery = False 
19.
        .RefreshStyle = xlOverwriteCells 
20.
        .SavePassword = False 
21.
        .SaveData = True 
22.
        .AdjustColumnWidth = False 
23.
        .RefreshPeriod = 0 
24.
        .PreserveColumnInfo = False 
25.
        .Refresh BackgroundQuery:=False 
26.
     End With 
27.
     Call DieseArbeitsmappe.StarteAuswahlBox 'Hier beginnen die weiteren Auswertungen 
28.
     End Sub
Das funktioniert so auch schon sehr gut, aber: 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?
Bin für jede Hilfe dankbar!

[Edit] Codeformatiert, damit es vielleicht eine/r lesen mag [/Code]
Mitglied: Biber
12.12.2011 um 17:03 Uhr
Moin HAPO-MF,

meines Wissens nach wird die dBase-Einstellung SET DELETED OFF zum Überlesen der (logisch) gelöschten bzw. der als gelöscht markierten Sätze von keinem der in freier Wildbahn befindlichen Treiber erkannt.

Ist bei deinem Treiber (DriverID 533) so, war aber auch so bei dBase IV (DriverID 277?) und dBaseIII (+).

Falls du diese Wahrheit (sorry, ich bin ja nur der Bote) an dich heranlässt, dann bleiben folgende vertretbare Workarounds
  • Wenn du noch ein dBase im Betrieb hast, dann mach endlich ein PACK und dann hast du keine logisch gelöschten Sätze mehr.
  • oder lies diese Dbase-Trümmer mit einem FoxPro-Treiber -> der kann putzigerweise dBase lesen UND die DELETED-Sätze erkennen

--> alles andere ist witzlos, du könntest die Daten natürlich nach Access, Excel,.... ziemlich jedem Format "importieren" jeweils mit der Applikation Access, Excel,....usw.
Aber egal wer es importiert, die DELETED-Sätze werden entweder mit übernommen (also nicht erkannt als gelöscht) oder aber, falls zufällig "der erste Importsatz" eine Löschmarkierung hat, dann werden ganze 0 Datensätze übernommen.

Der dritte (unvertretbare) Workaround ist -> lies diese dBase-Daten ohne Treiber und ohne ODBC, mit einem byteweise-arbeitenden Schnipsel.
Alle dBase-Formate sind voll durchdokumentiert und es sind relatv harmlose Flatfiles (mit Header und danach fester Zeilenlänge).
Wenn die Daten wichtig sind, dann suchmaschine danach, ansonsten vergiss es.

Falls du (du hast ja in mehreren Foren crossgepostet) anderswo eine "echte" Lösung findest, bitte stell sie auch bei uns ab.

Grüße
Biber
Bitte warten ..
Mitglied: HAPO-MF
14.12.2011 um 16:32 Uhr
Hallo Biber,

vielen Dank für Deine ausführliche Antwort. Ich war kurz davor, Deine "Wahrheit" als mein Schicksal zu akzeptieren, bin dann aber auf die "echte" und vor allem einfache Lösung gestossen! Für alle, die es interessiert:

<Start> <Systemsteuerung> <Verwaltung> <Datenquellen (ODBC)>

Auf der Registerkarte "Benutzer-DSN" sollten alle installierten Datenbanktreiber aufgelistet sein. In meinem Falle:
- Name = "dBASE-Dateien"
- Treiber = "Microsoft dBase Driver (*.dbf)

Diesen Treiber anwählen und dann rechts auf "Konfigurieren" klicken. In dem neuen Fenster rechts unten auf "Optionen>>" klicken und das Häkchen bei "Gelöschte Zeilen anzeigen" entfernen.

GESCHAFFT!!! Excel importiert NICHT mehr die gelöschten Datensätze!!!

PS: Die Lösung poste ich nur hier...
Bitte warten ..
Mitglied: Biber
14.12.2011 um 17:00 Uhr
Moin HAPO-MF,

danke auch für deine Antwort.

Bin in der Tat überrascht, dass es da jetzt doch etwas "unkompliziertes" geben könnte.

Beim postwendenden Versuch, das an meiner neuen (und deshalb relativ ungepimpten) Windows7-Büchse auszuprobieren, kam allerdings sofort eine Meldung des "Microsoft ODBC-Administrators" beim Anfassen des dBASE-Treibers.

"Die Setup-Routinen für den Microsoft Access dBASE Driver (*.dbf, *.ndx, *.mdx) ODBC-Treiber konnten nicht gefunden werden. Installieren Sie den Treiber erneut."

Aber ich denke, das ist ein (für Redmonder PraktikantInnen) relativ normaler Bug, der alle Benutzer-ODBC-Treiber betrifft, die ohne vorheriges Anschauen mit Admin-Rechten benutzt werden sollen. Stümper, damische, amerikanische.

Wenn ich bei Gelegenheit mal wieder mit Admin-Rechten unterwegs bin, probiere ich es noch mal.
[Nachtrag] Die Fehlermeldung geht nach dem nächsten OK noch weiter, hab ich grad gemerkt.


Fehler bei ConfigDSN, ConfigDriver oder ConfigTranslator

Fehler gefunden.
Der angegebene DSN weist eine nicht übereinstimmende Architektur von Treiber und Anwendung auf.


Nein, liebe Redmonder.
Das weist eher eine fehlende Passgenauigkeit von Anforderungen und Voraussetzungen auf, ihr Dödel.

Ich hau mir jezz' auch einen Glühwein in'n Kopp.
[/Nachtrag]
[Nachtrag2 am 17.12.2011]
Unter Vista/Office2003 funktioniert es in der Tat wie oben beschrieben.
Unter Win7 komme ich es (auch mit Admin-Rechten) nicht hin.
Habe es allerdings auch nicht weiter verfolgt, da ich keinen eigenen Leidensdruck zum Einlesen von DBF-Dateien habe.
[/Nachtrag2 am 17.12.2011]
Grüße
Biber
Bitte warten ..
Mitglied: HAPO-MF
14.12.2011 um 17:11 Uhr
Zitat von Biber:
Ich hau mir jezz' auch einen Glühwein in'n Kopp.

In diesem Sinne: Schönen Feierabend!
Bitte warten ..
Neuester Wissensbeitrag
Windows 10

Powershell 5 BSOD

(8)

Tipp von agowa338 zum Thema Windows 10 ...

Ähnliche Inhalte
Microsoft Office
gelöst Verschieben von Zellinformation in andere Spalte (per VBA) excel 2010 (5)

Frage von thomas1972 zum Thema Microsoft Office ...

VB for Applications
Bilder vom LDAP in VBA - Excel (3)

Frage von Roadrunner777 zum Thema VB for Applications ...

VB for Applications
gelöst VBA Excel Recordset - Abfrage auf SQL-Server (4)

Frage von Aximand zum Thema VB for Applications ...

VB for Applications
Excel VBA Sortierung von Daten (5)

Frage von easy4breezy zum Thema VB for Applications ...

Heiß diskutierte Inhalte
Microsoft
Ordner mit LW-Buchstaben versehen und benennen (21)

Frage von Xaero1982 zum Thema Microsoft ...

Netzwerkmanagement
gelöst Anregungen, kleiner Betrieb, IT-Umgebung (18)

Frage von Unwichtig zum Thema Netzwerkmanagement ...

Festplatten, SSD, Raid
M.2 SSD wird nicht erkannt (14)

Frage von uridium69 zum Thema Festplatten, SSD, Raid ...

Windows Update
Treiberinstallation durch Windows Update läßt sich nicht verhindern (14)

Frage von liquidbase zum Thema Windows Update ...