Μετατροπή δεδομένων από το Microsoft Excel σε μορφή DBF. Εξαγωγή δεδομένων σε αρχείο dBASE

Το dBASE είναι ένα από τα παλαιότερα συστήματα διαχείρισης βάσεων δεδομένων και η μορφή αρχείου dBASE (DBF) χρησιμοποιείται εδώ και πολύ καιρό. Microsoft Accessυποστηρίζει την εξαγωγή δεδομένων στις ακόλουθες μορφές αρχείων dBASE: dBASE III, dBASE IV, dBASE 5 και dBASE 7.

Σημείωσηότι η υποστήριξη dBASE έχει τις ακόλουθες απαιτήσεις.

    Συνδρομή στο Office 365Εάν είστε συνδρομητής του Office 365, βεβαιωθείτε ότι έχετε την πιο πρόσφατη έκδοση Έκδοση του Office. Εάν είστε επαγγελματίας πληροφορικής και διαχειρίζεστε τη διαδικασία ενημέρωσης του Office 365, επισκεφτείτε τη σελίδα Έκδοση καναλιού για να δείτε ποιες ενημερώσεις παρέχονται σε κάθε κανάλι.

    Office 2016Εγκαταστήστε τις ακόλουθες ενημερώσεις με τη σειρά που παρατίθεται: Ενημερωμένη έκδοση 2 Μαΐου 2017 για το Office 2016 (KB3115501) και Ενημερωμένη έκδοση 2 Μαΐου 2017 για Access 2016 (KB3178700).

    Εκδόσεις του Office 2016 Click-to-RunΟι ενημερώσεις εφαρμόζονται αυτόματα.

Εξαγωγή δεδομένων σε αρχείο dBASE

Αυτό θα δημιουργήσει ένα αρχείο dBASE στην καθορισμένη θέση και μορφή.

Η Access 2013 δεν υποστηρίζει τη μορφή dBASE

Η εξαγωγή σε dBASE δεν υποστηρίζεται στην Access 2013. Για να εργαστείτε με αρχεία dBASE, δοκιμάστε να κάνετε αναβάθμιση στη συνδρομή σας στο Office 365 Η εξαγωγή σε dBASE είναι διαθέσιμη στις συνδρομητικές εκδόσεις της Access.

  • Φροντιστήριο

Σε αυτό το άρθρο θα σας πω πώς να φορτώσετε πολλά τεράστια αρχεία dbf που αποτελούνται από εκατομμύρια εγγραφές στη βάση δεδομένων σας σε έναν διακομιστή ms sql σε αποδεκτό χρόνο.

Το έργο είναι ασήμαντο με την πρώτη ματιά. Μπορείτε να χρησιμοποιήσετε τον οδηγό στο στούντιο διαχείρισης sql ή τη λειτουργία OPENROWSET μέσω ερωτήματος.

Αλλά η πρώτη επιλογή, μετά από αρκετές προσπάθειες, απορρίφθηκε λόγω διαφόρων δυσλειτουργιών και της ανάγκης να φορτωθούν πολλά αρχεία σε έναν πίνακα (περίπου 100 αρχεία). Επιπλέον, κατά τη φόρτωση για μεγάλο χρονικό διάστημα, παρουσιάστηκε σφάλμα.

Η δεύτερη επιλογή δεν ήταν επίσης κατάλληλη λόγω του διαφορετικού bit των προγραμμάτων οδήγησης και του bit του διακομιστή.

Δεδομένου ότι το αρχείο είναι απλά τεράστιο, αποφασίστηκε να το διαβάσουμε μέσω μιας ροής και να το γράψουμε στη βάση δεδομένων. Στη συνέχεια, αφού διαβάσετε μια γραμμή στο αρχείο, πρέπει να γράψετε αυτήν τη γραμμή σε έναν πίνακα. Το πρώτο πράγμα που μου ήρθε στο μυαλό ήταν να χρησιμοποιήσετε το ένθετο, αλλά το γράψιμο σε αυτήν την περίπτωση θα έπαιρνε πολύ χρόνο.

Και μετά θυμήθηκα έναν άλλο μηχανισμό εγγραφής μέσω του SqlBulkCopy, ο οποίος σας επιτρέπει να ανεβάσετε έναν τεράστιο αριθμό εγγραφών χωρίς ερωτήματα εισαγωγής.
Στην πραγματικότητα, αυτή είναι η χρήση της κλάσης SqlBulkCopy, για να γράψετε μέσω της οποίας χρειάζεται μόνο να εφαρμόσετε τη διεπαφή IDataReader.

Ας ξεκινήσουμε λοιπόν με την υλοποίηση της δημόσιας κλάσης διεπαφή BDFBulkReader: IDataReader

