วิธีที่รวดเร็วในการอ่าน dbf c วิธีเชื่อมต่อไฟล์ DBF ใน Access โดยทางโปรแกรม การลบรายการในไฟล์ DBF

ทุกวันนี้คงไม่มีใครต้องบอกว่าบ่อยครั้งที่ผู้ใช้จำนวนมากพบไฟล์ที่มีนามสกุล .dbf สิ่งที่เศร้าที่สุดคือใน Windows OS แม้ว่าจะติดตั้ง Microsoft Office แล้วก็ไม่มีโปรแกรมใดที่เกี่ยวข้องกับไฟล์ประเภทนี้ เรามีมันแล้วเราจะพยายามคิดออก ในเวลาเดียวกันเรามาดูกันว่าคุณสามารถตั้งค่าการเชื่อมโยงส่วนขยายสำหรับการรับรู้ข้อมูลอัตโนมัติและการเปิดไฟล์ที่ต้องการในภายหลังได้อย่างไร

รูปแบบ DBF: คำอธิบาย

ที่จริงแล้วจากตัวย่อที่ใช้กับนามสกุลของไฟล์ประเภทนี้เราสามารถสรุปได้ว่านี่คือฐานข้อมูล ค่อนข้างเจาะจง เนื่องจากไฟล์ดังกล่าวมักจะมีนามสกุล

ในกรณีนี้ เรามีอีกโปรแกรมหนึ่งซึ่งถึงแม้จะมีความเฉพาะเจาะจง แต่ก็ได้รับการยอมรับจากหลายโปรแกรมที่รองรับการทำงานกับข้อมูลประเภทนี้ นี่อาจเป็น Excel หรือ Access เดียวกันซึ่งเป็นส่วนหนึ่งของแพ็คเกจ Microsoft Office หลักหรือแอปพลิเคชันสำนักงานอื่น ๆ จากนักพัฒนาบุคคลที่สาม

วิธีเปิด DBF ในเวอร์ชันมาตรฐาน

ในความเป็นจริงหากคุณเจอไฟล์ประเภทนี้โดยฉับพลัน (ไม่ได้ใช้ไอคอนนี้แม้แต่ใน Explorer) อย่าตกใจ สามารถเปิดได้ค่อนข้างง่ายโดยใช้ Excel เนื่องจากมีการบันทึกโครงสร้างลอจิคัลทั้งหมดและคำนึงถึงความเป็นไปได้ในการใช้ระบบค้นหามาตรฐานด้วย

เนื่องจากไม่มีโปรแกรมใดที่เกี่ยวข้องกับไฟล์ในเวอร์ชันมาตรฐาน คุณจึงดำเนินการได้ 2 วิธี ขอแนะนำให้เปิด Excel หรือ Access จากนั้นใช้เมนูเปิดไฟล์มาตรฐานหรือคีย์ผสม Ctrl + O อย่างไรก็ตามในเมนูที่ปรากฏในฟิลด์ประเภทไฟล์ คุณควรระบุ "ไฟล์ทั้งหมด" (และไม่ใช่รูปแบบ "เนทิฟ") แล้วเหตุใดจึงเลือกไฟล์ที่คุณกำลังมองหา วางใจได้เลย: โปรแกรมสเปรดชีตจะจดจำข้อมูลประเภทนี้ได้โดยไม่มีปัญหาใดๆ

ตามที่ชัดเจนแล้วปัญหาของวิธีเปิดไฟล์ DBF ในกรณีของเราเกิดขึ้นเฉพาะกับการใช้แอปพลิเคชัน Office มาตรฐานในโหมดแมนนวลเท่านั้น ตามที่ชัดเจนแล้ววิธีนี้ไม่สะดวกเสมอไปและต้องใช้เวลาพอสมควร

โปรแกรมที่เกี่ยวข้อง

ตอนนี้เรามาดูไฟล์ DBF กันดีกว่า ฉันจะเปิดโดยไม่ใช้โปรแกรมชุดสำนักงานมาตรฐานได้อย่างไร ใช่ โดยยูทิลิตี้เดียวกันที่รวมอยู่ในผลิตภัณฑ์ซอฟต์แวร์ที่คล้ายคลึงกัน

ตัวอย่างเช่นอาจเป็น Open Office, Lotus เป็นต้น โดยหลักการแล้วไม่มีความแตกต่างกันมากนักเนื่องจากสิ่งเดียวที่สำคัญคือโปรแกรมที่ใช้สามารถทำงานกับข้อมูลอิเล็กทรอนิกส์แบบตารางได้ การอ่านรูปแบบ DBF จะเหมือนกันทุกประการในทุกกรณี อย่างไรก็ตาม สิ่งนี้ไม่ได้ขึ้นอยู่กับผู้พัฒนาชุดสำนักงาน เนื่องจากทุกคนรองรับข้อมูลประเภทนี้ รวมถึงแม้แต่แพลตฟอร์มอย่าง Oracle

