1. การตั้งคำถาม
ในโครงการล่าสุด ฉันประสบปัญหากับการทำงานของ ASP ของตารางไลบรารี FoxPro (*.DBF) ในความเป็นจริง มีแอพพลิเคชั่นซอฟต์แวร์มากมายที่ใช้ตาราง DBF วิธีใช้ข้อมูลเหล่านี้ในสภาพแวดล้อมเครือข่ายทำให้เพื่อนหลายคนต้องสูญเสีย
ฉันยังตรวจสอบข้อมูลจำนวนมากและไม่พบคำอธิบายโดยละเอียดของวิธีแก้ปัญหา หลังจากการทดสอบ ฉันได้แก้ไขปัญหานี้ตั้งแต่แรกแล้วและจะแชร์กับทุกคน
บทความนี้พยายามแก้ไขปัญหาต่อไปนี้:
1. ASP รวมตารางว่าง (*.dbf ไฟล์) ที่สร้างโดย FoxPro
2. จัดเก็บข้อมูลและไฟล์กราฟิกหลายประเภทลงในตาราง dbf ในเวลาเดียวกัน
(โปรแกรมตัวอย่างมีให้จาก Set conn = Server.CreateObject("ADODB.Connection")
connstr = "ไดรเวอร์={ไดรเวอร์ Microsoft Visual FoxPro};SourceType=DBF;"&_
"SourceDB=" & Server.MapPath(db) &";พิเศษ=ไม่ใช่"
conn.Open connstr
ในโค้ดข้างต้น data คือพาธสัมพัทธ์ที่มีไฟล์ DBF ของฉันอยู่ (สัมพันธ์กับไฟล์ที่มีโค้ดนี้อยู่) และจะถูกแปลงเป็นพาธสัมบูรณ์ผ่าน Server.MapPath(db)
http://www.connectionstrings.com จัดเตรียมสตริงการเชื่อมต่อสำหรับไฟล์ตารางไลบรารีหลายประเภท สำหรับไฟล์ DBF สตริงการเชื่อมต่อที่กำหนดคือ:
"โปรแกรมควบคุม={โปรแกรมควบคุม Microsoft dBASE (*.dbf)};DriverID=277;Dbq=c:mydbpath;"
ฉันไม่สามารถเชื่อมต่อได้สำเร็จโดยใช้สตริงการเชื่อมต่อนี้ และไม่ได้ทำการทดสอบเพิ่มเติม เพื่อนที่สนใจสามารถลองใช้สตริงข้างต้นได้
.www.downcodes.com
2. ประกาศชื่อตารางในคำสั่ง SQL
คุณสามารถประกาศชื่อตารางที่จะดำเนินการในคำสั่ง SQL ในรูปแบบของ [ชื่อตาราง] หรือ [ชื่อตาราง.extension] ตัวอย่างเช่น ชื่อไฟล์ของตารางคือ t1.dbf และคำสั่ง SQL คือ:
เลือก * จาก [t1] หรือเลือก * จาก [t1.dbf]
3. การดำเนินการจัดเก็บข้อมูลประเภทต่างๆ
DBF รองรับประเภทข้อมูลไม่มากนัก ซึ่งควรค่าแก่การสังเกตวันที่ (ประเภทวันที่), บันทึกช่วยจำ (ประเภทบันทึกย่อ) และทั่วไป (ประเภททั่วไป) ในที่นี้เราเน้นที่ข้อมูลประเภทข้อมูล ประเภท Memo และ Gen จะถูกใช้ในการจัดเก็บไฟล์กราฟิก ซึ่งจะอธิบายในภายหลัง
โดยทั่วไปฉันใช้สองวิธีในการเขียนการดำเนินการฐานข้อมูล วิธีหนึ่งคือการใช้คำสั่ง insert และอีกวิธีคือใช้วิธี addnew สำหรับตาราง DBF วิธีทั้งสองนี้จะแตกต่างกันเล็กน้อย
เมื่อใช้คำสั่ง insert โปรดทราบว่ารูปแบบการเขียนของข้อมูลประเภทวันที่คือ {^yyyy-mm-dd} และตัวคั่นจะแตกต่างจาก # และ SQL Server ของ Access คำสั่ง SQL เฉพาะคือ:
แทรกลงในค่า [t1.dbf] (ชื่อ,วันเกิด) ('MyName',{^1970-1-1})
เมื่อใช้วิธีการ addnew รหัสที่ฉันใช้เดิมคือ:
rst.open "[t1]",conn,0,3
rst.เพิ่มใหม่
rst(0).value = "ชื่อของฉัน"
แรก(1).value = {^1970-1-1}
rst.อัปเดต
อันดับแรกปิด
ไม่มีปัญหาเมื่อใช้งาน SQL Server และ Access แต่มีปัญหาเมื่อใช้งานไฟล์ DBF หลังจากทดลอง ในที่สุดฉันก็พบวิธีที่ถูกต้อง:
sql = "เลือก * จาก t1"
rst.open sql,conn,0,3
rst.เพิ่มใหม่
rst(0).value = "ชื่อของฉัน"
แรก(1).value = {^1970-1-1}
rst.อัปเดต
rst.close
โปรดทราบว่าความแตกต่างระหว่างโค้ดสองส่วนข้างต้นนั้นส่วนใหญ่อยู่ในคำสั่ง SQL ดังที่กล่าวไว้ก่อนหน้านี้ ในคำสั่ง SQL คุณสามารถประกาศไฟล์ตารางในรูปแบบ [ชื่อตาราง] หรือ [ชื่อตาราง.dbf] ได้ แต่เมื่อใช้วิธีการ addnew ชื่อตารางจะไม่สามารถมีนามสกุลได้ และวงเล็บเหลี่ยมจะไม่สามารถเพิ่มได้ ไม่เช่นนั้นจะขึ้นว่า "ไม่ใช่ชื่อตารางธรรมดา ไม่สามารถอัปเดตได้"
4. การจัดเก็บไฟล์กราฟิก
ในตาราง DBF สามารถใช้ทั้งบันทึกช่วยจำและฟิลด์ทั่วไปเพื่อจัดเก็บกราฟิก เสียงและวิดีโอ ข้อความ และไฟล์อื่นๆ (โปรดดูที่ http://www.chinadesign.com.cn/NewsContents1.asp?id=2663 ) ที่นี่ เราตั้งค่าประเภทฟิลด์เป็น memo(binary) (ประเภทการเตรียมไบนารี) ใช้เมธอด rst(n).AppendChunk() เพื่อเขียนข้อมูลไบนารีของรูปภาพผลลัพธ์ และใช้เมธอด Response.BinaryWrite() เพื่อกู้คืนไบนารี ข้อมูลเป็นรูปภาพ มีบทความมากมายที่เกี่ยวข้องกับคลังภาพ ดังนั้น ฉันจะไม่ลงรายละเอียดที่นี่
ส่วนการใช้ช่อง General เก็บภาพ ผมลองแล้ว แต่ไม่ได้ผล เลยไม่ได้ลองใหม่
5. การลบข้อมูล
คุณสามารถใช้คำสั่ง Delete เพื่อลบข้อมูลได้ แต่เมื่อคุณเปิดไฟล์ตารางหลังจากการลบ คุณจะพบว่าข้อมูลนั้นถูกทำเครื่องหมายไว้สำหรับการลบเท่านั้น และไม่ได้ถูกลบออกจากตารางจริงๆ ใน Foxpro ให้ใช้คำสั่ง pack เพื่อลบข้อมูลอย่างถาวร หลังจากตรวจสอบข้อมูลบางอย่างแล้ว พบว่า VB ไม่สามารถใช้งานการดำเนินการแพ็คได้ และแน่นอนว่า VBS ไม่สามารถใช้งานได้ วิธีแก้ไขปัญหาทั่วไปคือการนำเข้าข้อมูลในตาราง (โดยไม่มีเครื่องหมายลบ) ลงในตารางใหม่เป็นระยะๆ ลบตารางต้นฉบับ จากนั้นเปลี่ยนชื่อตารางใหม่เป็นชื่อตารางเดิม
6. ข้อมูลและรูปภาพจะถูกจัดเก็บไว้ในฐานข้อมูลพร้อมกัน
ปัญหานี้ไม่อยู่ในขอบเขตของบทความนี้ มีบทความมากมายบนอินเทอร์เน็ตที่ให้แนวทางแก้ไข
ฉันใช้งานฟังก์ชันนี้โดยใช้โปรแกรมอัพโหลดแบบไม่มีส่วนประกอบ "Huajing" เพื่อนบางคนอาจถามว่าการอัปโหลด "Huajing" ถูกเขียนเป็นไฟล์และไม่มีวิธีใดที่จะเก็บไว้ในฐานข้อมูล ไม่เลว แต่ด้วยการเปลี่ยนแปลงเล็กน้อย คุณสามารถรับข้อมูลไบนารีของรูปภาพแล้วจัดเก็บไว้ในฐานข้อมูลได้ ในตัวอย่างของฉัน มีการเปลี่ยนแปลงในโปรแกรมสภาพแวดล้อมที่มีการแสดงความคิดเห็น โปรดดูที่การเปลี่ยนแปลงเหล่านั้น
4. บทสรุป
บทความนี้กล่าวถึงการดำเนินงานของ ASP ของตาราง DBF ฟรีเป็นหลัก ถ้าเป็นไลบรารี DBC สตริงการเชื่อมต่อที่เกี่ยวข้องจะได้รับใน inc/conn.asp ในตัวอย่าง
ณ จุดนี้ ฉันเชื่อว่าเพื่อนๆ มีความเข้าใจโดยทั่วไปเกี่ยวกับการทำงานของตาราง DBF แล้ว เมื่อรวมกับตัวอย่างของฉันแล้ว ฉันเชื่อว่าคุณสามารถพัฒนาฟังก์ชันต่างๆ ได้มากขึ้น
ขอให้โชคดี!