1. DELPHI에서 접속 데이터베이스 운영(.mdb 파일 생성, 데이터베이스 압축)
다음 코드는 WIN2K, D6, MDAC2.6에서 테스트를 통과했습니다.
컴파일된 프로그램은 ACCESS 환경 없이 WIN98 두 번째 버전에서 성공적으로 실행됩니다.
//ComObj,ActiveX를 사용하기 전
//연결 문자열 선언
상수
SConnectionString = 'PROvider=Microsoft.Jet.OLEDB.4.0;데이터 원본=%s;'
+'Jet OLEDB:데이터베이스 비밀번호=%s;';
//================================================ =============================
// 절차: GetTempPathFileName
// 작성자: ysai
// 날짜: 2003-01-27
// 인수: (없음)
// 결과: 문자열
//================================================ =============================
함수 GetTempPathFileName():string;
//임시 파일명을 알아낸다
var
SPath,SFile: 문자 배열 [0..254];
시작하다
GetTempPath(254,SPath);
GetTempFileName(SPath,'~SM',0,SFile);
결과:=S파일;
DeleteFile(PChar(결과));
끝;
//================================================ =============================
// 절차: CreateAccessFile
// 작성자: ysai
// 날짜: 2003-01-27
// 인수: FileName:String;PassWord:string=''
// 결과: 부울
//================================================ =============================
함수 CreateAccessFile(FileName:String;PassWord:string=''):boolean;
//액세스 파일 생성, 파일이 존재하면 실패
var
STemp파일 이름:문자열;
vCatalog:OleVariant;
시작하다
STempFileName:=GetTempPathFileName;
노력하다
vCatalog:=CreateOleObject('ADOX.Catalog');
vCatalog.Create(format(SConnectionString,[STempFileName,PassWord]));
결과:=CopyFile(PChar(STempFileName),PChar(파일 이름),True);
삭제파일(STemp파일이름);
제외하고
결과:=false;
끝;
끝;
//================================================ =============================
// 절차: CompactDatabase
// 작성자: ysai
// 날짜: 2003-01-27
// 인수: AFileName,APassWord:string
// 결과: 부울
//================================================ =============================
function CompactDatabase(AFileName,APassWord:string):boolean;
//데이터베이스 압축 및 복구, 소스 파일 덮어쓰기
var
STemp파일 이름:문자열;
vJE:OleVariant;
시작하다
STempFileName:=GetTempPathFileName;
노력하다
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,APassWord]),
format(SConnectionString,[STempFileName,APassWord]));
결과:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
삭제파일(STemp파일이름);
제외하고
결과:=false;
끝;
끝;
//================================================ =============================
// 절차: ChangeDatabasePassword
// 작성자: ysai
// 날짜: 2003-01-27
// 인수: AFileName,AOldPassWord,ANewPassWord:string
// 결과: 부울
//================================================ =============================
함수 ChangeDatabasePassword(AFileName,AOldPassWord,ANewPassWord:string):boolean;
//ACCESS 데이터베이스 비밀번호 수정
var
STemp파일 이름: 문자열;
vJE:OleVariant;
시작하다
STempFileName:=GetTempPathFileName;
노력하다
vJE:=CreateOleObject('JRO.JetEngine');
vJE.CompactDatabase(format(SConnectionString,[AFileName,AOldPassWord]),
format(SConnectionString,[STempFileName,ANewPassWord]));
결과:=CopyFile(PChar(STempFileName),PChar(AFileName),false);
삭제파일(STemp파일이름);
제외하고
결과:=false;
끝;
끝;
2. ACCESS에서 SQL 문을 사용할 때 주의해야 할 사항과 몇 가지 팁
다음 SQL 문은 ACCESS XP에서 쿼리를 전달했습니다.
테이블 생성:
테이블 탭1 생성(
신분증 카운터,
이름 문자열,
연령 정수,
[날짜] 날짜/시간);
기능:
자동 증가 필드는 Counter로 선언됩니다.
필드 이름이 키워드인 필드는 대괄호 []로 묶여 있으며, 숫자도 필드 이름으로 허용됩니다.
색인 생성:
다음 문은 Tab1의 Date 열에 반복 가능한 인덱스를 생성합니다.
인덱스 iDate ON Tab1 생성([날짜]);
완료 후 ACCESS 필드의 날짜 인덱스 속성이 - 예(중복)로 표시됩니다.
다음 문은 Tab1의 Name 열에 반복 불가능한 인덱스를 생성합니다.
Tab1(이름)에 고유 인덱스 iName 생성;
완료 후 ACCESS에서 Name 필드의 인덱스 속성은 - 예(중복 없음)로 표시됩니다.
다음 문은 방금 생성된 두 개의 인덱스를 삭제합니다.
Index iDate ON Tab1 삭제;
Tab1에 인덱스 iName 삭제;
SQLSERVER의 ACCESS 및 UPDATE 문 비교:
SQLSERVER에서 여러 테이블을 업데이트하는 UPDATE 문:
업데이트 탭1
SET a.이름 = b.이름
Tab1a,Tab2b에서
여기서 a.ID = b.ID;
ACCESS에서 동일한 기능을 가진 SQL 문은 다음과 같아야 합니다.
업데이트 Tab1 a, Tab2 b
SET a.이름 = b.이름
여기서 a.ID = b.ID;
즉, ACCESS의 UPDATE 문에는 FROM 절이 없으며 참조된 모든 테이블은 UPDATE 키워드 뒤에 나열됩니다.
위의 예에서 Tab2가 테이블이 아니라 쿼리인 경우 예를 들면 다음과 같습니다.
UPDATE Tab1 a,(Tab2에서 ID, 이름 선택) b
SET a.이름 = b.이름
여기서 a.ID = b.ID;
여러 개의 서로 다른 ACCESS 데이터베이스에 액세스 - SQL에서 In 절을 사용합니다.
a.*,b.*를 Tab1에서 선택 a,Tab2 b 'db2.mdb'에서 a.ID=b.ID;
위의 SQL 문은 현재 데이터베이스의 Tab1 및 db2.mdb(현재 폴더에 있음)의 Tab2와 관련된 모든 레코드를 쿼리합니다.
단점 - 외부 데이터베이스에는 비밀번호가 없습니다.
보충: 게시물에서 ugvanxk의 답변을 보고 사용할 수 있습니다.
[c:/aa/a.mdb;pwd=1111].table1에서 *를 선택합니다.
ACCESS XP 테스트 통과
ACCESS에서 다른 ODBC 데이터 소스에 액세스
다음 예에서는 ACCESS의 SQLSERVER에 있는 데이터를 쿼리합니다.
[ODBC]의 Tab1에서 * 선택
[ODBC;드라이버=SQL Server;UID=sa;PWD=;서버=127.0.0.1;DataBase=데모;]
외부 데이터 원본 연결 속성의 전체 매개 변수는 다음과 같습니다.
[ODBC;DRIVER=드라이버;SERVER=서버;DATABASE=데이터베이스;UID=사용자;PWD=암호;]
DRIVER=드라이버는 레지스트리에서 찾을 수 있습니다
HKEY_LOCAL_MACHINE/소프트웨어/ODBC/ODBCINST.INI/
에서 발견
이기종 데이터베이스 간의 데이터 가져오기에 대해서는 Blue Blood Sword를 참조하십시오.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
ACCESS는 하위 쿼리를 지원합니다.
ACCESS는 외부 조인을 지원하지만 완전한 외부 조인은 포함하지 않습니다.
왼쪽 조인 또는 오른쪽 조인
하지만 지원되지 않음
전체 외부 조인 또는 전체 조인
ACCESS의 날짜 쿼리
참고: ACCESS의 날짜 및 시간 구분 기호는 따옴표 대신 #입니다.
* Tab1에서 [날짜]>#2002-1-1#을 선택합니다.
델파이에서는 이것을 사용합니다
SQL.추가(형식(
'[날짜]>#%s#;인 Tab1에서 * 선택',
[DateToStr(날짜)]));
ACCESS의 문자열은 큰따옴표로 구분할 수 있지만 SQLSERVER는 이를 인식하지 못하므로 마이그레이션 및 호환성의 편의를 위해
문자열 구분 기호로 작은따옴표를 사용하는 것이 좋습니다.