Ας ξεκινήσουμε με μια συνάρτηση που επιστρέφει την τιμή της τρέχουσας εγγραφής:
δημόσιο αντικείμενο GetValue(int i) (επιστροφή R];)
Επιτρέψτε μου να επιστήσω την προσοχή σας στο γεγονός ότι τα πεδία στο αρχείο και τα πεδία στον πίνακα μπορεί να έχουν διαφορετική σειρά. Και από το ευρετήριο θα ήθελα να πάρω την τιμή για το αντίστοιχο πεδίο πίνακα. Ως εκ τούτου, χρησιμοποίησα επιπλέον το λεξικό FieldIndex, όπου γίνεται η αντιστοίχιση των ονομάτων πεδίων με αριθμούς στον πίνακα sql. Το όνομα του πεδίου λαμβάνεται με αριθμό και η τιμή από τη γραμμή ανάγνωσης του αρχείου dbf λαμβάνεται με όνομα από το λεξικό R. Ως αποτέλεσμα, για το nο ευρετήριο στη βάση δεδομένων, το GetValue θα επιστρέψει την αντίστοιχη τιμή.
Λεξικό R = νέο Λεξικό () Λεξικό FieldIndex = νέο Λεξικό ();

Θα περάσουμε το FieldIndex που έχει ήδη συμπληρωθεί για τον πίνακα και το R θα το γεμίσει όταν ο αναγνώστης καλέσει τη συνάρτηση Read, την οποία θα εφαρμόσουμε επίσης στο μέλλον.

Λοιπόν, ο κατασκευαστής:

System.IO.FileStream FS; byte buffer? 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; συμβολοσειρά Όνομα πεδίου; συμβολοσειρά FieldType; byteFieldSize; byteFieldDigs; int RowsCount; int ReadedRow = 0; Λεξικό R = νέο Λεξικό () Λεξικό FieldIndex = νέο Λεξικό () δημόσιο BDFBulkReader(string FileName, Dictionary FieldIndex) ( FS = new System.IO.FileStream(FileName, System.IO.FileMode.Open); buffer = νέο byte; FS.Position = 4; FS.Read(buffer, 0, buffer.Length); RowsCount = buffer + (buffer * 0x100) + (buffer * 0x100000) - buffer = FS. 1) / 32) - 1 FieldName = new string[_FieldCount].Position = 32;< _FieldCount; i++) { FieldName[i] = System.Text.Encoding.Default.GetString(buffer, i * 32, 10).TrimEnd(new char { (char)0x00 }); FieldType[i] = "" + (char)buffer; FieldSize[i] = buffer; FieldDigs[i] = buffer; FieldsLength = FieldsLength + FieldSize[i]; } FS.ReadByte(); this.FieldIndex = FieldIndex; }

Τα καθήκοντά του είναι να ανοίξει το αρχείο, να καθορίσει τα ονόματα των πεδίων, τον αριθμό και τους τύπους τους. Η δεύτερη παράμετρος του κατασκευαστή, όπως έγραψα παραπάνω, είναι ένα λεξικό αντιστοιχιών, έτσι ώστε, για παράδειγμα, με τον αριθμό του πρώτου πεδίου να έχουμε εγγύηση ότι θα λάβουμε το απαιτούμενο πεδίο από το αρχείο.

Τώρα ας προχωρήσουμε στην υλοποίηση του bool Read(). Θα επιστρέψει true εάν η γραμμή διαβάστηκε με επιτυχία. Και false αν δεν διαβαζόταν η γραμμή και ταυτόχρονα έφτανε στο τέλος των δεδομένων.

Δημόσιο bool Read() ( if (ReadedRow >= RowsCount) επιστρέψει false; R.Clear(); buffer = νέο byte; FS.ReadByte(); FS.Read(buffer, 0, buffer.Length); int Index = 0 ; για (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; }

Να σας υπενθυμίσω για άλλη μια φορά ότι αφού την καλέσετε, η γραμμή ανάγνωσης θα γραφτεί στο λεξικό R για μετέπειτα ανάγνωση από τον αναγνώστη.
Έτσι, το μόνο που μένει είναι να εφαρμόσουμε τη μέθοδο που επιστρέφει τον αριθμό των πεδίων:

Public int FieldCount ( get ( return _FieldCount; ) )

Και στελέχη για τη διεπαφή:

Public void Dispose() ( FS.Close(); ) public int Depth ( get ( return -1; ) ) public bool IsClosed ( get ( return false; ) ) public Αντικείμενο αυτό ( get ( return new object(); ) ) public Αντικείμενο αυτό ( 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) ( επιστροφή νέου οδηγού(); ) δημόσιο float GetFloat(int i) ( return -1; ) public Τύπος GetFieldType(int i) ( return typeof(string); ) public double GetDouble(int i) ( return -1; ) public δεκαδικός GetDecimal(int i) ( return -1; ) public DateTime GetDateTime(int i) ( return new DateTime(); ) δημόσια συμβολοσειρά GetDataTypeName(int i) (επιστρέφει ""; ) δημόσια IDataReader GetData(int i) (επιστρέφει αυτό; ) δημόσιο long GetChars(int i, long fieldoffset, char buffer, int bufferoffset, int length) ( return -1; ) δημόσιο 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; ) δημόσιο bool GetBoolean(int i) ( return false; ) public int GetValues(Τιμές αντικειμένου) ( return -1; )

