Top-Themen

Aktuelle Themen (A bis Z)

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, 7971 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 ..
Ähnliche Inhalte
Microsoft
Excel-Datei mit VBA speichern
gelöst Frage von 116408Microsoft6 Kommentare

Guten Tag Ich habe eine Excel-Datei, in der in D4 der Kundenname und in D11 das Projekt benennt wird. ...

Basic
Excel VBA enthält
Frage von AngelsBasic

Guten Tag Ich bin ganz neu in diesem Forum und hätte eine Frage. Wie kann ich bei diesem bestehenden ...

Microsoft Office
Excel VBA Wert hochzählen
gelöst Frage von Florian86Microsoft Office1 Kommentar

Hallo, ich habe im VBA Code folgendes stehen Range("E10") = Range("E10") + 1 Jetzt ist der Wert bei schon ...

Microsoft Office
Unterordner durchsuchen Excel VBA
Frage von schwalbepilotMicrosoft Office1 Kommentar

Hi, ich habe mir ein Makro gebastelt, mit dem ich Daten aus mehreren Word Tabellen auslesen kann. Das Makro ...

Neue Wissensbeiträge
Perl

Perl hat heute Geburtstag: 30 Jahre Perl: Lange Gesichter zum Geburtstag

Information von Penny.Cilin vor 5 StundenPerl2 Kommentare

Hallo, auch wenn es wenige wissen und noch weniger Leute es nutzen. Perl hat heute Geburtstag. 30 Jahre Perl ...

Sicherheit

Blackberry stirbt - Keine Updates für Priv mehr

Tipp von certifiedit.net vor 6 StundenSicherheit

Blackberry wird zu einer 08/15 Firma und geht wohl mehr und mehr den Weg, den HTC schon ging. Von ...

Windows 10

Autsch: Microsoft bündelt Windows 10 mit unsicherer Passwort-Manager-App

Tipp von kgborn vor 2 TagenWindows 1010 Kommentare

Unter Microsofts Windows 10 haben Endbenutzer keine Kontrolle mehr, was Microsoft an Apps auf dem Betriebssystem installiert (die Windows ...

Sicherheits-Tools

Achtung: Sicherheitslücke im FortiClient VPN-Client

Tipp von kgborn vor 2 TagenSicherheits-Tools

Ich weiß nicht, wie häufig die NextGeneration Endpoint Protection-Lösung von Fortinet in deutschen Unternehmen eingesetzt wird. An dieser Stelle ...

Heiß diskutierte Inhalte
Batch & Shell
Kann man mit einer .txt Datei eine .bat Datei öffnen?
gelöst Frage von HelloWorldBatch & Shell22 Kommentare

Wie schon im Titel beschrieben würde ich gerne durch einfaches klicken auf eine Text oder Word Datei eine Batch ...

Netzwerkgrundlagen
Belibiges Teilnetz einer Subnetzmaske rausfinden?
gelöst Frage von CenuzeNetzwerkgrundlagen18 Kommentare

Wundervollen Gutentag, mittlerweile kann ich Subnetting so einigermaßen, aber ein Problem habe ich noch. Netzwerkadresse und Boradcast errechnen ist ...

LAN, WAN, Wireless
WLAN Reichweite erhöhen mit neuer Antenne
gelöst Frage von gdconsultLAN, WAN, Wireless12 Kommentare

Hallo, ich besitze einen TL-WN722N USB-WLAN Dongle mit einer richtigen Antenne. Ich frage mich jetzt ob man die Reichweite ...

Windows Server
Logging von "gesendeten Nachrichten" auf Terminalservern
gelöst Frage von Z3R0C0MM4N0THiN6Windows Server10 Kommentare

Hallo zusammen, kann mir jemand auf kurzem Wege sagen ob 1) die per Task-Manager (oder damals tsadmin) an Benutzer ...