การเปลี่ยนตัวเลือกการเปิดเริ่มต้น

ตอนนี้เรามาดูวิธีการเปิดไฟล์ DBF เพื่อใช้โหมดอัตโนมัติ ในกรณีที่ง่ายที่สุด ทำได้จากเมนูย่อยที่เรียกโดยคลิกขวาที่ไฟล์ใน "Explorer" ปกติ โดยเลือกคำสั่ง "Open with..."

สำหรับกรณีเดียว จะใช้หนึ่งในแอปพลิเคชันที่อยู่ในรายการ เพื่อไม่ให้กวนสมองเกี่ยวกับวิธีการเปิดไฟล์ DBF อีกต่อไป คุณสามารถระบุแอปพลิเคชันที่เลือก จากนั้นทำเครื่องหมายที่ช่องถัดจากบรรทัด “ใช้สำหรับไฟล์ประเภทนี้ทั้งหมด” ที่ด้านล่าง Excel เดียวกันในอนาคต (หากเลือกเป็นโปรแกรมเริ่มต้น) จะเปิดไฟล์ประเภทนี้ด้วยการดับเบิลคลิกปกติ

ไม่ต้องบอกว่าแทนที่จะใช้ Excel คุณสามารถเลือก Access หรือโปรแกรมอื่นๆ ที่สามารถจดจำและเปิดข้อมูลประเภทนี้ได้ นั่นไม่ใช่ประเด็น. สิ่งสำคัญคือการกำหนดค่าการเปิดฐานข้อมูลอัตโนมัติ สิ่งที่ต้องใช้งานในแง่ของซอฟต์แวร์นั้นขึ้นอยู่กับผู้ใช้ระบบคอมพิวเตอร์แต่ละคน

ผลลัพธ์เป็นอย่างไร?

โดยสรุป เป็นเรื่องที่คุ้มที่จะบอกว่าตัวเลือกที่ดีที่สุดในการเปิดไฟล์ประเภทนี้คือชุดโปรแกรมสำนักงานจาก Microsoft Corporation เนื่องจากเป็นที่แพร่หลายไปทั่วโลก จริงอยู่ที่ไม่มีอะไรผิดที่ผู้ใช้ที่ไม่ได้ใช้ผลิตภัณฑ์ของ Microsoft จะเปิดข้อมูลประเภทนี้ในแอปพลิเคชันอื่น

ตามที่ได้ชัดเจนจากข้างต้นแล้ว ตัวแก้ไขตารางมีอยู่ในแพ็คเกจเกือบทั้งหมดที่รู้จักในปัจจุบัน พวกเขาอาจแตกต่างจากกันในชื่อของพวกเขาเท่านั้น และแน่นอนว่าไม่ได้อยู่ในชุดการทำงานซึ่งตามกฎแล้วจะเหมือนกันทุกที่ โดยมีข้อยกเว้นที่หายาก

เหนือสิ่งอื่นใด คุณสามารถใช้เครื่องมือการพัฒนามากมายโดยใช้ภาษาการเขียนโปรแกรมจำนวนมากพอสมควร บนแพลตฟอร์มเดียวกันที่รองรับการสร้างและเพิ่มประสิทธิภาพเซิร์ฟเวอร์ SQL ไฟล์ดังกล่าวจะถูกเปิดขึ้นอย่างที่พวกเขาพูดในทันที เมื่อเปิดออกมาจะมีลักษณะที่ค่อนข้างเฉพาะเจาะจง ซึ่งค่อนข้างผิดปกติสำหรับผู้ใช้ทั่วไป อย่างไรก็ตาม ผู้ใช้ส่วนใหญ่ไม่น่าจะใช้เครื่องมือพัฒนาทางวิชาชีพดังกล่าว และจะจำกัดตัวเองให้ใช้เฉพาะชุดซอฟต์แวร์มาตรฐานเท่านั้น

ขอให้เป็นวันดีทุกคนผู้อ่านบล็อกที่รัก ในบทความวันนี้ ฉันจะพูดถึงการเข้าถึงไฟล์ DBF (ตาราง) ในรูปแบบต่างๆ ฉันพบปัญหานี้เมื่อต้องการเข้าถึงตาราง FoxPro DBF ฉันลองผ่าน BDE มันใช้งานไม่ได้กับตาราง Paradox (dbf) เท่านั้น ท้ายที่สุดฉันก็ตัดสินใจลองใช้ส่วนประกอบ TDBF - มันก็กลายเป็นความล้มเหลวเช่นกัน ฉันตัดสินใจลองเชื่อมต่อผ่าน ADO ด้วยวิธีเดิมๆ และทุกอย่างดำเนินไปเหมือนเครื่องจักร