Όπου στο Dispose() απλά κλείνω το αρχείο.

Μόλις υλοποιηθεί η διεπαφή, μπορείτε να γράψετε μια μέθοδο για τη φόρτωση του αρχείου:

Void SaveToTable(FileInfo dir, string TableName, string connestionString, Dictionary FieldIndex) (χρησιμοποιώντας (var loader = νέο SqlBulkCopy(connestionString, SqlBulkCopyOptions.Default)) (loader.DestinationTableName = TableName; loader.BulkCopyTimeout = 9999; loader.WriteToDullanderBer. ) )

Αυτό είναι όλο. Το μόνο που μένει για να περάσει σε αυτήν τη συνάρτηση είναι η θέση του αρχείου, το όνομα του πίνακα, η συμβολοσειρά σύνδεσης και το αντίστοιχο λεξικό, για παράδειγμα:

Λεξικό FieldIndex= νέο Λεξικό () FieldIndex.Add(0, "POSTALCODE"); FieldIndex.Add(1, "IFNSFL"); FieldIndex.Add(2, "TERRIFNSFL"); FieldIndex.Add(3, "IFNSUL"); FieldIndex.Add(4, "TERRIFNSUL"); FieldIndex.Add(5, "OKATO"); FieldIndex.Add(6, "OKTMO"); FieldIndex.Add(7, "UPDATEDATE"); FieldIndex.Add(8, "HOUSENUM"); FieldIndex.Add(9, "ESTSTATUS"); FieldIndex.Add(10, "BUILDNUM"); FieldIndex.Add(11, "STRUCNUM"); FieldIndex.Add(12, "STRSTATUS"); FieldIndex.Add(13, "HOUSEID"); FieldIndex.Add(14, "HOUSEGUID"); FieldIndex.Add(15, "AOGUID"); FieldIndex.Add(16, "STARTDATE"); FieldIndex.Add(17, "ENDDATE"); FieldIndex.Add(18, "STATSTATUS"); FieldIndex.Add(19, "NORMDOC"); FieldIndex.Add(20, "COUNTER");

Αυτό ήταν, σας ευχαριστώ όλους για την προσοχή σας, καλή λήψη.

Αν καιdbf θεωρείται από καιρόκληρονομιά μορφή, το θέμα εξακολουθεί να παραμένει μια επείγουσα εργασία, αν κρίνουμε από τον αριθμό των ερωτήσεων στο Διαδίκτυο. Συγκεκριμένα, το συνάντησα όταν προσπαθούσα να βάλω μια κάρτα στο τραπέζι. Χάρτης ArcGIS περιείχε μεταδεδομένα στη μορφή dbf . Ήταν λογικό να τα διαβάζουμε ταυτόχρονα SQLServer , ώστε να μην γράφονται χειροκίνητα ετικέτες για πολύγωνα, γραμμές και άλλα χαρτογραφικά αντικείμενα. Στα αρχαία χρόνιαΤο VisualFoxPro 6 και ο SQLServer 7.0 είναιδεν ήταν πρόβλημα , αλλά πολλά έχουν αλλάξει από τότε. Με την έξοδο SQLServer 2005 σε MSDN εμφανίστηκαν πληροφορίες ότι ο οδηγός εισαγωγής και εξαγωγής SQL Serverδεν υποστηρίζει εισαγωγή και εξαγωγή αρχείων dBASE και άλλων αρχείων DBF. Ως λύση, συνιστάται η χρήση των υπηρεσιών ενοποίησης του SQL Server ή η σταδιακή εισαγωγή σε Access ή Excel.Η ίδια κατάσταση παραμένει επίσημα μέχρι σήμερα,συμπεριλαμβανομένου του SQLServer 2012. Αυτό δεν είναι πάντα βολικό γιατί, επιπλέον SQLServer , απαιτεί πρόσθετη εγκατάσταση MS office και εργαλεία ανάπτυξης ETL - τα πακέτα δεν περιλαμβάνονται στη δωρεάν έκδοση SQLServerExpress . Σε αυτό το σημείωμα θα προσπαθήσω να εισάγω dbf V SQLServer χωρίς να χρησιμοποιήσετε τίποτα άλλο εκτός από SQLServer.

Έχει ληφθεί ένα αρχείο regions2010_wgs.dbfαπό εδώ . Ανοίξτε το SQLServerManagementStudio στο ObjectExplorer επιλέξτε τη βάση δεδομένων στον πίνακα της οποίας θα εισάγουμε dbf , και από κατάλογος συμφραζόμενωνμιλάμεΕισαγωγή Δεδομένων:

Εικ.1

Υποδεικνύουμε ως πηγή δεδομένων.NetFrameworkDataProviderforODBC, από το ODBCτώρα πάλι τα πάντα, όπως και ConnectionString- την ακόλουθη συμβολοσειρά σύνδεσης:

Driver=(Microsoft dBase Driver (*.dbf));SourceType=DBF;SourceDB=NA;Exclusive=No; NULL=No;Deleted=No;BackgroundFetch=No

