ในแอปพลิเคชันฐานข้อมูล DELPHI โดยปกติเราจะเข้าถึงฐานข้อมูลได้สองวิธี หนึ่งคือการค้นหาผ่านฐานข้อมูล BDE
นั่นคือการใช้ไดรเวอร์ฐานข้อมูลที่มาพร้อมกับ DELPHI ข้อดีของวิธีนี้คือรวดเร็ว แต่ขอบเขตการใช้งานมีจำกัด
เมื่ออัพเดตเวอร์ชันฐานข้อมูลแล้ว อาจไม่สามารถใช้งานฐานข้อมูลใหม่ได้ อีกวิธีหนึ่งคือผ่าน ODBC ซึ่งมีข้อดี
ประเด็นก็คือสามารถจัดเตรียมระบบปฏิบัติการได้ (เช่น WINDOWS) และสามารถปรับให้เข้ากับฐานข้อมูลที่หลากหลายเป็นอินเทอร์เฟซมาตรฐานได้ ในการเตรียมการ
ในระหว่างกระบวนการ เราสามารถเลือกวิธีใดวิธีหนึ่งได้ตามความต้องการของเรา
เมื่อใช้ ODBC เพื่อเข้าถึงฐานข้อมูล วิธีการปกติคือการตั้งค่าแหล่งข้อมูลระบบ ODBC ในแผงการจัดการ ODBC
(System DSN) จากนั้นตั้งค่านามแฝงฐานข้อมูล (Alias) ใน DBD หรือในโปรแกรมให้สอดคล้องกับ DSN เพื่อให้คุณสามารถใช้
ฐานข้อมูลสามารถดำเนินการได้อย่างง่ายดาย ฉันเชื่อว่าโปรแกรมเมอร์ที่เคยใช้ DELPHI ในการทำแอปพลิเคชันฐานข้อมูลคุ้นเคยกับแง่มุมนี้เป็นอย่างดีแล้ว และฉันก็มีความรู้ไม่มากนัก
พูดว่า. ในการใช้งานจริง ผู้เขียนพบสถานการณ์เช่นนี้ แอปพลิเคชันฐานข้อมูลของเราอาศัยแหล่งข้อมูลระบบ ODBC
โปรแกรมที่เข้าถึงและใช้งานฐานข้อมูลก็ทำงานได้ดีจนวันหนึ่งคนที่คุ้นเคยกับระบบ WINDOWS แต่ไม่คุ้นเคย
ผู้ใช้ที่เชี่ยวชาญเกินไปแก้ไขหรือลบ DSN ระบบที่ตั้งไว้ของเราโดยไม่ตั้งใจ...
ดังนั้นผู้เขียนจึงเริ่มศึกษาวิธีการตั้งค่าเนื้อหาของ DSN ระบบ ODBC ในโปรแกรมแบบไดนามิกเพื่อให้สามารถเพิ่มโปรแกรมของตัวเองได้
ออเดอร์แน่นๆ. หลังจากค้นคว้ารีจิสทรี WINDOWS มาทั้งวัน ในที่สุดฉันก็พบเคล็ดลับในการตั้งค่า DSN กับผู้จัดการ ODBC
("มีความยุติธรรมในสวรรค์และโลก และคุณจะได้รับรางวัลเสมอสำหรับความพยายามของคุณ!" นี่ไม่ใช่โฆษณา!) ฉันกำลังเขียนลงเพื่อแบ่งปันกับทุกคน และฉันก็ขอคำแนะนำจากผู้เชี่ยวชาญด้วย
ความลับของ DSN ที่กำหนดโดยโปรแกรมการจัดการ ODBC อยู่ในรีจิสทรี หากคุณไม่เชื่อ คุณสามารถไปที่ HKEY_LOCAL_MACHINESoftwareODBC
ลองดูสิมันจะทำให้คุณรู้สึกว่าคุณประสบความสำเร็จไปแล้วครึ่งหนึ่งอย่างแน่นอน
ขั้นแรก มาดูไดรเวอร์ฐานข้อมูล ODBC ที่ติดตั้งในระบบกันก่อน ใน HKEY_LOCAL_MACHINESoftwareODBC
ODBCInst.INI จัดเก็บข้อมูลเกี่ยวกับไดรเวอร์ฐานข้อมูล ODBC ที่ติดตั้ง จากที่นี่ คุณสามารถตรวจสอบหมายเลข ODBC ที่ติดตั้งได้
ข้อมูลเช่นไฟล์ DLL ที่สอดคล้องกับไดรเวอร์ฐานข้อมูล ในแต่ละค่าคีย์ของไดรเวอร์ ODBCInst.INIODBC ชื่อคีย์คือไดรเวอร์
ชื่อ (เช่น Microsoft access Driver (*.mdb)) และค่าคีย์คือ "Installed" ซึ่งบ่งชี้ว่ามีการติดตั้งไดรเวอร์แล้ว มีอยู่
ODBCInst.INIDriverName (DriverName คือชื่อไดรเวอร์ เช่น Microsoft Access Driver (*.mdb))
มีข้อมูลโดยละเอียดเกี่ยวกับไดรเวอร์ เราได้รับเส้นทางและชื่อไฟล์ของไฟล์ DLL ที่เกี่ยวข้องกับไดรเวอร์ ODBC เป็นหลักจากที่นี่นั่นคือ
ค่าคีย์ของชื่อคีย์ไดรเวอร์โดยทั่วไปคือ "C:WINDOWSSYSTEMFileName.DLL"
จากนั้นดูข้อมูลการลงทะเบียนของระบบ DSN ใน HKEY_LOCAL_MACHINESoftwareODBCODBC.INI ระบบจะถูกจัดเก็บ
ข้อมูลการลงทะเบียนของ DSN, พารามิเตอร์ DSN ที่เราตั้งค่าในแผงการจัดการ ODBC อยู่ที่นี่
มาดูขั้นตอนการสร้าง DSN ของระบบ ODBC กัน นั่นคือหลังจากที่เราตั้งค่าพารามิเตอร์ในแผงการจัดการ ODBC เสร็จแล้ว การจัดการ ODBC
โปรแกรมลงทะเบียนข้อมูล DSN ในรีจิสทรีอย่างไร ลองทำการสร้าง DSN ระบบประเภท Ms Access97 ชื่อ MyAccess เป็นตัวอย่าง
พารามิเตอร์ที่เราระบุส่วนใหญ่ประกอบด้วยประเภทฐานข้อมูล (Microsoft Access Driver (*.mdb)) ชื่อแหล่งข้อมูล (MyAccess)
คำอธิบายแหล่งข้อมูล (การเข้าถึงของฉัน) พาธฐานข้อมูล (C:InetpubwwwrootTest.mdb) พารามิเตอร์อื่นๆ เช่น ชื่อผู้ใช้
รหัสผ่านผู้ใช้ เอกสิทธิ์เฉพาะบุคคล อ่านอย่างเดียว ฐานข้อมูลระบบ ไดเร็กทอรีเริ่มต้น ขนาดบัฟเฟอร์ จำนวนบรรทัดสแกน การหมดเวลาของหน้า ฯลฯ ใช้ระบบ
พารามิเตอร์เริ่มต้น ในขณะนี้ ระบบการลงทะเบียน DSN โดยทั่วไปควรมีขั้นตอนดังต่อไปนี้:
1. เพิ่มคีย์สตริงในแหล่งข้อมูล HKEY_LOCAL_MACHINESoftwareODBCODBC.INIODBC
ค่าคือ MyAccess = Microsoft Access Driver(*.mdb) โดยที่ชื่อแหล่งข้อมูลและประเภทฐานข้อมูลตามลำดับ
นี่คือการลงทะเบียนชื่อ DSN ของระบบในรีจิสทรี
2. สร้างคีย์ย่อย (SubKey) MyAccess ใน HKEY_LOCAL_MACHINESoftwareODBCODBC.INI นั่นคือสร้าง
สร้างคีย์เป็น HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccess จากนั้นสร้างบางส่วน
ค่าคีย์ ซึ่งอธิบายข้อมูลการกำหนดค่าของระบบ DSN โดยละเอียด ข้อมูลหลักคือ (เนื้อหาใน [] คือความคิดเห็นของผู้เขียน):
DBQ=C:InetpubwwwrootTest.mdb [สตริง ระบุเส้นทางฐานข้อมูล]
คำอธิบาย=การเข้าถึงของฉัน [สตริง แสดงถึงคำอธิบายฐานข้อมูล]
Driver=C:PWIN98Systemodbcjt32.dll [สตริง ระบุไดรเวอร์ ODBINST.INI ที่มองเห็นได้]
DriverId=0x00000019(25) [หมายเลขที่ระบุรหัสประจำตัวผู้ขับขี่ไม่สามารถเปลี่ยนแปลงได้]
FIL=การเข้าถึง Ms; [สตริง อาจเกี่ยวข้องกับตัวกรอง]
SafeTransaction=0x00000000 [ตัวเลข อาจระบุจำนวนธุรกรรมที่รองรับ]
UID="" [สตริงที่ระบุชื่อผู้ใช้ นี่คือสตริงว่าง]
3. สร้างคีย์ย่อย (SubKey) เครื่องยนต์ใน HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccess
จากนั้นสร้างคีย์ย่อย (SubKey)Jet ข้างใต้นั่นคือสร้างคีย์เป็น
HKEY_LOCAL_MACHINESoftwareODBCODBC.INIMyAccessEnginesJet จากนั้นสร้างบางส่วนไว้ข้างใต้
ค่าคีย์ ซึ่งอธิบายรายละเอียดข้อมูลการกำหนดค่ากลไกฐานข้อมูลของระบบ DSN ข้อมูลหลักมีดังนี้ (เนื้อหาใน [] เป็นคำอธิบายประกอบของผู้เขียน):
ImplicitCommitSync=ใช่ [สตริง อาจระบุว่าการเปลี่ยนแปลงข้อมูลมีผลทันทีหรือไม่]
MaxBufferSize=0x00000200(512) [ตัวเลขที่ระบุขนาดบัฟเฟอร์]
PageTimeout=0x00000005(5) [ตัวเลขที่ระบุการหมดเวลาของหน้า]
Threads=0x00000003(3) [หมายเลข อาจระบุจำนวนเธรดสูงสุดที่รองรับ]
UserCommitSync=ใช่ [สตริงอาจระบุว่าการแก้ไขข้อมูลจะมีผลกับผู้ใช้ทันทีหรือไม่]
ข้อมูลข้างต้นเป็นข้อมูลพื้นฐานสำหรับการสร้างระบบ DSN (ข้อมูลอื่นๆ เช่น ตัวเลือกหรือตัวเลือกขั้นสูงก็มีการตั้งค่าไว้ที่นี่เช่นกัน แต่เนื่องจากค่าเริ่มต้น
ข้อมูลที่ไม่ได้ระบุไว้ในรีจิสทรี) เราดำเนินการรีจิสทรีตามขั้นตอนข้างต้นในโปรแกรม และยังสามารถเพิ่ม DSN ของระบบหรือแก้ไขการกำหนดค่าได้อีกด้วย
ในโปรแกรมตัวอย่างต่อไปนี้ ระบบ DSN จะถูกสร้างขึ้นตามขั้นตอนข้างต้น โปรดใส่ใจกับความคิดเห็นในโปรแกรม
{************************************************ * ***
ในขั้นตอนนี้ แหล่งข้อมูลระบบ ODBC (DSN) จะถูกสร้างขึ้น
ชื่อแหล่งข้อมูล: MyAccess คำอธิบายแหล่งข้อมูล: แหล่งข้อมูลใหม่ของฉัน
ประเภทฐานข้อมูล: ACCESS97
ฐานข้อมูลที่สอดคล้องกัน: C:Inetpubwwwroot est.mdb
************************************************** * *****}
{โปรดทราบว่าควรรวม Registry ไว้ในคำสั่ง USES}
ขั้นตอน TForm1.Button1Click (ผู้ส่ง: TObject);
var
registerTemp : TRegistry;
bData : array[ 0..0 ] ของไบต์;
เริ่ม
registerTemp := TRegistry.Create; // สร้างอินสแตนซ์ Registry
ด้วย registerTemp ทำ
เริ่ม
RootKey:=HKEY_LOCAL_MACHINE;//ตั้งค่ารูทคีย์เป็น HKEY_LOCAL_MACHINE
// ค้นหาแหล่งข้อมูล SoftwareODBCODBC.INIODBC
ถ้า OpenKey('SoftwareODBCODBC.INIODBC Data Sources',True) แล้ว
start //ลงทะเบียนชื่อ DSN
WriteString( 'MyAccess', 'ไดรเวอร์ Microsoft Access (*.mdb)' );
จบ
อื่น
start//ไม่สามารถสร้างค่าคีย์ได้
memo1.lines.add('ไม่สามารถเพิ่มแหล่งข้อมูล ODBC');
ออก;
จบ;
ปิดคีย์;
//ค้นหาหรือสร้าง SoftwareODBCODBC.INIMyAccess และเขียนข้อมูลการกำหนดค่า DSN
ถ้า OpenKey('SoftwareODBCODBC.INIMyAccess',True) แล้ว
เริ่ม
WriteString( 'DBQ', 'C:inetpubwwwroot est.mdb' );//ไดเรกทอรีฐานข้อมูล
WriteString( 'คำอธิบาย', 'แหล่งข้อมูลใหม่ของฉัน' );//คำอธิบายแหล่งข้อมูล
WriteString( 'ไดรเวอร์', 'C:PWIN98SYSTEModbcjt32.dll' );//ไฟล์ DLL ของไดรเวอร์
WriteInteger( 'DriverId', 25 );//รหัสไดรเวอร์
WriteString( 'FIL', 'Ms Access;' );//พื้นฐานตัวกรอง
WriteInteger( 'SafeTransaction', 0 );//จำนวนธุรกรรมที่รองรับ
WriteString( 'UID', ' );//ชื่อผู้ใช้
ข้อมูล[0] := 0;
WriteBinaryData( 'พิเศษ', bData, 1 );//โหมดไม่ผูกขาด
WriteBinaryData( 'ReadOnly', bData, 1 );//โหมดไม่อ่านอย่างเดียว
จบ
else//ไม่สามารถสร้างค่าคีย์ได้
เริ่ม
memo1.lines.add('ไม่สามารถเพิ่มแหล่งข้อมูล ODBC');
ออก;
จบ;
ปิดคีย์;
//ค้นหาหรือสร้าง SoftwareODBCODBC.INIMyAccessEnginesJet
//เขียนข้อมูลการกำหนดค่ากลไกฐานข้อมูล DSN
ถ้า OpenKey('SoftwareODBCODBC.INIMyAccessEnginesJet',True) แล้ว
เริ่ม
WriteString( 'ImplicitCommitSync', 'ใช่' );
WriteInteger( 'MaxBufferSize', 512 );//ขนาดบัฟเฟอร์
WriteInteger( 'PageTimeout', 10 ); //เพจหมดเวลา
WriteInteger( 'Threads', 3 );//จำนวนเธรดที่รองรับ
WriteString( 'UserCommitSync', 'ใช่' );
จบ
else//ไม่สามารถสร้างค่าคีย์ได้
เริ่ม
memo1.lines.add('ไม่สามารถเพิ่มแหล่งข้อมูล ODBC');
ออก;
จบ;
ปิดคีย์;
memo1.lines.add('เพิ่มแหล่งข้อมูล ODBC ใหม่เรียบร้อยแล้ว');
ฟรี;
จบ;
จบ;
โปรแกรมข้างต้นได้รับการแก้ไขและส่งผ่านภายใต้ PWIN98+DELPHI3.0
ต่อไปนี้เป็นข้อมูลที่จำเป็นต้องตั้งค่าเพื่อสร้าง DSN ของประเภทฐานข้อมูลทั่วไป ([] คือเนื้อหาความคิดเห็น ยกเว้นความคิดเห็นพิเศษ แต่ละพารามิเตอร์สามารถดูได้ในคำอธิบายก่อนหน้า):
1. การเข้าถึง (ไดรเวอร์ Microsoft Access (*.mdb))
DBQ, คำอธิบาย, ไดร์เวอร์ [odbcjt32.dll], DriverID [25], FIL [Ms Access;],
SafeTransaction[ค่าเริ่มต้นคือ 0], UID[ค่าเริ่มต้นว่างเปล่า]
EnginesJetImplicitCommitSync[ค่าเริ่มต้นคือใช่], EnginesJetMaxBufferSize[ค่าเริ่มต้น 512],
EnginesJetPageTimeout[ค่าเริ่มต้นคือ 512], EnginesJetThreads[ค่าเริ่มต้นคือ 3],
EnginesJetUserCommitSync [ค่าเริ่มต้นใช่]
การตั้งค่าเพิ่มเติม: SystemDb[สตริง, เส้นทางไปยังฐานข้อมูลระบบ],
ReadOnly[ไบนารี ไม่ว่าจะเปิดในโหมดอ่านอย่างเดียวหรือไม่ 1 หมายถึงใช่ ค่าเริ่มต้นคือ 0]
Exclusive[ไบนารี ไม่ว่าจะเปิดในโหมดพิเศษ 1 หมายถึงใช่ ค่าเริ่มต้นคือ 0]
PWD [สตริง รหัสผ่านผู้ใช้]
2. Excel (ไดรเวอร์ Microsoft Excel (*.xls))
DBQ[Excel97(=pathxxx.xls), 5.0/7.0(=pathxxx.xls), 4.0(=เส้นทาง), 3.0(=เส้นทาง)],
คำอธิบาย, ไดร์เวอร์[odbcjt32.dll],
DefaultDir[Excel97(<>DBQ),5.0/7.0(<>DBQ),4.0(=DBQ),3.0(=DBQ)],
รหัสไดรเวอร์[790(Excel97), 22(5.0/7.0), 278(4.0), 534(3.0)],
FIL[Excel5.0;], อ่านอย่างเดียว, SafeTransaction, UID,
EnginesExcelImplicitCommitSync, EnginesExcelMaxScanRows[หมายเลข, จำนวนแถวที่สแกน, ค่าเริ่มต้นคือ 8],
เครื่องยนต์ ExcelThreads, เครื่องยนต์ ExcelUserCommitSync,
EnginesExcelFirstRowHasName[ไบนารี ไม่ว่าแถวแรกจะเป็นชื่อโดเมนหรือไม่ 1 หมายถึงใช่ ค่าเริ่มต้นคือ 1]
หมายเหตุ: DBQ ของ Excel97 และ Excel7.0/5.0 สอดคล้องกับไฟล์ XLS ในขณะที่ Excel4.0 และ Excel3.0 สอดคล้องกับไดเร็กทอรี
DefaultDir สอดคล้องกับไดเรกทอรี ซึ่งเป็นเส้นทางที่สอดคล้องกับ DBQ ใน Excel97 และ Excel7.0/5.0
จะเหมือนกับ DBQ ภายใต้ Excel4.0 และ Excel3.0; DriverID ของแต่ละเวอร์ชันจะแตกต่างกัน
3. dBase(ไดรเวอร์ dBase ของ Microsoft(*.dbf))
DefaultDir[สตริง, ไดเร็กทอรีที่มีไฟล์ฐานข้อมูลอยู่], คำอธิบาย, ไดรเวอร์[odbcjt32.dll],
DriverID[277(IV), 533(5.0)], FIL[dbase III;], SafeTransaction, UID,
EnginesXbaseImplicitCommitSync,
EnginesXbaseCollating[สตริง พื้นฐานการเรียงลำดับ สามารถเป็น ASCII, นานาชาติ, นอร์เวย์-เดนมาร์ก,
สวีเดน-ฟินแลนด์],
EnginesXbaseDeleted[ไบนารี ไม่ว่าจะแสดงบันทึกที่ถูกลบอย่างนุ่มนวลหรือไม่ 0 หมายถึงการแสดงผล ค่าเริ่มต้นคือ 1]
EnginesXbasePageTimeout[ค่าเริ่มต้นคือ 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [ไบนารี ไม่ว่าจะใช้จำนวนบรรทัดโดยประมาณหรือไม่ 1 คือใช่ ค่าเริ่มต้นคือ 0]
หมายเหตุ: (DriverId ของ dBaseIV และ dBase5.0 ทั้งสองเวอร์ชันแตกต่างกัน)
4. Foxpro (ไดรเวอร์ Microsoft Foxpro (*.dbf))
DefaultDir[ไดเร็กทอรีที่มีไฟล์ฐานข้อมูลอยู่], คำอธิบาย, ไดร์เวอร์[odbcjt32.dll],
DriverID[536(2.6), 280(2.5)], FIL[Foxpro 2.0;], SafeTransaction, UID,
EnginesXbaseCollating[สตริง พื้นฐานการเรียงลำดับ สามารถเป็น ASCII, International]
EnginesXbaseDeleted[ไบนารี ไม่ว่าจะแสดงบันทึกที่ถูกลบอย่างนุ่มนวลหรือไม่ 0 หมายถึงการแสดงผล ค่าเริ่มต้นคือ 1]
EnginesXbasePageTimeout[ค่าเริ่มต้นคือ 600], EnginesXbaseUserCommitSync,
EnginesXbaseThreads, EnginesXbaseStatistics [ไบนารี ไม่ว่าจะใช้จำนวนบรรทัดโดยประมาณหรือไม่ 1 คือใช่ ค่าเริ่มต้นคือ 0]
หมายเหตุ: (DriverId ของ Foxpro2.5 และ Foxpro2.6 นั้นแตกต่างกัน)
สร้างโปรแกรมข้างต้นให้เป็น COM หรือ ActiveX control ซึ่งสามารถใช้ได้ในภาษาการเขียนโปรแกรมระดับสูงมากมาย เช่น DELPHI, C++Buider, VB, VC และ PB