ดังนั้นในบทความนี้ฉันจะบอกคุณว่าคุณสามารถเชื่อมต่อกับตาราง DBF ได้อย่างไรในสามวิธี:

  • การใช้ BDE - ตัวเลือกนี้ใช้ไม่ได้สำหรับฉันกับตาราง FoxPro
  • การใช้ ADO - ตาราง FoxPro เปิดได้อย่างสมบูรณ์
  • การใช้คอมโพเนนต์ TDBF จะเปิดตาราง Paradox ที่มีการเข้ารหัสหรือ dBase ที่แตกต่างกัน

พูดตามตรงฉันไม่สามารถยืน BDE ได้เลย แต่ฉันต้องทำงานกับตารางดังกล่าวและตัวเลือกแรกที่ฉันต้องการเชื่อมต่อกับพวกเขาคือการใช้ BDE ซึ่งตามหลักการแล้วมันได้ผลสำหรับฉัน คือฉันสามารถดึงรายการตารางได้ ซึ่งฉันก็ดีใจและคิดว่าทุกอย่างจะดำเนินไปอย่างที่คาดไว้ แต่นั่นกลับไม่เป็นเช่นนั้น เมื่อฉันพยายามเชื่อมต่อกับตาราง ฉันได้รับข้อผิดพลาดดังนี้:

ฉันพยายามติดตั้งทั้งใน BDE Administrator เองและเมื่อเชื่อมต่อ แต่ก็ไม่มีอะไรทำงาน แต่เมื่อใช้วิธีนี้ ฉันสามารถเชื่อมต่อกับตาราง DBF - Paradox ได้อย่างสมบูรณ์แบบ เช่น dBase

ดังนั้นเราจึงติดตั้งส่วนประกอบต่อไปนี้บนแบบฟอร์มจากแท็บ BDE:

  • Ttable หรือ TQuery
  • คุณสามารถเลือก TDataSource และ TDbGrid ได้

ต่อไปในคุณสมบัติ DatabaseName ของส่วนประกอบ TDataBase เราตั้งชื่อฐานข้อมูล ฉันเขียนว่า - MyDB และในคุณสมบัติ DriverName ของส่วนประกอบเดียวกัน ฉันเลือก STANDART จากรายการแบบเลื่อนลง เราตั้งค่าคุณสมบัติ LoginPromt เป็น False เนื่องจากไม่มีการเข้าสู่ระบบและรหัสผ่านในตารางของเรา ในคุณสมบัติ Params เราตั้งค่าพารามิเตอร์การเชื่อมต่อ ฉันระบุเส้นทางไปยังตารางของเราเท่านั้น:

คุณยังสามารถคลิกสองครั้งที่ส่วนประกอบ TDataBase และกำหนดค่าการเชื่อมต่อที่จำเป็นและตั้งค่าคุณสมบัติการเชื่อมต่อเป็น True ซึ่งจะทำให้การเชื่อมต่อกับตารางเกิดขึ้นโดยไม่มีข้อผิดพลาด เพียงเท่านี้ ไปที่องค์ประกอบ TTable โดยที่ในคุณสมบัติ DatabaseName เราระบุชื่อของฐานข้อมูลของเรา นั่นคือ MyDB ในคุณสมบัติ TableType ให้เลือกประเภทตาราง ฉันระบุ ttDBase และในคุณสมบัติ TableName ให้เลือกชื่อตาราง หลังจากนั้นเราตั้งค่าคุณสมบัติ Active เป็น True เพียงเท่านี้ มันเชื่อมต่อได้อย่างสมบูรณ์แบบสำหรับฉันและแสดงตารางได้ดี

แต่ตัวเลือกนี้ใช้ไม่ได้กับฉันกับตาราง FoxPro ดังที่ฉันได้กล่าวไว้ข้างต้น ดังนั้น เพื่อแก้ไขปัญหาของฉัน ฉันจึงตัดสินใจใช้เทคโนโลยี ADO ดังนั้นจากแท็บ ADO ฉันจึงติดตั้งส่วนประกอบต่อไปนี้:

  • ทาโดคอนเน็คชั่น
  • TADOQuery หรือ TADOTable
  • คุณสามารถเลือกติดตั้ง TDataSource และ TDBGrid ได้