Εικ.2

Κάντε κλικΕπόμενο . Εάν τώρα πατήσετεΠίσω, θα δούμε ότι οι ιδιότητες σύνδεσης έχουν επεκταθεί από γραμμή σε στήλη, έτσι ώστε να μπορούμε να δούμε μια λίστα με αυτές και να δούμε τι ισούται με καθεμία από αυτές:

Εικ.3

Παραδείγματα συμβολοσειράς σύνδεσης για ODBC Προγράμματα οδήγησης -dBase δίνονται, για παράδειγμα, στοMicrosoftKnowledgeBase ή στον πόρο connectionstrings.com . Γενικά, ο σκοπός ορισμένων ιδιοκτησιών είναι εύκολο να μαντέψει κανείς από τα ονόματά τους, εκτός ίσως από την ιδιότητα Διαγραμμένα, η οποία έχειακριβώς το αντίθετο νόημα . Όπως είναι γνωστό, η λειτουργία της διαγραφής μιας σειράς μέσα dBase /FoxPro δεν οδηγεί σε άμεση φυσική αφαίρεσή του από το αρχείο. Η γραμμή επισημαίνεται μόνο ότι έχει διαγραφεί. Ο φυσικός καθαρισμός των γραμμών που έχουν σημαία διαγραφής και η αναδιοργάνωση του αρχείου εκτελούνται με την εντολήΠΑΚΕΤΟ . Η τιμή NO λέει στο πρόγραμμα οδήγησης να συμπεριλάβει τις διαγραμμένες σειρές στο επιστρεφόμενο σύνολο αποτελεσμάτων. Για να μην τα εμφανίσετε, αντίθετα, πρέπει να ορίσετε το ΝΑΙ. Κάντε κλικΕπόμενο.

Η επόμενη οθόνη είναι απλή. Ρυθμίζει μια σύνδεση μεSQLServer , συμπεριλαμβανομένης της βάσης δεδομένων στην οποία ο πίνακας με τα αποτελέσματα εισαγωγής από dbf:

Εικ.4

Προχώρα. Σας ζητείται να επιλέξετεdbf -ο πίνακας από τη λίστα των πινάκων ή γράψτε ένα ερώτημα χειροκίνητα. Λογικό, για παράδειγμα, για FoxPro λαμπερή βάση, η οποία, όπως κάθε κανονική βάση δεδομένων, είναι ένα κοντέινερ που περιέχει πολλούς πίνακες, σε αυτήν την περίπτωση με τη μορφή ξεχωριστώναρχεία dbf. Για ατομικό dbf -αρχείο αυτό δεν λειτουργεί - δείτε, για παράδειγμα,Σύνδεση Odbc . GetSchema("πίνακες") allwrongfor . dbfileκαι το προσωπικό υποστήριξης Microsoft συνιστάται η χρήση σε αυτήν την περίπτωση OLEDBProviderforVisualFoxPro . Πρώτον, το περιστατικό έγινε πολύ πριν από τη ριζική αλλαγή στη γενική γραμμή του κόμματος. OLEDB τότε ήταν όλα δικά μας aODBC , αντίθετα, εφαρμόζεται σε παλιές διεπαφές παλαιού τύπου. Δεύτερον, δεν καταλαβαίνω γιατί πρέπει να περιηγηθείτε στη λίστα dbfόταν είναι ήδη μόνος.

Σε περίπτωση διάσπαρτουdbf , που βρίσκεται στον ίδιο κατάλογο, πρέπει να καθοριστεί στη γραμμή ODBC-connections (Εικ. 3) Η ιδιότητα DefaultDir, για παράδειγμα,

Driver=(Microsoft dBase Driver (*.dbf));sourcetype=DBF;DefaultDir=c:\Temp;exclusive=No;null=No;deleted=No;backgroundfetch=No

ΕπειταΜπορείτε να ελέγξετε την Αντιγραφή δεδομένων από έναν ή περισσότερους πίνακες ή προβολές.

Εικ.5

και θα εμφανιστεί μια λίστα dbf σε αυτόν τον κατάλογο, από τον οποίο θα σας ζητηθεί να επιλέξετε:

Εικ.6

Αλλά δεν ρώτησαΠροεπιλογή Διευθυντής στο Σχ. 3, οπότε επιλέγω να γράψω ένα αίτημα:

Εικ.7

και γράφω:

Εικ.8

ΕΝΑσε απάντηση λαμβάνω το σφάλμα Η μηχανή βάσης δεδομένων Microsoft Jet δεν μπόρεσε να βρει το αντικείμενο "regions2010_wgs.dbf":

Εικ.9

