Wahl der Leser
Populäre Artikel
Trotz der Tatsache, dassdbf wurde schon lange in Betracht gezogen Vermächtnis Format bleibt das Thema angesichts der Anzahl der Fragen im Internet immer noch eine dringende Aufgabe. Ich bin insbesondere darauf gestoßen, als ich versucht habe, eine Karte in den Tisch einzuführen. Karte ArcGIS enthaltene Metadaten im Format dbf . Es machte Sinn, sie gleichzeitig zu lesen SQL Server , um Beschriftungen für Polygone, Linien und andere kartografische Objekte nicht manuell zu schreiben. In alten Zeiten VisualFoxPro 6 und SQLServer 7.0 sindwar kein Problem , aber seitdem hat sich viel verändert. Mit dem Ausgang SQLServer 2005 auf MSDN Es wurden Informationen angezeigt, dass der SQL Server-Import- und Export-Assistent das Importieren und Exportieren von dBASE-Dateien und anderen DBF-Dateien nicht unterstützt. Als Lösung wird die Verwendung von SQL Server Integration Services oder der Staging-Import empfohlen Access oder Excel.Die Situation bleibt formal bis heute bestehen,einschließlich SQLServer 2012. Dies ist nicht immer praktisch, da zusätzlich zu SQL Server , erfordert eine zusätzliche Installation MS Office und Entwicklungstools ETL -Pakete sind in der kostenlosen Edition nicht enthalten SQLServerExpress . In dieser Notiz werde ich versuchen zu importieren dbf V SQL Server ohne etwas anderes zu verwenden als SQL Server.
Es ist eine Datei „regions2010_wgs.dbf“ vorhandenvon hier . Öffnen Sie SQLServerManagementStudio im ObjectExplorer Wählen Sie die Datenbank aus, in deren Tabelle wir importieren möchten dbf , und von Kontextmenü wir reden Daten importieren:
Abb.1
Wir geben als Datenquelle an.NetFrameworkDataProviderforODBC, seit ODBCJetzt ist wieder alles unser Ein und Alles, als ConnectionString- die folgende Verbindungszeichenfolge:
Driver=(Microsoft dBase Driver (*.dbf));SourceType=DBF;SourceDB=NA;Exclusive=No; NULL=Nein;Gelöscht=Nein;BackgroundFetch=Nein
Abb.2
KlickenNächste . Wenn Sie jetzt drücken Zurück, werden wir sehen, dass die Verbindungseigenschaften von Zeile zu Spalte erweitert wurden, sodass wir eine Liste von ihnen sehen und sehen können, was sie jeweils bedeuten:
Abb. 3
Beispiele für Verbindungszeichenfolgen für ODBC -dBase-Treiber sind beispielsweise in angegebenMicrosoftKnowledgeBase oder auf der Ressource Connectionstrings.com . Im Allgemeinen lässt sich der Zweck bestimmter Eigenschaften anhand ihrer Namen leicht erraten, mit Ausnahme vielleicht der Eigenschaft „Deleted“, die über einen solchen Zweck verfügtgenau die entgegengesetzte Bedeutung . Bekanntlich ist der Vorgang des Löschens einer Zeile in dBase /FoxPro führt nicht zu einer sofortigen physischen Entfernung aus der Datei. Die Zeile wird lediglich als gelöscht markiert. Mit dem Befehl wird die physische Bereinigung von Zeilen mit Löschkennzeichen und die Neuorganisation der Datei durchgeführt PACK . Der Wert NO weist den Treiber an, die gelöschten Zeilen in den zurückgegebenen Ergebnissatz aufzunehmen. Um sie im Gegenteil nicht anzuzeigen, müssen Sie JA einstellen. Klicken Nächste.
Der nächste Bildschirm ist einfach. Stellt eine Verbindung her mitSQL Server , einschließlich der Datenbank, aus der die Tabelle mit den Ergebnissen des Imports stammt dbf:
Abb.4
Fortfahren. Sie werden zur Auswahl aufgefordertdbf -te Tabelle aus der Tabellenliste oder schreiben Sie manuell eine Abfrage. Macht zum Beispiel Sinn z FoxPro schüchterne Basis, Dabei handelt es sich wie bei jeder normalen Datenbank um einen Container, der mehrere Tabellen enthält, in diesem Fall in Form von separaten dbf-Dateien. Für Einzelpersonen dbf -file funktioniert das nicht – siehe zum BeispielOdbcConnection . GetSchema(" tables") allwrongfor . dbfileund Support-Mitarbeiter Microsoft wird in dieser Situation empfohlen OLEDBProviderfürVisualFoxPro . Erstens ereignete sich der Vorfall lange vor der radikalen Änderung der Generallinie der Partei. OLEDB dann gehörte alles uns aODBC , im Gegenteil, auf alte Legacy-Schnittstellen angewendet. Zweitens verstehe ich nicht, warum Sie die Liste durchsuchen müssen dbfwenn er schon allein ist.
Im Falle von verstreutdbf , das sich im selben Verzeichnis befindet, muss in der Zeile angegeben werden ODBC-connections (Abb. 3) DefaultDir-Eigenschaft, zum Beispiel
Driver=(Microsoft dBase Driver (*.dbf));sourcetype=DBF;DefaultDir=c:\Temp;exclusive=No;null=No;deleted=No;backgroundfetch=No
DannSie können „Daten aus einer oder mehreren Tabellen oder Ansichten kopieren“ aktivieren.
Abb.5
und eine Liste wird angezeigt dbf in diesem Verzeichnis, aus dem Sie aufgefordert werden, Folgendes auszuwählen:
Abb.6
Aber ich habe nicht gefragt Standardverzeichnis in Abb. 3, also entscheide ich mich, eine Anfrage zu schreiben:
Abb.7
und ich schreibe:
Abb.8
AAls Antwort erhalte ich die Fehlermeldung: Das Microsoft Jet-Datenbankmodul konnte das Objekt „regions2010_wgs.dbf“ nicht finden:
Abb.9
Dieser Fehler tritt auf, weil der Treiber immer noch dumm istakzeptiert Dateinamen im MS-DOS 8.3-Format . Wenn Sie die Datei „regions2010_wgs.dbf“ beispielsweise in Folgendes umbenennen:aaa . dbf , und die Aufforderung in Abb. 8 sollte dementsprechend durch ersetzt werdenWählen Sie * aus c:\Temp\aaa.dbf aus, der Fehler verschwindet. Sie werden aufgefordert, eine vorhandene Tabelle auszuwählen oder den Namen der Tabelle anzugeben, auf der erstellt werden soll SQL Server in der Datenbank Datenbank 1 (siehe Abb. 4) unter den Ergebnissen des Imports aus dbf. Ich belasse den vorgeschlagenen Namen wie er ist:
Abb.10
Klicken Sie hier auf die SchaltflächeVorschau , können Sie eine Vorschau des Inhalts anzeigen dbf o es soll übertragen werden SQL Server:
Abb.11
Alles ist in Ordnung, aber das Abrakadabra anstelle des russischen Textes ist deprimierend. Der Grund für sein Erscheinen in populärer Form wird vom angesehenen Autor erklärt Lalex. Russische Zeichen fehlen, weil der dumme Fahrer wartet dbf Datei unter DOS oov-Kodierung ( CP866, auch bekannt als OEM ). Er scheint über das Format nachzudenken dbfein sehr altes, rein Dosovsky-Erbe. ArcView betrachtet DBF standardmäßig als Windows-Format ( ANSI1251). Diese beiden Programme stehen also da wie zwei Bullen und stützen ihre Stirn ab .
Der Grund ist also klar, es bleibt nur noch die Korrektur. Geben Sie Tänze mit einem Tamburin in die Verbindungslinie eincollate=MaschineoderRussisch / CodePage=ANSI / Sortierreihenfolge=1251führte nicht zum Erfolg. Geändert29. Byte Vaaa . dbf auf 0xC9 - null Emotionen. Tatsächlich ist das Codepage-Zeichen im Header dbf wird vom Fahrer ignoriert. Die Treibereinstellung kann jedoch in der Registrierung geändert werden. Es ist darin gespeichert DataCodePage auf dem Weg HKLM\ SOFTWARE\ Microsoft\ Jet\4.0\ Engines\ xBase oder HKLM\ SOFTWARE\ Microsoft\ Office\14.0\ AccessConnectivityEngine\ Engines\ Xbase oder dementsprechend HKLM\ SOFTWARE\ Wow6432 Node\ Microsoft\ Jet\4.0\ Engines\ xBase oder HKLM\ SOFTWARE\ Wow6432 Node\ Microsoft\ Office\14.0\ AccessConnectivityEngine\ Engines\ Xbase abhängig davon, ob es auf der Maschine installiert war Büro Und wenn ja, wie. Standardmäßig hat die Eigenschaft einen Wert OEM was dazu führt, dass der Treiber alles liest dbf s basiert auf dieser Kodierung. Wenn Sie es ändern in ANSI
Abb.12
Kyrillisch in ANSI dbf" e, natürlich, wird in menschlichen Begriffen gelesen:
Abb.13
Glücklicherweise ist kein Neustart erforderlich, sondern der Importassistent sollte geschlossen und erneut ab Abb. 1 wiederholt werden.
OK klickenNächste , beenden wir den Assistenten, wodurch er implizit erstellt und ausgeführt wird SSIS-Plastiktüte:
Abb.14
und wir bekommen Müll. Mensch!
Abb.15
Das ist in der Tat auch verständlich, warum. In der TabelleAbfrage Der Assistent hat ein Feld für die Importergebnisse erstellt Region Typ Varchar (200) ohne explizite Angabe der Kollation. Daher wird standardmäßig die Basissortierung verwendet. So kam es, dass die Basis Datenbank1 hatte eine nicht-russische Sortierung:
Abb.16
Um die Situation zu korrigieren, müssen Sie ein Feld erstellen Region Unicode oder korrigieren Sie die Sortierung. Übrigens, erhöhen wir die Länge. Ja, nur für den Fall.
Abb.17
Strukturänderungen speichern, Daten löschenTabellenabfrage abschneidenund wiederholen Sie den Import Abb. 1-14
Abb.18
Jetzt wird alles normal importiert. Das Einzige ist, ich sagte „Daten löschen“, aber ich habe vergessen, dies selbst zu tun, und auf dem Bild waren sie doppelt. Ich werde es nicht mehr wiederholen, weil es prinzipienlos ist. Die Bedeutung ist klar.
Alexey Shulenin
In diesem Artikel erkläre ich Ihnen, wie Sie in akzeptabler Zeit viele riesige DBF-Dateien, die aus Millionen von Datensätzen bestehen, in Ihre Datenbank auf einem MS-SQL-Server laden.
Die Aufgabe ist auf den ersten Blick trivial. Sie können den Assistenten im SQL Management Studio oder die OPENROWSET-Funktion über eine Abfrage verwenden.
Die erste Option wurde jedoch nach mehreren Versuchen aufgrund verschiedener Störungen und der Notwendigkeit, viele Dateien in eine Tabelle zu laden (ca. 100 Dateien), verworfen. Außerdem trat beim Laden über einen längeren Zeitraum ein Fehler auf.
Auch die zweite Option war aufgrund der unterschiedlichen Bitness der Treiber und der Bitness des Servers nicht geeignet.
Da die Datei einfach riesig ist, wurde beschlossen, sie über einen Stream zu lesen und in die Datenbank zu schreiben. Als nächstes müssen Sie, nachdem Sie eine Zeile in der Datei gelesen haben, diese Zeile in eine Tabelle schreiben. Das erste, was mir in den Sinn kam, war die Verwendung von „Einfügen“, aber das Schreiben würde in diesem Fall zu viel Zeit in Anspruch nehmen.
Und dann erinnerte ich mich an einen anderen Aufzeichnungsmechanismus über SqlBulkCopy, der es Ihnen ermöglicht, eine große Anzahl von Datensätzen ohne Einfügeabfragen hochzuladen.
Tatsächlich handelt es sich dabei um die Verwendung der Klasse SqlBulkCopy. Zum Schreiben müssen Sie lediglich die IDataReader-Schnittstelle implementieren.
Beginnen wir also mit der Implementierung der BDFBulkReader-Schnittstelle der öffentlichen Klasse: IDataReader
Beginnen wir mit einer Funktion, die den Wert des aktuellen Datensatzes zurückgibt:
öffentliches Objekt GetValue(int i) ( return R]; )
Ich möchte Sie darauf aufmerksam machen, dass die Felder in der Datei und die Felder in der Tabelle möglicherweise in unterschiedlicher Reihenfolge vorliegen. Und aus dem Index möchte ich den Wert für das entsprechende Tabellenfeld erhalten. Daher habe ich zusätzlich das FieldIndex-Wörterbuch verwendet, bei dem die Zuordnung von Feldnamen zu Zahlen in der SQL-Tabelle erfolgt. Der Feldname wird anhand der Nummer übernommen, und der Wert aus der Lesezeile der DBF-Datei wird anhand des Namens aus dem R-Wörterbuch übernommen. Infolgedessen gibt GetValue für den n-ten Index in der Datenbank den entsprechenden Wert zurück.
Wörterbuch
Wir übergeben FieldIndex, der bereits für die Tabelle ausgefüllt ist, und R füllt ihn, wenn der Leser die Read-Funktion aufruft, die wir in Zukunft auch implementieren werden.
Also, der Konstruktor:
System.IO.FileStream FS; Byte-Puffer; int_FieldCount; int FieldsLength; System.Globalization.DateTimeFormatInfo dfi = new System.Globalization.CultureInfo("en-US", false).DateTimeFormat; System.Globalization.NumberFormatInfo nfi = new System.Globalization.CultureInfo("en-US", false).NumberFormat; string FieldName; string FieldType; byteFieldSize; byteFieldDigs; int RowsCount; int ReadedRow = 0; Wörterbuch
Seine Aufgaben bestehen darin, die Datei zu öffnen und die Namen der Felder, ihre Anzahl und ihre Typen zu bestimmen. Der zweite Parameter des Konstruktors ist, wie ich oben geschrieben habe, ein Korrespondenzwörterbuch, sodass wir beispielsweise durch die erste Feldnummer garantiert das gewünschte Feld aus der Datei erhalten.
Kommen wir nun zur Implementierung von bool Read(). Es wird „true“ zurückgegeben, wenn die Zeile erfolgreich gelesen wurde. Und false, wenn die Zeile nicht gelesen wurde und gleichzeitig das Ende der Daten erreicht wurde.
Public bool Read() ( if (ReadedRow >= RowsCount) return false; R.Clear(); buffer = new byte; FS.ReadByte(); FS.Read(buffer, 0, buffer.Length); int Index = 0 ; für (int i = 0; i< FieldCount; i++) { string l = System.Text.Encoding.GetEncoding(866).GetString(buffer, Index, FieldSize[i]).TrimEnd(new char { (char)0x00 }).TrimEnd(new char { (char)0x20 }); Index = Index + FieldSize[i]; object Tr; if (l.Trim() != "") { switch (FieldType[i]) { case "L": Tr = l == "T" ? true: false; break; case "D": Tr = DateTime.ParseExact(l, "yyyyMMdd", dfi); break; case "N": { if (FieldDigs[i] == 0) Tr = int.Parse(l, nfi); else Tr = decimal.Parse(l, nfi); break; } case "F": Tr = double.Parse(l, nfi); break; default: Tr = l; break; } } else { Tr = DBNull.Value; } R.Add(FieldName[i], Tr); } ReadedRow++; return true; }
Ich möchte Sie noch einmal daran erinnern, dass die gelesene Zeile nach dem Aufruf in das R-Wörterbuch geschrieben wird, damit der Leser sie später lesen kann.
Es bleibt also nur noch die Methode zu implementieren, die die Anzahl der Felder zurückgibt:
Public int FieldCount ( get ( return _FieldCount; ) )
Und Stubs für die Schnittstelle:
Public void Dispose() ( FS.Close(); ) public int Depth ( get ( return -1; ) ) public bool IsClosed ( get ( return false; ) ) public Object this ( get ( return new object(); ) ) public Object this ( get ( return new object(); ) ) public int RecordsAffected ( get ( return -1; ) ) public void Close() ( ) public bool NextResult() ( return true; ) public bool IsDBNull(int i) ( return false; ) public string GetString(int i) ( return ""; ) public DataTable GetSchemaTable() ( return null; ) public int GetOrdinal(string name) ( return -1; ) public string GetName(int i) ( return ""; ) public long GetInt64(int i) ( return -1; ) public int GetInt32(int i) ( return -1; ) public short GetInt16(int i) ( return -1; ) public Guid GetGuid(int i) ( return new Guid(); ) public float GetFloat(int i) ( return -1; ) public Type GetFieldType(int i) ( return typeof(string); ) public double GetDouble(int i) ( return -1; ) public dezimal GetDecimal(int i) ( return -1; ) public DateTime GetDateTime(int i) ( return new DateTime(); ) public string GetDataTypeName(int i) ( return ""; ) public IDataReader GetData(int i) ( return this; ) public long GetChars(int i, long fieldoffset, char buffer, int bufferoffset, int length) ( return -1; ) public char GetChar(int i) ( return " "; ) public long GetBytes(int i, long fieldOffset, byte buffer, int bufferoffset, int length) ( return -1; ) public byte GetByte(int i) ( return 0x00; ) public bool GetBoolean(int i) ( false zurückgeben; ) public int GetValues(Objektwerte) ( -1 zurückgeben; )
Wo in Dispose() ich einfach die Datei schließe.
Sobald die Schnittstelle implementiert ist, können Sie eine Methode zum Laden der Datei schreiben:
Void SaveToTable(FileInfo dir, string TableName, string connestionString, Dictionary
Das ist alles. Alles, was noch an diese Funktion übergeben werden muss, ist der Dateispeicherort, der Tabellenname, die Verbindungszeichenfolge und das entsprechende passende Wörterbuch, zum Beispiel:
Wörterbuch
Das war's, vielen Dank für Ihre Aufmerksamkeit und viel Spaß beim Herunterladen.
Sie müssen Daten aus einem völligen Mist in MSSQL ziehen, der nur über ODBC verbunden werden kann. Darüber hinaus ist das Herstellen einer Verbindung auch faul. Es wäre schön, es im Handumdrehen zu erstellen.Auch wenn DBF schon lange als Legacy-Format gilt, bleibt das Thema, gemessen an der Zahl der Fragen im Internet, immer noch eine dringende Aufgabe. Ich bin insbesondere darauf gestoßen, als ich versucht habe, eine Karte in den Tisch einzuführen. Die ArcGIS-Karte enthielt Metadaten im DBF-Format. Es war sinnvoll, sie gleichzeitig in SQL Server zu lesen, um Beschriftungen für Polygone, Linien und andere Kartenobjekte nicht manuell zu schreiben. Zu Zeiten von Visual FoxPro 6 und SQL Server 7.0 war das kein Problem, aber seitdem hat sich viel geändert. Mit der Veröffentlichung von SQL Server 2005 berichtete MSDN, dass der SQL Server-Import-/Export-Assistent den Import und Export von dBASE-Dateien und anderen DBF-Dateien nicht unterstützt. Die empfohlene Lösung ist die Verwendung von SQL Server Integration Services oder der Zwischenimport in Access oder Excel. Formal bleibt die Situation bis heute bestehen, auch bei SQL Server 2012. Dies ist nicht immer praktisch, da zusätzlich zu SQL Server eine zusätzliche Installation von MS Office erforderlich ist und die Tools zum Entwickeln von ETL-Paketen nicht in der kostenlosen Edition von enthalten sind SQL Server Express. In diesem Beitrag werde ich versuchen, dbf in SQL Server zu importieren, ohne etwas anderes als SQL Server zu verwenden.
Es gibt eine Datei „regions2010_wgs.dbf“, die hier entnommen wurde. Öffnen Sie SQL Server Management Studio, wählen Sie im Objekt-Explorer die Datenbank aus, in deren Tabelle wir dbf importieren möchten, und sagen Sie im Kontextmenü „Daten importieren“:
Als Datenquelle geben wir den .Net Framework Data Provider für ODBC an, da ODBC nun wieder unser Alles ist, und als ConnectionString den folgenden Verbindungsstring:
Driver=(Microsoft dBase Driver (*.dbf));SourceType=DBF;SourceDB=NA;Exclusive=No; NULL=Nein;Gelöscht=Nein;BackgroundFetch=Nein
Weiter klicken. Wenn wir jetzt „Zurück“ drücken, werden wir sehen, dass die Verbindungseigenschaften von Zeile zu Spalte erweitert wurden, sodass wir eine Liste davon sehen und sehen können, was sie jeweils bedeuten:
Beispiele für Verbindungszeichenfolgen für den dBase ODBC-Treiber finden Sie beispielsweise in der Microsoft Knowledge Base oder auf Connectionstrings.com. Im Allgemeinen lässt sich der Zweck bestimmter Eigenschaften anhand ihrer Namen leicht erraten, mit Ausnahme vielleicht der Eigenschaft „Deleted“, die genau die entgegengesetzte Bedeutung hat. Wie Sie wissen, wird durch das Löschen einer Zeile in dBase/FoxPro diese nicht sofort physisch aus der Datei entfernt. Die Zeile wird lediglich als gelöscht markiert. Die physische Bereinigung von Zeilen, die ein Löschkennzeichen haben, und die Neuorganisation der Datei werden mit dem PACK-Befehl durchgeführt. Der Wert NO weist den Treiber an, die gelöschten Zeilen in den zurückgegebenen Ergebnissatz aufzunehmen. Um sie im Gegenteil nicht anzuzeigen, müssen Sie JA einstellen. Weiter klicken.
Der nächste Bildschirm ist einfach. Es wird eine Verbindung zum SQL Server hergestellt, einschließlich der Datenbank, in der die Tabelle mit den Ergebnissen des Imports aus dbf erstellt wird:
Fortfahren. Es wird empfohlen, eine DBF-Tabelle aus der Tabellenliste auszuwählen oder manuell eine Abfrage zu schreiben. Sinnvoll ist dies beispielsweise für eine FoxPro-Datenbank, bei der es sich wie jede normale Datenbank um einen Container handelt, der mehrere Tabellen enthält, in diesem Fall in Form separater DBF-Dateien. Für eine einzelne DBF-Datei funktioniert dies nicht – siehe zum Beispiel OdbcConnection.GetSchema("tables"), alles falsch für .dbf-Datei und Microsoft-Supportmitarbeiter haben in dieser Situation die Verwendung des OLE DB-Anbieters für Visual FoxPro empfohlen. Erstens ereignete sich der Vorfall lange vor der radikalen Änderung der Generallinie der Partei. OLE DB war damals unser Ein und Alles, ODBC hingegen gehörte zu den alten Legacy-Schnittstellen. Zweitens verstehe ich nicht, warum ich die DBF-Liste durchsuchen soll, wenn es bereits nur eine gibt.
Bei separaten Datenbanken, die sich im selben Verzeichnis befinden, müssen Sie die Eigenschaft DefaultDir in der ODBC-Verbindungszeile (Abb. 3) festlegen, z. B.
Driver=(Microsoft dBase Driver (*.dbf));sourcetype=DBF;DefaultDir=c:\Temp;exclusive=No;null=No;deleted=No;backgroundfetch=No
Anschließend können Sie „Daten aus einer oder mehreren Tabellen oder Ansichten kopieren“ aktivieren.
Und eine Liste der DBFS in diesem Verzeichnis wird angezeigt, aus der Sie aufgefordert werden, Folgendes auszuwählen:
Aber ich habe DefaultDir in Abb. 3 nicht angegeben, also schreibe ich eine Anfrage:
Und ich schreibe:
Als Antwort erhalte ich die Fehlermeldung „Das Microsoft Jet-Datenbankmodul konnte das Objekt „regions2010_wgs.dbf“ nicht finden“:
Dieser Fehler tritt auf, weil der dumme Treiber immer noch Dateinamen im MS-DOS 8.3-Format akzeptiert. Wenn Sie die Datei „regions2010_wgs.dbf“ beispielsweise in „aaa.dbf“ umbenennen und die Abfrage in Abb. 8 entsprechend durch „select * from c:\Temp\aaa.dbf“ ersetzen, verschwindet der Fehler. Sie werden aufgefordert, eine vorhandene auszuwählen oder den Namen der Tabelle anzugeben, die auf SQL Server in der Datenbank Database1 (siehe Abb. 4) für die Ergebnisse des Imports aus dbf erstellt wird. Ich belasse den vorgeschlagenen Namen wie er ist:
Wenn Sie hier auf die Schaltfläche „Vorschau“ klicken, können Sie eine Vorschau des Inhalts der Datenbank anzeigen, die an SQL Server übertragen werden soll:
Alles ist in Ordnung, aber das Abrakadabra anstelle des russischen Textes ist deprimierend. Den Grund für sein Erscheinen in populärer Form erklärt der angesehene Autor Lalex hier. Russische Zeichen verschwinden, weil der dumme Treiber eine dbf-Datei in DOS-Kodierung (CP866, auch bekannt als OEM) erwartet. Er scheint das DBF-Format für ein sehr altes, reines DOS-Erbe zu halten. ArcView betrachtet DBF standardmäßig als Windows-Format (ANSI 1251). Diese beiden Programme stehen also da wie zwei Bullen und stützen ihre Stirn ab.
Der Grund ist also klar, es bleibt nur noch die Korrektur. Das Tanzen mit einem Tamburin und die Eingabe von collate=Machine oder Russian / CodePage=ANSI / Collating Sequence=1251 in die Verbindungszeile führten nicht zum Erfolg. Ich habe das 29. Byte in aaa.dbf in 0xC9 geändert – null Emotionen. Tatsächlich wird das Codepage-Attribut im DBF-Header vom Treiber ignoriert. Die Treibereinstellung kann jedoch in der Registrierung geändert werden. Es wird in der DataCodePage unter dem Pfad HKLM\SOFTWARE\Microsoft\Jet\4.0\Engines\xBase oder HKLM\SOFTWARE\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Xbase bzw. HKLM\SOFTWARE\Wow6432Node\ gespeichert. Microsoft\Jet \4.0\Engines\xBase oder HKLM\SOFTWARE\Wow6432Node\Microsoft\Office\14.0\Access Connectivity Engine\Engines\Xbase, je nachdem, ob und wie Office auf dem Computer installiert wurde. Standardmäßig ist die Eigenschaft tatsächlich auf OEM gesetzt, wodurch der Treiber gezwungen wird, alle DBFS basierend auf dieser Kodierung zu lesen. Wenn Sie es in ANSI ändern
Kyrillisch in ANSI dbf"e wird natürlich auf menschliche Weise gelesen.
DBF – eine Datenbankdatei, deren Arbeitsfähigkeit zuvor in die Umgebung integriert war Microsoft Office. Access- und Excel-Anwendungen arbeiteten mit dem Format, später wurde Access aus dem Paket entfernt und wurde zu einem separaten Programm, und in Excel ist die DataBaseFile-Unterstützung seit 2007 erheblich eingeschränkt.
Wenn es nicht möglich ist, eine DBF-Datei direkt in Excel zu öffnen, müssen Sie sie zunächst konvertieren.
Obwohl DBF von vielen als veraltetes Format angesehen wird, wird es in Fachprogrammen in den Bereichen Wirtschaft, Design und Ingenieurwesen immer noch häufig verwendet. Überall dort, wo es darum geht, mit großen Informationsmengen zu arbeiten, sie zu strukturieren und zu verarbeiten sowie Abfragen auszuführen. Beispielsweise basiert das Softwarepaket 1C Enterprise vollständig auf der Datenbankverwaltung. Und da viele Office-Dokumentationen und -Daten in Excel verarbeitet werden, ist die Frage der integrierten Arbeit mit diesen Formaten relevant und gefragt.
Excel 2003 hatte die Möglichkeit, DBF zu öffnen und zu bearbeiten sowie XLS-Dokumente in diesem Format zu speichern:
WICHTIG. Seit 2007 können Sie das Datenbankformat in Excel öffnen und anzeigen, aber Sie können darin keine Änderungen vornehmen oder XLS-Dokumente speichern. Standardmittel Programme bieten diese Möglichkeit nicht mehr an.
Allerdings gibt es spezielle Add-Ons für die Anwendung, die diese um eine solche Funktion erweitern. Programmierer veröffentlichen ihre Entwicklungen online in verschiedenen Foren, die Sie finden können verschiedene Varianten. Das beliebteste Add-on namens XslToDBF kann von der Entwickler-Website http://basile-m.narod.ru/xlstodbf/download.html heruntergeladen werden. Der Download ist kostenlos, aber wenn Sie möchten, können Sie das Projekt unterstützen, indem Sie einen beliebigen Betrag auf Ihr Portemonnaie oder Ihre Karte überweisen.
Installation und Verwendung:
Wenn Sie in Office nichts ändern möchten und Add-Ins und Anwendungen von Drittanbietern nicht vertrauen, können Sie einen zeitaufwändigeren Weg zum Konvertieren einer XLS-Datei in DBF vorschlagen:
Diese Methode funktioniert nicht immer erfolgreich, es kommt häufig zu Fehlern bei der Datenverarbeitung und der anschließenden Speicherung. Und es ist sehr langwierig und unbequem.
Um nicht selbst darunter zu leiden Office-Programme Es wurden viele Anwendungen erstellt, mit denen Sie Daten von einem Format in ein anderes übertragen können. Zunächst einmal fast alles leistungsstarke Programme Für die Arbeit mit DBMS setzen sie die Möglichkeit voraus, nach XLS zu exportieren und von dort zu laden. Zweitens gibt es kleine Energieversorger, die sich auf die Konvertierung spezialisiert haben. Hier sind einige davon:
In all diesen Programmen läuft die Konvertierung darauf hinaus, die Quelldatei zu öffnen und dann den Befehl „Konvertieren“ oder „Exportieren“ auszuführen.
es gibt auch kostenlose Dienstleistungen Online-Konvertierungen. Auf solchen Websites werden Sie aufgefordert, die Quelldatei zu senden (herunterzuladen). Klicken Sie auf „Konvertieren“. Anschließend wird ein Link zum konvertierten Dokument angezeigt. Inwieweit Sie solchen Diensten vertrauen können, ist eine individuelle Entscheidung auf eigene Gefahr und Gefahr.
Sie können die DBF also in Excel öffnen, aber wenn die Version 2007 oder neuer ist, können Sie nichts mehr damit machen, schauen Sie einfach nach. Für die Bearbeitung und Speicherung in XLS sowie für die Konvertierung in die umgekehrte Richtung gibt es spezielle Add-Ons bzw. Programme. Wenn Sie Erfahrung mit der Konvertierung und Arbeit mit DBF in verschiedenen Anwendungen haben, teilen Sie uns Ihre Tipps in den Kommentaren mit.
DBF ist ein beliebtes Format zum Speichern und Austauschen von Daten zwischen verschiedenen Programmen und vor allem zwischen Anwendungen, die Datenbanken und Tabellenkalkulationen verwalten. Obwohl es veraltet ist, ist es in verschiedenen Bereichen weiterhin gefragt. Sie arbeiten beispielsweise weiterhin aktiv mit ihm zusammen Buchhaltungsprogramme, und Regulierungs- und Regierungsbehörden akzeptieren einen erheblichen Teil der Berichte in diesem Format.
Aber leider unterstützt Excel seit Excel 2007 dieses Format nicht mehr vollständig. Jetzt können Sie in diesem Programm nur noch den Inhalt der DBF-Datei anzeigen und das Speichern von Daten mit der angegebenen Erweiterung mithilfe der integrierten Tools der Anwendung ist nicht mehr möglich. Glücklicherweise gibt es andere Optionen zum Konvertieren von Daten Excel-Programme in dem Format, das wir brauchen. Schauen wir uns an, wie dies bewerkstelligt werden kann.
In Excel 2003 und früheren Versionen des Programms konnten Sie Daten mit der Standardmethode im DBF-Format (dBase) speichern. Dazu musste man auf den Artikel klicken "Datei" V horizontales Menü Anwendungen aus und wählen Sie dann eine Position in der Liste aus, die geöffnet wird "Speichern als…". Im sich öffnenden Speicherfenster müssen Sie den Namen des gewünschten Formats aus der Liste auswählen und auf die Schaltfläche klicken "Speichern".
Doch leider hielten Microsoft-Entwickler ab Excel 2007 dBase für veraltet und moderne Excel-Formate für zu komplex, als dass sie Zeit und Geld für die Gewährleistung der vollständigen Kompatibilität aufwenden müssten. Daher behielt Excel die Möglichkeit, DBF-Dateien zu lesen, die Unterstützung für das Speichern von Daten in diesem Format mit integrierten Softwaretools wurde jedoch eingestellt. Es gibt jedoch einige Möglichkeiten, in Excel gespeicherte Daten mithilfe von Add-Ins und anderer Software in DBF zu konvertieren.
Es gibt eine Reihe von Programmen, mit denen Sie Daten von Excel in DBF konvertieren können. Einer der meisten einfache Wege Das Konvertieren von Daten aus Excel in DBF besteht darin, ein Paket von Dienstprogrammen zum Konvertieren von Objekten mit verschiedenen Erweiterungen WhiteTown Converters Pack zu verwenden.
Obwohl der Installationsvorgang für dieses Programm einfach und intuitiv ist, werden wir uns dennoch ausführlich damit befassen und auf einige Nuancen hinweisen.
Die Registerkarte wird sofort geöffnet "Eingang" ("Eingeben"). Es soll das Objekt angeben, das konvertiert werden soll. Klicken Sie dazu auf den Button "Hinzufügen" ("Hinzufügen").
Wenn Sie die Option wählen "Ordner auswählen", dann öffnet sich ein vereinfachtes Verzeichnisauswahlfenster. Es werden nur Ordner angezeigt. Wählen Sie den zu speichernden Ordner aus und klicken Sie auf die Schaltfläche "OK".
Wir treffen eine Auswahl des Typs, der für die Verwendung in einem bestimmten Programm benötigt wird.
Das fertige Dokument befindet sich in dem Verzeichnis, das in der Registerkarte angegeben wurde "Ausgabe".
Der einzige wesentliche Nachteil der Methode mit dem Dienstprogramm WhiteTown Converters Pack besteht darin, dass Sie nur 30 Konvertierungsvorgänge kostenlos durchführen können und dann eine Lizenz erwerben müssen.
Sie können eine Excel-Arbeitsmappe direkt über die Anwendungsschnittstelle in dBase konvertieren, indem Sie Add-ons von Drittanbietern installieren. Eines der besten und bequemsten davon ist das XlsToDBF-Add-on. Betrachten wir den Algorithmus für seine Anwendung.
In der oberen linken Zelle geben wir den Namen ein, den wir der erstellten DBF-Datei zuweisen möchten. Es besteht aus zwei Teilen: dem Namen selbst und der Erweiterung. Es ist nur lateinisches Alphabet erlaubt. Ein Beispiel für einen solchen Namen ist "UCHASTOK.DBF".
Darüber hinaus ist in der Zeichenfolge ( CNN) und numerischer Typ ( Nnn) nach dem Namen in Form eines Buchstabens sollte angegeben werden Höchstbetrag Zeichen im Feld. Wenn der numerische Typ Dezimalstellen verwendet, muss deren Zahl auch nach dem Punkt angegeben werden ( Nnn.n).
Es gibt andere Datentypen im dBase-Format (Memo, Allgemein usw.), mit denen dieses Add-on jedoch nicht arbeiten kann. Allerdings konnte Excel 2003, als es die Konvertierung in DBF noch unterstützte, nicht damit arbeiten.
In unserem speziellen Fall ist das erste Feld eine Zeichenfolge mit einer Breite von 100 Zeichen ( C100), und die übrigen Felder sind numerisch, 10 Zeichen breit ( N10).
Sie können es etwas einfacher machen, indem Sie eine Hotkey-Kombination eingeben Alt+F8.
Wie Sie sehen, ist diese Methode viel komplizierter als die vorherige. Außerdem ist die Anzahl der verwendbaren Feldtypen und die Anzahl der Objekttypen, die mit der DBF-Erweiterung erstellt werden können, recht begrenzt. Ein weiterer Nachteil besteht darin, dass das dBase-Objekterstellungsverzeichnis nur vor dem Konvertierungsvorgang zugewiesen werden kann, indem die Quell-Excel-Datei direkt in den Zielordner verschoben wird. Zu den Vorteilen diese Methode Es ist anzumerken, dass es im Gegensatz zur vorherigen Option absolut kostenlos ist und fast alle Manipulationen direkt über die Excel-Schnittstelle durchgeführt werden.
Obwohl neue Versionen von Excel nicht über eine integrierte Möglichkeit zum Speichern von Daten im DBF-Format verfügen, gibt es dennoch eine Option, die genutzt werden kann Microsoft-Anwendungen Access kommt der Bezeichnung „Standard“ am nächsten. Tatsache ist, dass dieses Programm vom selben Hersteller wie Excel veröffentlicht wurde und auch im Microsoft Office-Paket enthalten ist. Darüber hinaus ist dies die sicherste Option, da Sie keinen Kontakt aufnehmen müssen Software Dritthersteller. Microsoft Access ist speziell für die Arbeit mit Datenbanken konzipiert.
Es ist auch möglich, Informationen aus einzelnen Bereichen in Blätter zu importieren. In unserem Fall ist dies jedoch nicht notwendig. Stellen Sie den Schalter auf Position "Blätter", und wählen Sie dann das Blatt aus, aus dem wir die Daten entnehmen möchten. Die Richtigkeit der Informationsanzeige kann am unteren Rand des Fensters überprüft werden. Wenn alles zufriedenstellend ist, drücken Sie die Taste. "Weiter".
Auf dem Feld "Datei Format" Wählen Sie einen von drei DBF-Formattypen aus:
Dabei ist zu berücksichtigen, dass je moderner das Format (je höher die Seriennummer), desto mehr Möglichkeiten zur Verarbeitung der darin enthaltenen Daten bestehen. Das heißt, es besteht eine höhere Wahrscheinlichkeit, dass alle Tabellendaten in der Datei gespeichert werden. Aber gleichzeitig ist die Wahrscheinlichkeit geringer, dass das Programm, in das Sie in Zukunft importieren werden, nicht funktioniert dbf-Datei, wird mit diesem Typ kompatibel sein.
Nachdem alle Einstellungen vorgenommen wurden, klicken Sie auf die Schaltfläche "OK".
Die erstellte Datei im dBase-Format befindet sich in dem Verzeichnis, das im Exportfenster angegeben wurde. Anschließend können Sie beliebige Manipulationen daran vornehmen, einschließlich des Imports in andere Programme.
Wie Sie sehen, verfügen moderne Excel-Versionen nicht über die Möglichkeit, Dateien mit integrierten Tools im DBF-Format zu speichern. Dieses Verfahren kann mit anderen Programmen und Add-ons durchgeführt werden. Es ist zu beachten, dass die funktionellste Konvertierungsmethode die Verwendung des WhiteTown Converters Pack ist. Leider ist die Anzahl der kostenlosen Konvertierungen darin begrenzt. Mit dem XlsToDBF-Add-on können Sie die Konvertierung völlig kostenlos durchführen, der Vorgang ist jedoch viel komplizierter. Darüber hinaus ist die Funktionalität dieser Option sehr eingeschränkt.
Die „goldene Mitte“ ist die Methode mit dem Access-Programm. Wie Excel ist es eine Entwicklung von Microsoft und daher Anwendung Dritter Du kannst ihn nicht mehr anrufen. Außerdem diese Option ermöglicht Ihnen die Konvertierung Excel-Datei in verschiedene Arten von dBase-Formaten. Obwohl Access in diesem Indikator dem WhiteTown-Programm immer noch unterlegen ist.
In Verbindung stehende Artikel: | |
So entfernen Sie Viren von Ihrem Computer, wenn das Antivirenprogramm sie nicht erkennt
Das Problem der Sicherheit mobiler Geräte ist eines der dringendsten ... So wählen Sie einen Benutzernamen auf Twitter aus. Twitter-Name für Mädchen auf Englisch
Nach der Registrierung werden Sie aufgefordert, mehrere schreibende Personen auszuwählen... Präsentation zum Thema „Paint-Grafikeditor“
Diese Lektion richtet sich an diejenigen, die sich mit der Arbeit eines Grafikers vertraut machen möchten... |