ต่อไปเราเพียงแค่ต้องสร้างการเชื่อมต่อที่เราทำกับฐานข้อมูล MS Access ซึ่งจะแตกต่างออกไปโดยที่เราเลือกผู้ให้บริการข้อมูลอื่นคือ Microsoft Visual FoxPro ODBC เพียงเท่านี้เราก็ระบุการเข้ารหัสและเส้นทางไปยังตาราง หากเป็นตาราง FoxPro โฟลเดอร์จะต้องมีไฟล์ที่มีรายการตารางทั้งหมด นามสกุล *.dbc นั่นคือสตริงการเชื่อมต่อของส่วนประกอบ TADOCOnnection จะมีลักษณะดังนี้:

เราเชื่อมต่อส่วนประกอบ TADOConnection กับ TADOTable หรือ TADOQuery และทำงานกับตารางที่เราต้องการ

อีกทางเลือกหนึ่งคือการทำงานกับตารางรูปแบบ dbf โดยใช้ส่วนประกอบ TDBF ซึ่งฉันใช้ในโปรเจ็กต์ พูดตามตรง ฉันต้องการละทิ้งมันไป มันใช้งานได้ดีกับการเข้ารหัส ฉันจะไม่บอกคุณถึงวิธีการทำงานกับมัน แต่ฉันจะทิ้งลิงก์ไว้เป็นตัวอย่าง

บางทีรหัสนี้อาจช่วยได้:

ฟังก์ชัน VB ที่คุณต้องใส่ใน MS Access นั้นค่อนข้างเรียบง่าย และโดยทั่วไปจะเรียกเมธอด TransferDatabase โดยส่งผ่าน DSN (ชี้ไปที่ฐานข้อมูลต้นทาง) ชื่อตารางต้นฉบับ และชื่อตารางปลายทาง รหัสมีลักษณะดังนี้:

การนำเข้าฟังก์ชันสาธารณะ (dsnName As String, sourceTableName As String, targetTableName As String) ‘ หากมีตารางอยู่แล้ว ให้ลบออก บนข้อผิดพลาด GoTo CopyTable DoCmd.DeleteObject acTable, targetTableName CopyTable: DoCmd.TransferDatabase _ acImport, _ "ฐานข้อมูล ODBC", _ "ODBC;DSN=" + dsnName, _ acTable, _ sourceTableName, _ targetTableName ฟังก์ชันสิ้นสุด

แล้วรหัส C#:

