ในแอปพลิเคชันฐานข้อมูล 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_MACHINE/Software/ODBC ลองดูสิมันจะทำให้คุณรู้สึกว่าคุณประสบความสำเร็จไปแล้วครึ่งหนึ่งอย่างแน่นอน ขั้นแรก มาดูไดรเวอร์ฐานข้อมูล ODBC ที่ติดตั้งในระบบกันก่อน ใน HKEY_LOCAL_MACHINE/ซอฟต์แวร์/ODBC/ ODBCInst.INI จัดเก็บข้อมูลเกี่ยวกับไดรเวอร์ฐานข้อมูล ODBC ที่ติดตั้ง จากที่นี่ คุณสามารถตรวจสอบหมายเลข ODBC ที่ติดตั้งได้ ข้อมูลเช่นไฟล์ DLL ที่สอดคล้องกับไดรเวอร์ฐานข้อมูล ในแต่ละค่าคีย์ของไดรเวอร์ ODBCInst.INI/ODBC ชื่อคีย์คือไดรเวอร์ ชื่อ (เช่น Microsoft access Driver (*.mdb)) และค่าคีย์คือ "Installed" ซึ่งบ่งชี้ว่ามีการติดตั้งไดรเวอร์แล้ว มีอยู่ ODBCInst.INI/DriverName (DriverName คือชื่อไดรเวอร์ เช่น Microsoft Access Driver (*.mdb)) มีข้อมูลโดยละเอียดเกี่ยวกับไดรเวอร์ เราได้รับเส้นทางและชื่อไฟล์ของไฟล์ DLL ที่เกี่ยวข้องกับไดรเวอร์ ODBC เป็นหลักจากที่นี่นั่นคือ ค่าคีย์ของชื่อคีย์ Driver โดยทั่วไปคือ "C:/WINDOWS/SYSTEM/FileName.DLL" จากนั้นดูข้อมูลการลงทะเบียนของระบบ DSN ใน HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI ระบบจะถูกจัดเก็บ ข้อมูลการลงทะเบียนของ DSN, พารามิเตอร์ DSN ที่เราตั้งค่าในแผงการจัดการ ODBC อยู่ที่นี่ มาดูขั้นตอนการสร้าง DSN ของระบบ ODBC กัน นั่นคือหลังจากที่เราตั้งค่าพารามิเตอร์ในแผงการจัดการ ODBC เสร็จแล้ว การจัดการ ODBC โปรแกรมลงทะเบียนข้อมูล DSN ในรีจิสทรีอย่างไร ลองทำการสร้าง DSN ระบบประเภท Ms Access97 ชื่อ MyAccess เป็นตัวอย่าง พารามิเตอร์ที่เราระบุส่วนใหญ่ประกอบด้วยประเภทฐานข้อมูล (Microsoft Access Driver (*.mdb)) ชื่อแหล่งข้อมูล (MyAccess) คำอธิบายแหล่งข้อมูล (การเข้าถึงของฉัน) พาธฐานข้อมูล (C:/Inetpub/wwwroot/Test.mdb) พารามิเตอร์อื่นๆ เช่น ชื่อผู้ใช้ รหัสผ่านผู้ใช้ เอกสิทธิ์เฉพาะบุคคล อ่านอย่างเดียว ฐานข้อมูลระบบ ไดเร็กทอรีเริ่มต้น ขนาดบัฟเฟอร์ จำนวนบรรทัดสแกน การหมดเวลาของหน้า ฯลฯ ใช้ระบบ พารามิเตอร์เริ่มต้น ในขณะนี้ ระบบการลงทะเบียน DSN โดยทั่วไปควรมีขั้นตอนดังต่อไปนี้: 1. เพิ่มคีย์สตริงในแหล่งข้อมูล HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/ODBC ค่าคือ MyAccess = Microsoft Access Driver(*.mdb) โดยที่ชื่อแหล่งข้อมูลและประเภทฐานข้อมูลตามลำดับ นี่คือการลงทะเบียนชื่อ DSN ของระบบในรีจิสทรี 2. สร้างคีย์ย่อย (SubKey) MyAccess ใน HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI นั่นคือสร้าง สร้างคีย์เป็น HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess จากนั้นสร้างบางส่วน ค่าคีย์ ซึ่งอธิบายข้อมูลการกำหนดค่าของระบบ DSN โดยละเอียด ข้อมูลหลักคือ (เนื้อหาใน [] คือความคิดเห็นของผู้เขียน): DBQ=C:/Inetpub/wwwroot/Test.mdb [สตริง ระบุเส้นทางฐานข้อมูล] คำอธิบาย=การเข้าถึงของฉัน [สตริง แสดงถึงคำอธิบายฐานข้อมูล] Driver=C:/PWIN98/System/odbcjt32.dll [สตริง ระบุไดรเวอร์ ODBINST.INI ที่มองเห็นได้] DriverId=0x00000019(25) [หมายเลขที่ระบุรหัสประจำตัวผู้ขับขี่ไม่สามารถเปลี่ยนแปลงได้] FIL=การเข้าถึง Ms; [สตริง อาจเกี่ยวข้องกับตัวกรอง] SafeTransaction=0x00000000 [ตัวเลข อาจระบุจำนวนธุรกรรมที่รองรับ] UID="" [สตริงที่ระบุชื่อผู้ใช้ นี่คือสตริงว่าง] 3. สร้างคีย์ย่อย (SubKey) เครื่องยนต์ใน HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess, จากนั้นสร้างคีย์ย่อย (SubKey)Jet ข้างใต้นั่นคือสร้างคีย์เป็น HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess/Engines/Jet และสร้างบางส่วนไว้ข้างใต้ ค่าคีย์ ซึ่งอธิบายรายละเอียดข้อมูลการกำหนดค่ากลไกฐานข้อมูลของระบบ DSN ข้อมูลหลักมีดังนี้ (เนื้อหาใน [] เป็นคำอธิบายประกอบของผู้เขียน): ImplicitCommitSync=ใช่ [สตริง อาจระบุว่าการเปลี่ยนแปลงข้อมูลมีผลทันทีหรือไม่] MaxBufferSize=0x00000200(512) [ตัวเลขที่ระบุขนาดบัฟเฟอร์] PageTimeout=0x00000005(5) [ตัวเลขที่ระบุการหมดเวลาของหน้า] Threads=0x00000003(3) [หมายเลข อาจระบุจำนวนเธรดสูงสุดที่รองรับ] UserCommitSync=ใช่ [สตริงอาจระบุว่าการแก้ไขข้อมูลจะมีผลกับผู้ใช้ทันทีหรือไม่] ข้อมูลข้างต้นเป็นข้อมูลพื้นฐานสำหรับการสร้างระบบ DSN (ข้อมูลอื่นๆ เช่น ตัวเลือกหรือตัวเลือกขั้นสูงก็มีการตั้งค่าไว้ที่นี่เช่นกัน แต่เนื่องจากค่าเริ่มต้น ข้อมูลที่ไม่ได้ระบุไว้ในรีจิสทรี) เราดำเนินการรีจิสทรีตามขั้นตอนข้างต้นในโปรแกรม และยังสามารถเพิ่ม DSN ของระบบหรือแก้ไขการกำหนดค่าได้อีกด้วย ในโปรแกรมตัวอย่างต่อไปนี้ ระบบ DSN จะถูกสร้างขึ้นตามขั้นตอนข้างต้น โปรดใส่ใจกับความคิดเห็นในโปรแกรม {************************************************ * *** ในขั้นตอนนี้ แหล่งข้อมูลระบบ ODBC (DSN) จะถูกสร้างขึ้น ชื่อแหล่งข้อมูล: MyAccess คำอธิบายแหล่งข้อมูล: แหล่งข้อมูลใหม่ของฉัน ประเภทฐานข้อมูล: ACCESS97 ฐานข้อมูลที่เกี่ยวข้อง: C:/Inetpub/wwwroot/test.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 //ค้นหาแหล่งข้อมูลซอฟต์แวร์/ODBC/ODBC.INI/ODBC ถ้า OpenKey('Software/ODBC/ODBC.INI/ODBC Data Sources',True) แล้ว start //ลงทะเบียนชื่อ DSN WriteString( 'MyAccess', 'ไดรเวอร์ Microsoft Access (*.mdb)' ); จบ อื่น start//ไม่สามารถสร้างค่าคีย์ได้ memo1.lines.add('ไม่สามารถเพิ่มแหล่งข้อมูล ODBC'); ออก; จบ; ปิดคีย์; //ค้นหาหรือสร้าง Software/ODBC/ODBC.INI/MyAccess และเขียนข้อมูลการกำหนดค่า DSN ถ้า OpenKey('Software/ODBC/ODBC.INI/MyAccess',True) แล้ว เริ่ม WriteString( 'DBQ', 'C:/inetpub/wwwroot/test.mdb' );//ไดเร็กทอรีฐานข้อมูล WriteString( 'คำอธิบาย', 'แหล่งข้อมูลใหม่ของฉัน' );//คำอธิบายแหล่งข้อมูล WriteString( 'ไดรเวอร์', 'C:/PWIN98/SYSTEM/odbcjt32.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'); ออก; จบ; ปิดคีย์; // ค้นหาหรือสร้าง Software/ODBC/ODBC.INI/MyAccess/Engines/Jet //เขียนข้อมูลการกำหนดค่ากลไกฐานข้อมูล DSN ถ้า OpenKey('Software/ODBC/ODBC.INI/MyAccess/Engines/Jet',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[ค่าเริ่มต้นว่างเปล่า] เครื่องยนต์/Jet/ImplicitCommitSync[ค่าเริ่มต้นคือใช่], เครื่องยนต์/Jet/MaxBufferSize[ค่าเริ่มต้น 512], Engines/Jet/PageTimeout[ค่าเริ่มต้นคือ 512], Engines/Jet/Threads[ค่าเริ่มต้นคือ 3], เครื่องยนต์/เจ็ท/UserCommitSync [ค่าเริ่มต้นคือใช่] การตั้งค่าเพิ่มเติม: SystemDb[สตริง, เส้นทางไปยังฐานข้อมูลระบบ], ReadOnly[ไบนารี ไม่ว่าจะเปิดในโหมดอ่านอย่างเดียวหรือไม่ 1 หมายถึงใช่ ค่าเริ่มต้นคือ 0] Exclusive[ไบนารี ไม่ว่าจะเปิดในโหมดพิเศษ 1 หมายถึงใช่ ค่าเริ่มต้นคือ 0] PWD [สตริง รหัสผ่านผู้ใช้] 2. Excel (ไดรเวอร์ Microsoft Excel (*.xls)) DBQ[Excel97(=path/xxx.xls), 5.0/7.0(=path/xxx.xls), 4.0(=path), 3.0(=path)], คำอธิบาย, ไดร์เวอร์[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, เครื่องยนต์/Excel/ImplicitCommitSync, เครื่องยนต์/Excel/MaxScanRows[หมายเลข, จำนวนแถวที่สแกน, ค่าเริ่มต้นคือ 8], เครื่องยนต์/Excel/เธรด เครื่องยนต์/Excel/UserCommitSync、 Engines/Excel/FirstRowHasName[ไบนารี ไม่ว่าแถวแรกจะเป็นชื่อโดเมนหรือไม่ 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, เครื่องยนต์/Xbase/ImplicitCommitSync, Engines/Xbase/Collating[String, พื้นฐานการเรียงลำดับ, สามารถเป็น ASCII, International, Norwegian-Danish, สวีเดน-ฟินแลนด์], Engines/Xbase/Deleted[ไบนารี ไม่ว่าจะแสดงบันทึกที่ถูกลบแบบนุ่มนวลหรือไม่ 0 หมายถึงการแสดงผล ค่าเริ่มต้นคือ 1] เครื่องยนต์/Xbase/PageTimeout[ค่าเริ่มต้นคือ 600], เครื่องยนต์/Xbase/UserCommitSync, เอ็นจิ้น/Xbase/เธรด, เอ็นจิ้น/Xbase/สถิติ [ไบนารี ไม่ว่าจะใช้จำนวนบรรทัดโดยประมาณหรือไม่ 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, Engines/Xbase/Collating[String, sorting base, can be ASCII, International], Engines/Xbase/Deleted[ไบนารี ไม่ว่าจะแสดงบันทึกที่ถูกลบแบบนุ่มนวลหรือไม่ 0 หมายถึงการแสดงผล ค่าเริ่มต้นคือ 1] เครื่องยนต์/Xbase/PageTimeout[ค่าเริ่มต้นคือ 600], เครื่องยนต์/Xbase/UserCommitSync, เอ็นจิ้น/Xbase/เธรด เอ็นจิ้น/Xbase/สถิติ [ไบนารี ไม่ว่าจะใช้จำนวนบรรทัดโดยประมาณหรือไม่ 1 หมายถึงใช่ ค่าเริ่มต้น 0] หมายเหตุ: (DriverId ของ Foxpro2.5 และ Foxpro2.6 นั้นแตกต่างกัน) สร้างโปรแกรมข้างต้นให้เป็น COM หรือ ActiveX control ซึ่งสามารถใช้ได้ในภาษาการเขียนโปรแกรมระดับสูงมากมาย เช่น DELPHI, C++Buider, VB, VC และ PB |