Αυτό το σφάλμα παρουσιάζεται επειδή το πρόγραμμα οδήγησης εξακολουθεί να είναι ανόητοδέχεται ονόματα αρχείων σε μορφή MS-DOS 8.3 . Εάν μετονομάσετε το αρχείο regions2010_wgs.dbf σε, ας πούμε,ααα . dbf , και το αίτημα στο Σχ. 8, κατά συνέπεια, θα πρέπει να αντικατασταθεί μεεπιλέξτε * από c:\Temp\aaa.dbf, το σφάλμα εξαφανίζεται. Θα σας ζητηθεί να επιλέξετε ένα υπάρχον ή να καθορίσετε το όνομα του πίνακα που θα δημιουργηθεί SQLServer στη βάση δεδομένωνΒάση δεδομένων 1 (βλ. Εικ. 4) κάτω από τα αποτελέσματα εισαγωγής από dbf. Αφήνω το προτεινόμενο όνομα ως έχει:

Εικ.10

Κάνοντας κλικ στο κουμπί εδώΠροεπισκόπηση , μπορείτε να κάνετε προεπισκόπηση των περιεχομένων dbf o υποτίθεται ότι θα μεταφερθεί σε SQLServer:

Εικ.11

Όλα είναι καλά, αλλά το abracadabra αντί για το ρωσικό κείμενο είναι καταθλιπτικό. Ο λόγος της εμφάνισής του σε λαϊκή μορφή εξηγείται από τον έγκριτο συγγραφέα Lalex. Οι Ρώσοι χαρακτήρες λείπουν γιατί ο ηλίθιος οδηγός περιμένει dbf αρχείο στο DOS oov κωδικοποίηση ( CP866, γνωστός και ως OEM ). Φαίνεται να εξετάζει τη μορφή dbfμια πολύ αρχαία, καθαρά Dosovsky κληρονομιά. Το ArcView από προεπιλογή θεωρεί το DBF ως μορφή Windows ( ANSI1251). Αυτά τα δύο προγράμματα λοιπόν στέκονται σαν δύο ταύροι, ακουμπώντας τα μέτωπά τους .

Άρα, ο λόγος είναι ξεκάθαρος, το μόνο που μένει είναι να διορθωθεί. Μπείτε σε χορούς με ντέφι στη γραμμή σύνδεσηςcollate=ΜηχανήήΡωσική / CodePage=ANSI / Ακολουθία Σύγκρισης=1251δεν οδήγησε στην επιτυχία. Άλλαξε29ο byte Vααα . dbf σε 0xC9 - μηδενικά συναισθήματα. Πράγματι, το σύμβολο της κωδικοσελίδας στην κεφαλίδα dbf αγνοείται από τον οδηγό. Ωστόσο, η ρύθμιση του προγράμματος οδήγησης μπορεί να αλλάξει στο μητρώο. Αποθηκεύεται σε DataCodePage στο δρόμο HKLM\SOFTWARE\ Microsoft\ Jet\4.0\ Engines\ xBase ή HKLM\ ΛΟΓΙΣΜΙΚΟ\ Microsoft\ Office\14.0\ AccessConnectivityEngine\ Engines\ Xbase ή, ανάλογα, HKLM\ ΛΟΓΙΣΜΙΚΟ\ Wow6432 Node\ Microsoft\ Jet\4.0\ Engines\ xBase ή HKLM\ SOFTWARE\ Wow6432 Node\ Microsoft\ Office\14.0\ AccessConnectivityEngine\ Engines\ Xbase ανάλογα με το αν είχε εγκατασταθεί στο μηχάνημαΓραφείο Και αν ναι, πώς. Από προεπιλογή, η ιδιότητα έχει μια τιμή OEM που κάνει τον οδηγό να διαβάζει τα πάντα dbf s βασίζεται σε αυτή την κωδικοποίηση. Αν το αλλάξετε σε ANSI


Εικ.12

Κυριλλικό σε ANSI dbf" e, φυσικά, θα διαβαστεί με ανθρώπινους όρους:

Εικ.13

Ευτυχώς, δεν υπάρχει ανάγκη επανεκκίνησης, αλλά ο οδηγός εισαγωγής θα πρέπει να κλείσει και να επαναληφθεί ξανά από την Εικ. 1.

Κάντε κλικ στο OKΕπόμενο , τελειώνουμε τον οδηγό, με αποτέλεσμα να δημιουργείται και να εκτελείται σιωπηρά SSIS-πλαστική σακούλα:

Εικ.14

και παίρνουμε σκουπίδια. ρε!


Εικ.15

Αυτό, μάλιστα, είναι επίσης κατανοητό γιατί. Στο τραπέζιΕρώτηση Ο οδηγός δημιούργησε ένα πεδίο για τα αποτελέσματα εισαγωγήςπεριοχή τύπος varchar (200) χωρίς να αναφέρεται ρητά η αντιπαραβολή. Ως εκ τούτου, προεπιλογή για τη βασική ταξινόμηση. Έτυχε ότι η βάσηΒάση δεδομένων1 είχε μια μη ρωσική αντιπαραβολή:


Εικ.16

Για να διορθώσετε την κατάσταση, πρέπει να φτιάξετε ένα πεδίοπεριοχή Unicode ή προσαρμόστε τη συρραφή του. Παρεμπιπτόντως, ας αυξήσουμε το μήκος του. Ναι, για παν ενδεχόμενο.


Εικ.17