วัตถุ accessObject = null; ลอง ( accessObject = Activator.CreateInstance(Type.GetTypeFromProgID("Access.Application")); accessObject.GetType().InvoidMember("OpenCurrentDatabase", System.Reflection.BindingFlags.Default System.Reflection.BindingFlags.InurgeMethod, null, accessObject , วัตถุใหม่ ( "AccessDbase.mdb" )); accessObject.GetType().InvoidMember("Run", System.Reflection.BindingFlags.Default System.Reflection.BindingFlags.InurgeMethod, null, accessObject, วัตถุใหม่ ( "นำเข้า", "ชื่อ DSN", "ชื่อตารางแหล่งที่มา", "ชื่อตารางเป้าหมาย" )); accessObject.GetType().InvoidMember("CloseCurrentDatabase", System.Reflection.BindingFlags.Default System.Reflection.BindingFlags.InvokeMethod, null, accessObject, null); MessageBox.Show("คัดลอกสำเร็จ"); catch (ข้อยกเว้น เช่น) ( string message = ex.Message; while (ex.InnerException != null) ( ex = ex.InnerException; message += "\r \ n----\r\n" + ex.Message; ) MessageBox.Show(message); ) ในที่สุด ( if (accessObject != null) ( System.Runtime.InteropServices.Marshal.ReleaseComObject(accessObject); เข้าถึงวัตถุ = โมฆะ; -

การเปลี่ยน VBA เป็นอ่าน acLink แทนที่จะเป็น acImport ควรอนุญาตให้มีการเชื่อมโยง

แก้ไขความคิดเห็น

ฉันไม่สามารถช่วยเกี่ยวกับ C# ได้ แต่นี่คือ VBScript บางส่วนที่เชื่อมโยงตารางจาก MDB หนึ่งไปยังอีก MDB

StrLinkFile = "C:\Docs\Link.mdb" strAccessFile = "C:\Docs\LTD.mdb" "สร้างลิงก์..." Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft. เจ็ต.OLEDB.4.0;" & _ "แหล่งข้อมูล = " & strAccessFile & ";" & _ "ข้อมูลความปลอดภัยคงอยู่=เท็จ" ตั้ง adoCat = CreateObject("ADOX.Catalog") ตั้ง adoCat.ActiveConnection = cn ตั้ง adoTbl = CreateObject("ADOX.Table") ตั้ง adoTbl.ParentCatalog = adoCat adoTbl.Name = "LinkTable" adoTbl.properties("Jet OLEDB:Link Datasource") = strLinkFile adoTbl.properties("Jet OLEDB:Link Provider String") = "MS Access" adoTbl.properties("Jet OLEDB:ชื่อตารางระยะไกล") = "Table1" adoTbl .properties("Jet OLEDB:Create Link") = True "ผนวกตารางเข้ากับคอลเลกชันตาราง " adoCat.Tables.Append adoTbl

DBF เป็นรูปแบบการจัดเก็บข้อมูลที่ใช้กันอย่างแพร่หลายซึ่งปรากฏในยุค 80 ของศตวรรษที่ผ่านมา รูปแบบนี้ถูกใช้ครั้งแรกในตระกูล dBase DBMS เนื่องจากความนิยมและการใช้ dBase อย่างแพร่หลาย ผลิตภัณฑ์ซอฟต์แวร์ที่มีลักษณะคล้าย dBase จำนวนมากได้ถูกสร้างขึ้น เรียกรวมกันว่า xBase แม้ว่ารูปแบบนี้จะมีอายุมาก แต่ก็ยังมีการใช้กันอย่างแพร่หลาย บทความนี้อธิบายวิธีการทำงานกับ DBF จาก 1C:Enterprise

ใน 1C:Enterprise วัตถุซอฟต์แวร์พิเศษ xBase ใช้เพื่อทำงานกับไฟล์ในรูปแบบ DBF (เวอร์ชัน dBase III) การทำงานกับวัตถุนี้มักจะไม่ทำให้เกิดปัญหา

ความสนใจ!

เมื่อทำงานกับไฟล์ DBF โปรดจำไว้ว่าชื่อไฟล์ต้องเป็นไปตามข้อจำกัด 8.3

ความสนใจ!

วัตถุ xBase พร้อมใช้งานทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์ คุณควรคำนึงถึงการโต้ตอบระหว่างไคลเอนต์และเซิร์ฟเวอร์เมื่อแก้ไขปัญหาเฉพาะแต่ละข้อ

การอ่านไฟล์ DBF

การอ่านข้อมูลจากไฟล์ DBF จะดำเนินการในหลายขั้นตอนติดต่อกัน:

  1. การสร้างวัตถุ XBase;
  2. การเปิดไฟล์
  3. วนซ้ำทุกบรรทัดตามลำดับของไฟล์และอ่านค่าฟิลด์
  4. กำลังปิดไฟล์.
ดีบีพี = XBase ใหม่; ดีบีพี. OpenFile("D:\MyFile.dbf" ); // ขั้นตอนที่ 2 การเปิดไฟล์ ในขณะที่วงจรความจริง // ด่าน 3. วนซ้ำบรรทัดของไฟล์รายงาน(DBF.NAME); ถ้าไม่ใช่ DBP ถัดไป() จากนั้น // ตำแหน่งในบันทึกถัดไป ยกเลิก; สิ้นสุดถ้า; สิ้นสุดรอบ;ดีบีพี. ปิดไฟล์(); // ขั้นตอนที่ 4 การปิดไฟล์

คุณสามารถใช้อัลกอริธึมที่ปรับเปลี่ยนเล็กน้อยเพื่อวนซ้ำบรรทัดของไฟล์:

ยังไม่ DBF AtEnd() รายงานลูป (DBF.NAME); ดีบีพี. ต่อไป- สิ้นสุดรอบ;

กำลังอัปโหลดไปยังไฟล์ DBF

ขั้นตอนการอัปโหลดไปยังไฟล์ DBF:

  1. การสร้างวัตถุ XBase;
  2. การระบุการเข้ารหัส (หากไม่ได้ระบุ จะใช้การเข้ารหัส ANSI)
  3. คำอธิบายของฟิลด์;
  4. สร้างไฟล์
  5. วนซ้ำด้วยการเพิ่มและเติมเส้น
  6. กำลังปิดไฟล์.

ลองดูกระบวนการนี้โดยใช้ตัวอย่าง:

ดีบีพี = XBase ใหม่; // ด่าน 1 สร้างวัตถุ XBaseดีบีพี. การเข้ารหัส = EncodingXBase OEM; // ขั้นตอนที่ 2 ระบุการเข้ารหัสดีบีพี. เขตข้อมูล เพิ่ม("รหัส" , "S" , 9 ); // ด่าน 3 คำอธิบายชื่อและประเภทฟิลด์ดีบีพี. เขตข้อมูล เพิ่ม("ชื่อ" , "S" , 40 ); ดีบีพี. CreateFile("D:\MyFile.dbf" ); // ขั้นตอนที่ 4 การสร้างไฟล์การเลือก = ไดเรกทอรี ศัพท์. เลือก(); ลาก่อนการคัดเลือก ถัดไป() วนซ้ำ DBP เพิ่ม(); // เพิ่มบรรทัดดีบีพี. รหัส = ตัวอย่าง รหัส; // กรอกค่าในช่องดีบีพี. NAME = การคัดเลือก ชื่อ; ดีบีพี. เขียน(); // เขียนบรรทัด EndCycle; ดีบีพี. ปิดไฟล์(); // ขั้นตอนที่ 6 การปิดไฟล์

เมื่อระบุการเข้ารหัส จะใช้ประเภทการเข้ารหัส XBase ซึ่งสามารถรับค่าได้สองค่า:

  • แอนซี่– รูปแบบวินโดวส์;
  • OEM– ฟอร์แมตดอส

การเพิ่มฟิลด์ใหม่เมื่ออธิบายโครงสร้างมีไวยากรณ์

เพิ่ม (< Имя>, < Тип>, < Длина>, < Точность>)

มีประเภทต่อไปนี้:

  • “N” – หมายเลข;
  • “S” – สตริง;
  • “D” – วันที่;
  • “L” – บูลีน;
  • “F” – คล้ายกับ “N” – ตัวเลข

ความยาวของฟิลด์จำเป็นสำหรับประเภทฟิลด์ "N", "F" และ "S"

การทำงานกับดัชนี

ไฟล์ดัชนีอาจใช้ร่วมกับไฟล์ DBF ซึ่งอาจมีข้อมูลเกี่ยวกับดัชนีตั้งแต่หนึ่งรายการขึ้นไป การมีดัชนีทำให้สามารถใช้การค้นหาได้ ไม่ใช่แค่การค้นหาตามลำดับของทุกบรรทัดในไฟล์

เมื่อสร้างไฟล์ดัชนี คุณต้องระบุ:

  • รายการดัชนี;
  • เส้นทางในการบันทึกไฟล์ดัชนี (ในขั้นตอนที่ 4 ของการอัปโหลด)

ตัวอย่างการสร้างไฟล์ดัชนี:

ดีบีพี - ดัชนี เพิ่ม("ดัชนี" , "รหัส" ); ดีบีพี. สร้างไฟล์("D:\MyFile.dbf" , "D:\index.cdx" );

ไวยากรณ์สำหรับการเพิ่มดัชนีใหม่คือ:

เพิ่ม (< Имя>, < Выражение>, <Уникальность>, < Убывание>, < Фильтр >)

หากต้องการใช้ดัชนีเมื่ออ่านจากไฟล์ DBF:

  • ระบุเส้นทางไปยังไฟล์ดัชนี (ในขั้นตอนที่ 2 ของการดาวน์โหลด)
  • ตั้งค่าดัชนีปัจจุบัน

ตัวอย่างการเปิดไฟล์ DBF โดยใช้ไฟล์ดัชนี:

ดีบีพี - OpenFile("D:\MyFile.dbf" , "D:\index.cdx" ); ดีบีพี. ดัชนีปัจจุบัน = dbf ดัชนี อินโค้ด;

ความสนใจ!

เมื่อเปิดไฟล์ DBF การวางตำแหน่งจะเกิดขึ้นกับบันทึกแรกในไฟล์ รายการแรกในไฟล์ไม่ตรงกับรายการแรกในดัชนี ด้วยเหตุนี้ เมื่อใช้ดัชนี คุณต้องวางตำแหน่งตัวเองไว้ที่แถวแรกของดัชนีก่อนที่จะข้ามแถวตามลำดับ ซึ่งสามารถทำได้โดยใช้เมธอด First() เช่น:

ดีบีพี. อันดับแรก();

คุณสามารถใช้หนึ่งในสองฟังก์ชันเพื่อค้นหา:

  • หา (< Ключ>, < Режим >) ;
  • ค้นหา ByKey(< Режим >) .

จากผลของทั้งสองฟังก์ชัน ค่าประเภทบูลีนจะถูกส่งกลับ (ไม่ว่าจะพบบันทึกที่มีเงื่อนไขที่ระบุหรือไม่ก็ตาม) หากการค้นหาสำเร็จ ตัวชี้ปัจจุบันจะถูกตั้งค่าเป็นบรรทัดที่พบ ค่าใดค่าหนึ่งต่อไปนี้สามารถใช้เป็นโหมดการค้นหาได้:

  • «>=»;
  • «>»;
  • «<=»;
  • «<«.

มาดูการค้นหาในไฟล์ DBF โดยใช้ตัวอย่าง:

ดีบีพี = XBase ใหม่; ดีบีพี. OpenFile("D:\MyFile.dbf" , "D:\index.cdx" ); // เมื่อเปิดไฟล์ DBF จะมีการระบุไฟล์ดัชนีเพิ่มเติมดีบีพี. ดัชนีปัจจุบัน = dbf ดัชนี อินโค้ด; // ตั้งค่าดัชนีปัจจุบัน // ค้นหาโดยใช้วิธีการค้นหา:ถ้าดีบีพี. ค้นหา ("000000003" , "=" ) จากนั้นรายงาน ( + DBP. NAME); รายงานอื่น("ไม่พบ"); สิ้นสุดถ้า; // ค้นหาโดยใช้วิธี FindByKey:ดีบีพี. สำคัญ. รหัส = "000000002" ; ถ้าดีบีพี. FindByKey("=" ) จากนั้นรายงาน ( "พบแล้ว ชื่อรายการ:"+ ดีบีพี. ชื่อ); รายงานอื่น("ไม่พบ"); สิ้นสุดถ้า; ดีบีพี. ปิดไฟล์();

การลบรายการในไฟล์ DBF

การลบบันทึกทำได้โดยใช้วิธี Delete ():

ดีบีพี - ลบ();

แต่เมื่อใช้วิธีนี้ บันทึกจะไม่ถูกลบออกจากไฟล์อย่างถาวร แต่จะถูกทำเครื่องหมายว่าถูกลบแล้ว เมื่อวนซ้ำแถว บันทึกที่ถูกทำเครื่องหมายเพื่อลบจะถูกข้ามไป หากคุณต้องการรวบรวมข้อมูลทั้งไฟล์ รวมถึงรายการที่ทำเครื่องหมายเพื่อลบ คุณต้องตั้งค่าคุณสมบัติเป็น True การแสดงผลถูกลบแล้ววัตถุ xBase คุณสามารถดูได้ว่าระเบียนถูกทำเครื่องหมายเพื่อลบหรือไม่โดยใช้ฟังก์ชัน RecordDeleted() หากต้องการลบเครื่องหมายการลบ ให้ใช้เมธอด Restore()

ดีบีพี - DisplayDeleted = จริง; ยังไม่ DBF AtEnd() วนซ้ำถ้า DBP RecordDeleted() จากนั้น DBP คืนค่า(); สิ้นสุดถ้า; ดีบีพี. ต่อไป- สิ้นสุดรอบ;

หากต้องการลบรายการที่ทำเครื่องหมายไว้โดยตรง ให้ใช้วิธี Shrink():

ดีบีพี - บีบอัด();

หากคุณต้องการลบรายการทั้งหมดในไฟล์โดยตรง คุณสามารถใช้เมธอด ClearFile() ได้:

ดีบีพี - ล้างไฟล์();

กำลังโหลดจาก DBF โดยใช้ ADO

เทคโนโลยี ADO สามารถใช้ทำงานกับไฟล์ DBF ได้ ไดรเวอร์ ADO รวมอยู่ในระบบปฏิบัติการ Windows และไม่จำเป็นต้องติดตั้งเพิ่มเติม

ลองดูตัวอย่างโค้ดสำหรับอ่านจากไฟล์ DBF ที่ใช้เทคโนโลยี ADO:

ADO = COMObject ใหม่ ("ADODB.Connection" ); // สร้างวัตถุ COM ADO. เปิด( "ผู้ให้บริการ=Microsoft.Jet.OLEDB.4.0; |แหล่งข้อมูล = ""D:\""; |คุณสมบัติขยาย=DBASE III"- DB = ADO ดำเนินการ("เลือก * จาก MyFile" ); // ขอรับบันทึกทั้งหมดจากไฟล์ MyFile.DBFบาย บีดี. EOF= 0 รอบ //วนซ้ำบันทึกไฟล์ DBFรายงาน(DB.Fields("ชื่อ" ).value); // ตัวอย่างการเข้าถึงค่าฟิลด์ดีบี. ย้ายถัดไป(); //ไปที่รายการถัดไปสิ้นสุดรอบ; ADO. ปิด();

ตัวอย่างที่แสดงใช้สตริงการเชื่อมต่อ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="D:\";Extensed Properties=DBASE III" ในบรรทัดนี้:

  • ผู้ให้บริการคือไดรเวอร์ที่ใช้
  • แหล่งข้อมูล – เส้นทางที่มีไฟล์ DBF ตั้งอยู่ เส้นทางถูกระบุอย่างแม่นยำไปยังไดเร็กทอรี ชื่อไฟล์ถูกใช้เป็นชื่อตารางในแบบสอบถาม
  • คุณสมบัติเพิ่มเติม – เมื่อเข้าถึงไฟล์ DBF นี่เป็นพารามิเตอร์ที่จำเป็น คุณสามารถระบุรูปแบบไฟล์ได้

ความสนใจ!

เมื่ออ่านโดยใช้วิธีการที่ระบุ การเข้ารหัสเริ่มต้นคือ OEM ในการเปลี่ยนการเข้ารหัสเป็น ANSI คุณต้องตั้งค่าพารามิเตอร์ HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Jet\4.0\Engines\xBase\DataCodePage เป็น “ANSI” ในรีจิสทรีของ Windows

บางทีรหัสนี้อาจช่วยได้:

ฟังก์ชัน VB ที่คุณต้องใส่ลงใน MS Access นั้นค่อนข้างเรียบง่าย และโดยทั่วไปจะเรียกเมธอด TransferDatabase โดยส่งผ่าน DSN (ชี้ไปที่ฐานข้อมูลต้นทาง) ชื่อตารางต้นทาง และชื่อตารางปลายทาง รหัสมีลักษณะดังนี้:

การนำเข้าฟังก์ชันสาธารณะ (dsnName As String, sourceTableName As String, targetTableName As String) ‘ หากมีตารางอยู่แล้ว ให้ลบออก บนข้อผิดพลาด GoTo CopyTable DoCmd.DeleteObject acTable, targetTableName CopyTable: DoCmd.TransferDatabase _ acImport, _ "ฐานข้อมูล ODBC", _ "ODBC;DSN=" + dsnName, _ acTable, _ sourceTableName, _ targetTableName ฟังก์ชันสิ้นสุด

แล้วรหัส C#:

วัตถุ accessObject = null; ลอง ( accessObject = Activator.CreateInstance(Type.GetTypeFromProgID("Access.Application")); accessObject.GetType().InvoidMember("OpenCurrentDatabase", System.Reflection.BindingFlags.Default System.Reflection.BindingFlags.InurgeMethod, null, accessObject , วัตถุใหม่ ( "AccessDbase.mdb" )); accessObject.GetType().InvoidMember("Run", System.Reflection.BindingFlags.Default System.Reflection.BindingFlags.InurgeMethod, null, accessObject, วัตถุใหม่ ( "นำเข้า", "ชื่อ DSN", "ชื่อตารางแหล่งที่มา", "ชื่อตารางเป้าหมาย" )); accessObject.GetType().InvoidMember("CloseCurrentDatabase", System.Reflection.BindingFlags.Default System.Reflection.BindingFlags.InvokeMethod, null, accessObject, null); MessageBox.Show("คัดลอกสำเร็จ"); catch (ข้อยกเว้น เช่น) ( string message = ex.Message; while (ex.InnerException != null) ( ex = ex.InnerException; message += "\r \ n----\r\n" + ex.Message; ) MessageBox.Show(message); ) ในที่สุด ( if (accessObject != null) ( System.Runtime.InteropServices.Marshal.ReleaseComObject(accessObject); เข้าถึงวัตถุ = โมฆะ; -

การเปลี่ยน VBA เป็นอ่าน acLink แทนที่จะเป็น acImport ควรอนุญาตให้มีการเชื่อมโยง

แก้ไขความคิดเห็น

ฉันช่วยเรื่องนี้ไม่ได้ แต่นี่คือ VBScript บางตัวที่เชื่อมโยงตารางจาก MDB หนึ่งไปยังอีกตารางหนึ่ง

StrLinkFile = "C:\Docs\Link.mdb" strAccessFile = "C:\Docs\LTD.mdb" "สร้างลิงก์..." Set cn = CreateObject("ADODB.Connection") cn.Open "Provider=Microsoft. เจ็ต.OLEDB.4.0;" & _ "แหล่งข้อมูล = " & strAccessFile & ";" & _ "ข้อมูลความปลอดภัยคงอยู่=เท็จ" ตั้ง adoCat = CreateObject("ADOX.Catalog") ตั้ง adoCat.ActiveConnection = cn ตั้ง adoTbl = CreateObject("ADOX.Table") ตั้ง adoTbl.ParentCatalog = adoCat adoTbl.Name = "LinkTable" adoTbl.properties("Jet OLEDB:Link Datasource") = strLinkFile adoTbl.properties("Jet OLEDB:Link Provider String") = "MS Access" adoTbl.properties("Jet OLEDB:ชื่อตารางระยะไกล") = "Table1" adoTbl .properties("Jet OLEDB:Create Link") = True "ผนวกตารางเข้ากับคอลเลกชันตาราง " adoCat.Tables.Append adoTbl