DELPHI 데이터베이스 애플리케이션에서는 일반적으로 데이터베이스에 액세스하는 두 가지 방법이 있습니다. 하나는 BDE 데이터베이스를 검색하는 것입니다. 즉, DELPHI와 함께 제공되는 데이터베이스 드라이버를 사용하는 것입니다. 이 방법의 장점은 속도가 빠르지만 적용 범위가 제한된다는 것입니다. 데이터베이스 버전이 업데이트되면 새 데이터베이스를 작동하지 못할 수도 있습니다. 또 다른 방법은 ODBC를 사용하는 것입니다. 이는 장점이 있습니다. 요점은 운영 체제(예: WINDOWS)와 함께 제공될 수 있으며 표준 인터페이스로 다양한 데이터베이스에 적용할 수 있다는 점입니다. 준비중 이 과정에서 필요에 따라 방법 중 하나를 선택할 수 있습니다. ODBC를 사용하여 데이터베이스에 액세스할 때 일반적인 방법은 ODBC 관리 패널에서 ODBC 시스템 데이터 원본을 설정하는 것입니다. (시스템 DSN)을 선택한 후 DBD나 프로그램에서 해당 DSN에 해당하는 데이터베이스 별칭(Alias)을 설정하여 사용할 수 있습니다. 데이터베이스를 쉽게 운영할 수 있습니다. 나는 DELPHI를 사용하여 데이터베이스 애플리케이션을 수행한 프로그래머들이 이미 이 측면에 매우 익숙하다고 생각하며, 나는 아는 바가 많지 않습니다. 말했다. 실제 응용 프로그램에서 저자는 이러한 상황에 직면했습니다. 우리의 데이터베이스 응용 프로그램은 ODBC 시스템 데이터 소스에 의존합니다. 데이터베이스에 접근하여 운영하는 응용 프로그램이 어느 날 WINDOWS 시스템에 익숙하지만 익숙하지 않은 사람까지 잘 실행되었습니다. 너무 능숙한 사용자가 사전 설정된 시스템 DSN을 실수로 수정하거나 삭제했습니다... 이에 저자는 ODBC 시스템 DSN의 내용을 프로그램에 동적으로 설정하여 나만의 프로그램을 늘릴 수 있는 방법에 대해 연구하기 시작했다. 주문은 확실합니다. 하루 종일 WINDOWS 레지스트리를 조사한 끝에 마침내 ODBC 관리자를 사용하여 DSN을 설정하는 비결을 찾았습니다. ("하늘과 땅에는 정의가 있으니, 노력한 만큼 반드시 보상을 받을 것이다!" 광고가 아닙니다!) 많은 분들과 공유하려고 글을 쓰고 있으며, 전문가분들께도 조언을 구합니다. ODBC 관리 프로그램으로 DSN을 설정하는 비결은 레지스트리에 있습니다. 믿을 수 없다면 HKEY_LOCAL_MACHINE/Software/ODBC에 들어가시면 됩니다. 한 번 보세요. 이미 절반 정도 성공했다는 느낌이 들게 될 것입니다. 먼저 시스템에 설치된 ODBC 데이터베이스 드라이버를 살펴보겠습니다. HKEY_LOCAL_MACHINE/소프트웨어/ODBC/ ODBCInst.INI는 설치된 ODBC 데이터베이스 드라이버에 대한 정보를 저장합니다. 여기에서 설치된 ODBC 번호를 확인할 수 있습니다. 데이터베이스 드라이버에 해당하는 DLL 파일 등의 정보입니다. ODBCInst.INI/ODBC 드라이버의 각 키 값에서 키 이름은 드라이버입니다. 이름(예: Microsoft 액세스 드라이버(*.mdb)) 및 키 값은 "Installed"로, 드라이버가 설치되었음을 나타냅니다. 존재하다 ODBCInst.INI/DriverName(DriverName은 Microsoft Access Driver(*.mdb)와 같은 드라이버 이름입니다.) , 드라이버에 대한 자세한 정보가 있습니다. 우리는 주로 여기에서 ODBC 드라이버에 해당하는 DLL 파일의 경로와 파일 이름을 얻습니다. 키 이름 Driver의 키 값은 일반적으로 "C:/WINDOWS/SYSTEM/FileName.DLL"입니다. 그런 다음 시스템 DSN의 등록 정보를 확인합니다. HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI에 시스템이 저장되어 있습니다. DSN의 등록 정보, ODBC 관리 패널에서 설정한 DSN 매개변수가 여기에 있습니다. ODBC 시스템 DSN을 생성하는 단계를 살펴보겠습니다. 즉, ODBC 관리 패널에서 매개변수 설정을 완료한 후 ODBC 관리를 수행합니다. 프로그램은 DSN 정보를 레지스트리에 어떻게 등록합니까? MyAccess라는 Ms Access97 유형 시스템 DSN을 예로 들어보겠습니다. 우리가 지정하는 매개변수에는 주로 데이터베이스 유형(Microsoft Access Driver(*.mdb)), 데이터 소스 이름(MyAccess), 데이터 소스 설명(My ACCESS), 데이터베이스 경로(C:/Inetpub/wwwroot/Test.mdb), 사용자 이름과 같은 기타 매개변수, 사용자 비밀번호, 단독, 읽기 전용, 시스템 데이터베이스, 기본 디렉터리, 버퍼 크기, 스캔 라인 수, 페이지 시간 초과 등 시스템 사용 기본 매개변수. 이때 등록 시스템 DSN은 일반적으로 다음 단계를 거쳐야 합니다. 1. HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/ODBC 데이터 소스에 문자열 키를 추가합니다. 값은 MyAccess = Microsoft Access Driver(*.mdb)입니다. 여기서 각각 데이터 소스 이름과 데이터베이스 유형이 있습니다. 이는 레지스트리에 시스템 DSN 이름을 등록하는 것입니다. 2. HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI에 하위 키(SubKey) MyAccess를 생성합니다. HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess로 키를 생성한 다음 일부를 생성합니다. 시스템 DSN의 구성 정보를 자세히 설명하는 키 값입니다. 주요 정보는 다음과 같습니다([] 안의 내용은 작성자의 의견입니다). DBQ=C:/Inetpub/wwwroot/Test.mdb [데이터베이스 경로를 나타내는 문자열] Description=My ACCESS [데이터베이스 설명을 나타내는 문자열] Driver=C:/PWIN98/System/odbcjt32.dll [드라이버를 나타내는 문자열, 표시되는 ODBCINST.INI] DriverId=0x00000019(25) [운전자 식별을 나타내는 숫자는 변경할 수 없습니다.] FIL=Ms 액세스 [문자열, 필터와 관련될 수 있음] SafeTransaction=0x00000000 [숫자, 지원되는 트랜잭션 작업 수를 나타낼 수 있음] UID="" [사용자 이름을 나타내는 문자열, 여기는 빈 문자열] 3. HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess에 하위 키(SubKey)엔진을 생성합니다. 그런 다음 그 아래에 하위 키(SubKey)Jet를 만듭니다. 즉, 다음과 같이 키를 만듭니다. HKEY_LOCAL_MACHINE/Software/ODBC/ODBC.INI/MyAccess/Engines/Jet 그 아래에 일부를 만듭니다. 시스템 DSN의 데이터베이스 엔진 구성 정보를 상세하게 기술하는 키 값이다. 주요 정보는 다음과 같다. ([] 안의 내용은 작성자의 주석이다.) ImplicitCommitSync=Yes [문자열, 데이터 수정 사항이 즉시 반영되는지 여부를 나타낼 수 있음] MaxBufferSize=0x00000200(512) [버퍼 크기를 나타내는 숫자] PageTimeout=0x00000005(5) [페이지 시간 초과를 나타내는 숫자] Threads=0x00000003(3) [숫자, 지원되는 최대 스레드 수를 나타낼 수 있음] UserCommitSync=예 [문자열, 데이터 수정 사항이 사용자에게 즉시 반영되는지 여부를 나타낼 수 있음] 위 내용은 시스템 DSN을 구축하기 위한 기본 정보입니다(옵션이나 고급 옵션 등 기타 정보도 여기서 설정하지만 기본 사항이므로 레지스트리에 나열되지 않은 정보), 프로그램의 위 단계에 따라 레지스트리를 운영하고 시스템 DSN을 추가하거나 구성을 수정할 수도 있습니다. 다음 예제 프로그램에서는 위의 단계에 따라 시스템 DSN이 생성됩니다. 프로그램의 설명에 주의하세요. {************************************************ * *** 이 절차에서는 ODBC 시스템 데이터 소스(DSN)가 생성됩니다. 데이터 소스 이름: MyAccess 데이터 소스 설명: 내 새 데이터 소스 데이터베이스 유형:ACCESS97 해당 데이터베이스: C:/Inetpub/wwwroot/test.mdb ************************************************** * *****} {레지스트리는 USES 문에 포함되어야 합니다.} PROcedure TForm1.Button1Click(Sender: TObject); var RegisterTemp : TRegistry; bData : 바이트 배열[ 0..0 ]; 시작하다 RegisterTemp := TRegistry.Create; //레지스트리 인스턴스 생성 RegisterTemp를 사용하여 시작하다 RootKey:=HKEY_LOCAL_MACHINE;//루트 키 값을 HKEY_LOCAL_MACHINE으로 설정 //소프트웨어/ODBC/ODBC.INI/ODBC 데이터 소스 찾기 if OpenKey('Software/ODBC/ODBC.INI/ODBC 데이터 소스',True) then start //DSN 이름 등록 WriteString( 'MyAccess', 'Microsoft Access 드라이버(*.mdb)' ); 끝 또 다른 시작//키 값을 생성하지 못했습니다. memo1.lines.add('ODBC 데이터소스 추가 실패'); 출구; 끝; 닫기키; //Software/ODBC/ODBC.INI/MyAccess를 찾거나 생성하고 DSN 구성 정보를 작성합니다. if OpenKey('Software/ODBC/ODBC.INI/MyAccess',True) 다음 시작하다 WriteString( 'DBQ', 'C:/inetpub/wwwroot/test.mdb' );//데이터베이스 디렉터리 WriteString( 'Description', '새 데이터 소스' );//데이터 소스 설명 WriteString( '드라이버', 'C:/PWIN98/SYSTEM/odbcjt32.dll' );//드라이버 DLL 파일 WriteInteger( 'DriverId', 25 );//운전자 ID WriteString( 'FIL', 'Ms Access;' );//필터 기준 WriteInteger( 'SafeTransaction', 0 );//지원되는 트랜잭션 작업 수 WriteString( 'UID', '' );//사용자 이름 bData[0] := 0; WriteBinaryData( 'Exclusive', bData, 1 );//비독점 모드 WriteBinaryData( 'ReadOnly', bData, 1 );//비읽기 전용 모드 끝 else//키값 생성 실패 시작하다 memo1.lines.add('ODBC 데이터소스 추가 실패'); 출구; 끝; 닫기키; //Software/ODBC/ODBC.INI/MyAccess/Engines/Jet를 찾거나 생성합니다. //DSN 데이터베이스 엔진 구성 정보 쓰기 if OpenKey('Software/ODBC/ODBC.INI/MyAccess/Engines/Jet',True) then 시작하다 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[기본값은 비어 있음], Engines/Jet/ImplicitCommitSync[기본값은 예], Engines/Jet/MaxBufferSize[기본값 512], Engines/Jet/PageTimeout[기본값은 512], Engines/Jet/Threads[기본값은 3], 엔진/Jet/UserCommitSync [기본값은 예] 선택적 설정: SystemDb[문자열, 시스템 데이터베이스 경로], ReadOnly[바이너리, 읽기 전용 모드로 열지 여부, 1은 예를 의미, 기본값은 0], 독점[바이너리, 독점 모드로 열지 여부, 1은 예를 의미, 기본값은 0], PWD [문자열, 사용자 비밀번호] 2. 엑셀(Microsoft Excel 드라이버(*.xls)) DBQ[Excel97(=경로/xxx.xls), 5.0/7.0(=경로/xxx.xls), 4.0(=경로), 3.0(=경로)], 설명, 드라이버[odbcjt32.dll], DefaultDir[Excel97(<>DBQ),5.0/7.0(<>DBQ),4.0(=DBQ),3.0(=DBQ)], 드라이버ID[790(Excel97), 22(5.0/7.0), 278(4.0), 534(3.0)], FIL[Excel5.0;], ReadOnly, SafeTransaction, UID, Engines/Excel/ImplicitCommitSync, Engines/Excel/MaxScanRows[번호, 스캔된 행 수, 기본값은 8], 엔진/Excel/스레드、엔진/Excel/UserCommitSync、 Engines/Excel/FirstRowHasName[바이너리, 첫 번째 행이 도메인 이름인지 여부, 1은 예를 의미, 기본값은 1] 참고: Excel97 및 Excel7.0/5.0의 DBQ는 XLS 파일에 해당하고 Excel4.0 및 Excel3.0은 디렉터리에 해당합니다. DefaultDir은 디렉터리에 해당하며 Excel97 및 Excel7.0/5.0의 DBQ에 해당하는 경로입니다. Excel4.0과 Excel3.0의 DBQ와 동일하며 버전별로 DriverID가 다릅니다. 3. dBase(Microsoft dBase 드라이버(*.dbf)) DefaultDir[문자열, 데이터베이스 파일이 위치한 디렉터리], 설명, 드라이버[odbcjt32.dll], DriverID[277(IV), 533(5.0)], FIL[dbase III;], SafeTransaction, UID, 엔진/Xbase/ImplicitCommitSync, 엔진/Xbase/조합[문자열, 정렬 기준, ASCII, 국제, 노르웨이어-덴마크어, 스웨덴어-핀란드어], Engines/Xbase/Deleted[바이너리, 일시 삭제된 레코드를 표시하지 않을지 여부, 0은 표시를 의미, 기본값은 1], Engines/Xbase/PageTimeout[기본값은 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [바이너리, 대략적인 행 수를 사용할지 여부, 1은 예, 기본값은 0을 의미함] 참고: (dBaseIV 및 dBase5.0 두 버전의 DriverId는 다릅니다.) 4. Foxpro(Microsoft Foxpro 드라이버(*.dbf)) DefaultDir[데이터베이스 파일이 위치한 디렉터리], 설명, 드라이버[odbcjt32.dll], DriverID[536(2.6), 280(2.5)], FIL[Foxpro 2.0;], SafeTransaction, UID, Engines/Xbase/Collating[문자열, 정렬 기준, ASCII, 국제 가능], Engines/Xbase/Deleted[바이너리, 일시 삭제된 레코드를 표시하지 않을지 여부, 0은 표시를 의미, 기본값은 1], Engines/Xbase/PageTimeout[기본값은 600], Engines/Xbase/UserCommitSync, Engines/Xbase/Threads, Engines/Xbase/Statistics [바이너리, 대략적인 행 수를 사용할지 여부, 1은 예, 기본값은 0을 의미함] 참고: (Foxpro2.5와 Foxpro2.6의 DriverId는 다릅니다.) 위의 프로그램을 DELPHI, C++Buider, VB, VC 및 PB와 같은 많은 고급 프로그래밍 언어에서 사용할 수 있는 COM 또는 ActiveX 컨트롤로 만듭니다. |