Αποθήκευση αλλαγών δομής, διαγραφή δεδομένωνπερικοπή πίνακα Ερώτημακαι επαναλάβετε την εισαγωγή Εικ. 1-14


Εικ.18

Τώρα όλα εισάγονται κανονικά. Το μόνο πράγμα είναι ότι είπα "διαγραφή των δεδομένων", αλλά ξέχασα να το κάνω μόνος μου και στην εικόνα διπλασιάστηκαν. Δεν θα το ξανακάνω πια, γιατί είναι χωρίς αρχές. Το νόημα είναι ξεκάθαρο.

Αλεξέι Σουλένιν

DBF - ένα αρχείο βάσης δεδομένων, η δυνατότητα εργασίας με το οποίο είχε προηγουμένως ενσωματωθεί στο περιβάλλον το γραφείο της Microsoft. Οι εφαρμογές Access και Excel λειτουργούσαν με τη μορφή, αργότερα η Access αφαιρέθηκε από το πακέτο και έγινε ξεχωριστό πρόγραμμα και στο Excel, από το 2007, η υποστήριξη του DataBaseFile έχει περιοριστεί σημαντικά.

Εάν είναι αδύνατο να ανοίξετε ένα αρχείο DBF απευθείας στο Excel, πρέπει πρώτα να το μετατρέψετε.

Ωστόσο, το DBF, αν και θεωρείται από πολλούς ως μια ξεπερασμένη μορφή, εξακολουθεί να χρησιμοποιείται ευρέως σε εξειδικευμένα προγράμματα στον τομέα των επιχειρήσεων, του σχεδιασμού και της μηχανικής. Όπου είναι απαραίτητο να εργαστείτε με μεγάλο όγκο πληροφοριών, τη δομή και την επεξεργασία τους και την εκτέλεση ερωτημάτων. Για παράδειγμα, το πακέτο λογισμικού 1C Enterprise βασίζεται εξ ολοκλήρου στη διαχείριση της βάσης δεδομένων. Και δεδομένου ότι πολλά έγγραφα και δεδομένα γραφείου επεξεργάζονται στο Excel, το ζήτημα της ολοκληρωμένης εργασίας με αυτές τις μορφές είναι σχετικό και σε ζήτηση.

Προβλήματα Excel κατά την εργασία με το DBF

Το Excel 2003 είχε τη δυνατότητα να ανοίγει και να επεξεργάζεται το DBF, καθώς και να αποθηκεύει έγγραφα XLS σε αυτήν τη μορφή:

  1. Επιλέξτε "Αρχείο" από τη γραμμή μενού.
  2. Στη συνέχεια, κάντε κλικ στο "Αποθήκευση ως".
  3. Επιλέξτε "*.dbf" από την αναπτυσσόμενη λίστα.

ΣΠΟΥΔΑΙΟΣ. Από το 2007, μπορείτε να ανοίξετε και να προβάλετε Μορφή Excelβάσεις δεδομένων, αλλά δεν μπορείτε να κάνετε αλλαγές ή να αποθηκεύσετε έγγραφα .xls σε αυτήν. Τυπικά μέσατα προγράμματα δεν παρέχουν πλέον αυτήν την επιλογή.

Ωστόσο, υπάρχουν ειδικά πρόσθετα για την εφαρμογή που προσθέτουν μια τέτοια λειτουργία σε αυτήν. Οι προγραμματιστές δημοσιεύουν τις εξελίξεις τους στο διαδίκτυο σε διάφορα φόρουμ και μπορείτε να βρείτε διαφορετικές επιλογές. Το πιο δημοφιλές πρόσθετο, που ονομάζεται XslToDBF, μπορεί να ληφθεί από τον ιστότοπο του προγραμματιστή http://basile-m.narod.ru/xlstodbf/download.html. Η λήψη είναι δωρεάν, αλλά αν θέλετε, μπορείτε να υποστηρίξετε το έργο μεταφέροντας οποιοδήποτε ποσό στο πορτοφόλι ή την κάρτα σας.

Εγκατάσταση και χρήση:

  1. Κατεβάστε το αρχείο από τον παραπάνω ιστότοπο.
  2. Εξαγάγετε το XlsToDBF.xla από αυτό και αποθηκεύστε το στον υπολογιστή σας.
  3. Στο Excel, μεταβείτε στο μενού με το εικονίδιο της Microsoft στα αριστερά, "Επιλογές".
  4. Στην περιοχή Επιλογές Excel, επιλέξτε Πρόσθετα.
  5. Στη σειρά "Διαχείριση/Πρόσθετα Excel", κάντε κλικ στην επιλογή Μετάβαση.
  6. Κάντε κλικ στην Αναζήτηση και εντοπίστε το αποθηκευμένο XlsToDBF.xla.
  7. Η καταχώρηση "XLS -> DBF" θα πρέπει να εμφανίζεται στη λίστα των πρόσθετων με επιλεγμένο το πλαίσιο ελέγχου. Ελέγξτε αν δεν υπάρχει.
  8. Τώρα μπορείτε να αποθηκεύσετε .xls σε μορφή .dbf. Μπορείτε να κάνετε λήψη από τον ίδιο ιστότοπο αναλυτικές οδηγίεςμε χρήση. Το κύριο πράγμα είναι να προετοιμάσετε σωστά τα δεδομένα πίνακα.
  9. Μόλις ο πίνακας είναι έτοιμος, επιλέξτε οποιοδήποτε γεμάτο κελί και πατήστε Alt και F
  10. Στο παράθυρο μακροεντολής που ανοίγει, πληκτρολογήστε XlsToDBF στο πεδίο, τα πεζά και πεζά δεν είναι σημαντικά.
  11. Κάντε κλικ στην επιλογή Εκτέλεση.
  12. Εάν έχετε προετοιμάσει και μορφοποιήσει σωστά τα δεδομένα, το αρχείο της βάσης δεδομένων θα αποθηκευτεί επίσης στο φάκελο όπου βρίσκεται η πηγή XLS.

Εάν δεν θέλετε να αλλάξετε τίποτα στο Office, μην εμπιστεύεστε τα πρόσθετα και εφαρμογές τρίτων, τότε μπορούμε να προτείνουμε έναν τρόπο μετατροπής με μεγαλύτερη ένταση εργασίας αρχείο XLSστο DBF:

  1. Αγορά και εγκατάσταση πρόγραμμα της MicrosoftΠρόσβαση.
  2. Στο Excel, προετοιμάστε και αποθηκεύστε το έγγραφο.
  3. Κάντε κλικ στο κουμπί "Άνοιγμα" στο MS Access και επιλέξτε το αρχείο.
  4. Τώρα πρέπει να διαμορφώσετε σωστά την εισαγωγή.
  5. Επιλέξτε το φύλλο για να ξεκινήσετε. Εάν υπάρχουν πολλά από αυτά, πρέπει να κάνετε ένα κάθε φορά.
  6. Εάν ο πίνακας έχει μια σειρά κεφαλίδας, επιλέξτε το κατάλληλο πλαίσιο.
  7. Στη συνέχεια, μπορείτε να αλλάξετε το όνομα του πίνακα.
  8. Τώρα κάντε κλικ στο "Εξωτερικά δεδομένα".
  9. Κάντε κλικ στο κουμπί "Εξαγωγή", "Για προχωρημένους".
  10. Επιλέξτε Αρχείο dBase.
  11. Δώστε ένα όνομα και αποθηκεύστε την τοποθεσία.

Αυτή η μέθοδος δεν λειτουργεί πάντα με επιτυχία. Και είναι πολύ μακρύ και άβολο.

Μετατροπή

Για να μην υποφέρετε μόνοι σας με τα προγράμματα του γραφείου, έχουν δημιουργηθεί πολλές εφαρμογές που σας επιτρέπουν να μεταφέρετε δεδομένα από τη μια μορφή στην άλλη. Πρώτα απ 'όλα, σχεδόν τα πάντα ισχυρά προγράμματαγια εργασία με DBMS, αναλαμβάνουν τη δυνατότητα εξαγωγής σε XLS και φόρτωσης από αυτό. Δεύτερον, υπάρχουν μικρά βοηθητικά προγράμματα που ειδικεύονται στη μετατροπή. Εδώ είναι μερικά από αυτά:


Σε όλα αυτά τα προγράμματα, η μετατροπή καταλήγει στο άνοιγμα του αρχείου προέλευσης και στη συνέχεια στην εκτέλεση της εντολής "Μετατροπή" ή "Εξαγωγή".

Υπάρχουν επίσης δωρεάν υπηρεσίεςδιαδικτυακές μετατροπές. Σε τέτοιους ιστότοπους σας ζητείται να στείλετε (κατεβάσετε) το αρχείο προέλευσης, κάντε κλικ στο "Μετατροπή", μετά από το οποίο θα εμφανιστεί ένας σύνδεσμος προς το έγγραφο που έχει μετατραπεί. Σε ποιο βαθμό μπορείτε να εμπιστευτείτε τέτοιες υπηρεσίες, η απόφαση είναι ατομική, με δικό σας κίνδυνο και κίνδυνο.

Ανοίξτε λοιπόν το DBF Πρόγραμμα Excelείναι δυνατό, αλλά αν η έκδοσή του είναι 2007 και νεότερη, τότε δεν θα μπορείτε να κάνετε τίποτα άλλο με αυτό, απλά κοιτάξτε. Υπάρχουν ειδικά πρόσθετα ή προγράμματα για επεξεργασία και αποθήκευση σε XLS, καθώς και για μετατροπή προς την αντίθετη κατεύθυνση. Εάν έχετε εμπειρία μετατροπής και εργασίας με DBF σε διαφορετικές εφαρμογές, μοιραστείτε τις συμβουλές σας στα σχόλια.

Ένα απλό πρόγραμμα για τη μεταφορά δεδομένων από αρχεία dbf σε πίνακες Microsoft Excel.


Το υπόβαθρο αυτού του βοηθητικού προγράμματος είναι το εξής: Το 1C έχει μεταφορτωμένα δεδομένα στην αρχαία και ισχυρή μορφή dBase, για παράδειγμα, λίστες αγαθών με τιμές κ.λπ. και ούτω καθεξής. Έτσι, ορισμένα προγράμματα εισάγουν εύκολα σύνολα δεδομένων από πίνακες του Excel, αλλά δεν γνωρίζουν για το dBase.


Το Upload 1c αποθηκεύει δεδομένα σε κωδικοποίηση WIN1251 (φυσικά, αυτό μπορεί να έχει ρυθμιστεί κάπου, δεν το έχω ελέγξει), ωστόσο, μετά το άνοιγμα ενός τέτοιου αρχείου στο Excel, οι πληροφορίες εμφανίζονται στο "kryakozyabra". Αυτό συμβαίνει επειδή το Microsoft Excel ανοίγει πίνακες dBase σε κωδικοποίηση CP866 (DOS) από προεπιλογή.


Στην πραγματικότητα, αυτό που εννοώ με όλα αυτά είναι ότι αποδεικνύεται πολύ δύσκολο για τον μέσο χρήστη να καταλάβει πώς, τι, πού και με τι να επανακωδικοποιήσει, ποια κουμπιά να πατήσει και ποιες ενέργειες να εκτελέσει. Γι' αυτό το καθήκον τέθηκε όσο πιο απλά και άμεσα γινόταν.


P.S.: Δεν ισχυρίζομαι ποτέ μοναδικότητα ή ιδιοφυΐα, αφού το Διαδίκτυο είναι γεμάτο από παρόμοια λογισμικά που αλλάζουν κωδικοποιήσεις και κάνουν πολλά περισσότερα, αλλά τα περισσότερα από αυτά πληρώνονται και η επιπλέον λειτουργικότητα επιδεινώνει το μαρτύριο των απλών ανθρώπων.


Ένα πρόγραμμα για την εξαγωγή δεδομένων από αρχεία dBase στο Microsoft Excel.


Το κύριο παράθυρο του προγράμματος.


Μετά την εκκίνηση του προγράμματος, πρέπει να κάνετε κλικ στο κουμπί "Άνοιγμα" και στο παράθυρο διαλόγου επιλογής αρχείου, επιλέξτε το dbf που θα εξαχθεί στο Excel.


* * *


Το κύριο παράθυρο του προγράμματος με το φορτωμένο αρχείο dbf.


Εάν το αρχείο μεταφορτωθεί με επιτυχία, τα δεδομένα του θα εμφανιστούν στον πίνακα. Στην κορυφή, στο πεδίο "Αρχείο πηγής", θα εμφανιστεί η πλήρης διαδρομή και το όνομα του ληφθέντος αρχείου dbf.


Μετά από αυτό, πρέπει να κάνετε κλικ στο μεγάλο κουμπί "Εξαγωγή δεδομένων" που βρίσκεται ακριβώς κάτω από τον πίνακα με τις πληροφορίες.


* * *


Παράθυρο που σας ζητά να κλιμακώσετε τις στήλες.


Εάν δεν υπήρχαν προβλήματα με το αρχείο dbf, θα πρέπει να δείτε ένα παράθυρο που σας ζητά να κλιμακώσετε τα μεγέθη των στηλών, αυτό σημαίνει εάν στο Excel πρέπει να τεντώσετε τις στήλες ώστε να ταιριάζουν στο πλάτος των δεδομένων.


* * *


Εάν όλες οι λειτουργίες ήταν επιτυχείς, θα εκκινηθεί μια παρουσία του Excel με όλα τα δεδομένα που έχουν μεταφορτωθεί σε αυτήν.

Μπορεί να συμβεί το αρχείο dbf να μην περιέχει πληροφορίες υπηρεσίας σχετικά με την κωδικοποίηση, οπότε θα εμφανιστεί το μήνυμα "Το αρχείο dbf δεν περιέχει πληροφορίες σχετικά με την κωδικοποίηση".


Στις παρακάτω εικόνες, με κόκκινο χρώμα φαίνεται και γράφεται ποιο από τα κουμπιά «Ναι» ή «Όχι» πρέπει να πατηθεί σε μια ή την άλλη περίπτωση:


Εάν το κείμενο στον πίνακα δεν είναι αναγνώσιμο.


* * *


Εάν το κείμενο στον πίνακα είναι αναγνώσιμο κανονικά.

Χαρακτηριστικά του προγράμματος


Το Microsoft Excel πρέπει να είναι εγκατεστημένο στο σύστημα.
Τα αρχεία Dbf ανοίγουν σε αποκλειστική λειτουργία.
Τα περιεχόμενα των πεδίων blob δεν μεταφέρονται.
Η απόδοση του προγράμματος δοκιμάστηκε σε Windows XP και Windows 7.
Το βοηθητικό πρόγραμμα είναι εντελώς δωρεάν και δεν απαιτεί εγκατάσταση, πράγμα που σημαίνει ότι το κατεβάζετε και το χρησιμοποιείτε.

WiFi