1. Delphi에서 액세스 데이터베이스 운영(.mdb 파일 생성, 데이터베이스 압축)
다음 코드는 win2k, d6 및 mdac2.6에서 테스트되었습니다.
컴파일된 프로그램은 액세스 환경 없이 win98 두 번째 버전에서 성공적으로 실행됩니다.
//comobj,activex를 사용하기 전
//연결 문자열 선언
const
연결 문자열 = '공급자=microsoft.jet.oledb.4.0;데이터 소스=%s;'
+'jet oledb:데이터베이스 비밀번호=%s;';
//================================================ =============================
// 절차: gettemppathfilename
// 작성자: ysai
// 날짜 : 2003-01-27
// 인수: (없음)
// 결과: 문자열
//================================================ =============================
함수 gettemppathfilename():string;
//임시 파일명을 알아낸다
var
spath,sfile&:char의 배열 [0..254];
시작하다
gettemppath(254,spath);
gettempfilename(spath,'~sm',0,sfile);
결과:=sfile;
파일 삭제(pchar(결과));
끝;
//================================================ =============================
// 절차: createaccessfile
// 작성자: ysai
// 날짜 : 2003-01-27
// 인수: 파일 이름:문자열;비밀번호:문자열=''
// 결과: 부울
//================================================ =============================
함수 createaccessfile(파일 이름:문자열;비밀번호:문자열=''):boolean;
//액세스 파일 생성, 파일이 존재하면 실패
var
줄기파일 이름:문자열;
v카탈로그:유변형;
시작하다
줄기파일이름:=gettemppath파일이름;
노력하다
vcatalog:=createoleobject('adox.catalog');
vcatalog.create(format(connectionstring,[stempfilename,password]));
결과:=copyfile(pchar(stempfilename),pchar(파일명),true);
deletefile(stempfilename);
제외하고
결과:=false;
끝;
끝;
//================================================ =============================
// 프로시저: 컴팩트데이터베이스
// 작성자: ysai
// 날짜 : 2003-01-27
// 인수: 파일 이름, 비밀번호: 문자열
// 결과: 부울
//================================================ =============================
function Compactdatabase(파일 이름, 비밀번호:문자열):부울;
//데이터베이스 압축 및 복구, 소스 파일 덮어쓰기
var
줄기파일 이름:문자열;
vje:유변형;
시작하다
줄기파일이름:=gettemppath파일이름;
노력하다
vje:=createoleobject('jro.jetengine');
vje.compactdatabase(format(connectionstring,[파일 이름, 비밀번호]),
format(연결문자열,[stempfilename,apassword]));
결과:=copyfile(pchar(stempfilename),pchar(afilename),false);
deletefile(stempfilename);
제외하고
결과:=false;
끝;
끝;
//================================================ =============================
// 절차: 데이터베이스 비밀번호 변경
// 작성자: ysai
// 날짜 : 2003-01-27
// 인수: 파일 이름, 기존 비밀번호, 새 비밀번호: 문자열
// 결과: 부울
//================================================ =============================
functionchangedatabasepassword(afilename,aoldpassword,anewpassword:string):boolean;
//액세스 데이터베이스 비밀번호 수정
var
줄기파일 이름:문자열;
vje:유변형;
시작하다
줄기파일이름:=gettemppath파일이름;
노력하다
vje:=createoleobject('jro.jetengine');
vje.compactdatabase(format(connectionstring,[afilename,aoldpassword]),
format(sconnectionstring,[stempfilename,anewpassword]));
결과:=copyfile(pchar(stempfilename),pchar(afilename),false);
deletefile(stempfilename);
제외하고
결과:=false;
끝;
끝;
2. 액세스에서 SQL 문을 사용할 때 주의해야 할 사항과 몇 가지 팁
다음 SQL 문은 Access XP 쿼리의 테스트를 통과했습니다.
테이블 생성:
테이블 tab1 생성(
아이디 카운터,
이름 문자열,
나이 정수,
[날짜] 날짜/시간);
기능:
자동 증가 필드는 counter로 선언됩니다.
필드 이름이 키워드인 필드는 대괄호 []로 묶여 있으며, 숫자도 필드 이름으로 허용됩니다.
색인 생성:
다음 문은 tab1의 날짜 열에 반복 가능한 인덱스를 생성합니다.
tab1([날짜])에 인덱스 idate를 생성합니다.
완료 후 액세스 중인 필드의 날짜 인덱스 속성이 - 예(중복 있음)로 표시됩니다.
다음 명령문은 tab1의 name 열에 반복 불가능한 인덱스를 생성합니다.
tab1(이름)에 고유 인덱스 inname을 생성합니다.
완료 후 액세스 시 필드 이름의 인덱스 속성이 - 예(중복 없음)로 표시됩니다.
다음 문은 방금 생성된 두 개의 인덱스를 삭제합니다.
tab1에 인덱스 idate를 삭제합니다.
tab1에 인덱스 inname을 삭제합니다.
access와 sqlserver의 업데이트 문 비교:
sqlserver에서 여러 테이블을 업데이트하는 업데이트 문:
탭1 업데이트
a.name = b.name 설정
tab1 a, tab2 b에서
여기서 a.id = b.id;
액세스에서 동일한 기능을 사용하는 SQL 문은 다음과 같아야 합니다.
tab1 a, tab2 b 업데이트
a.name = b.name 설정
여기서 a.id = b.id;
즉, access의 업데이트 문에는 from 절이 없으며 참조된 모든 테이블은 업데이트 키워드 뒤에 나열됩니다.
위의 예에서 tab2가 테이블이 아니라 쿼리인 경우 예를 들면 다음과 같습니다.
tab1 업데이트 a,(tab2에서 ID, 이름 선택) b
a.name = b.name 설정
여기서 a.id = b.id;
여러 개의 서로 다른 액세스 데이터베이스에 액세스 - SQL에서 in 절을 사용합니다.
a.id=b.id인 'db2.mdb'의 tab1 a,tab2 b에서 a.*,b.*를 선택합니다.
위의 SQL 문은 현재 데이터베이스의 tab1 및 db2.mdb(현재 폴더에 있음)의 tab2와 관련된 모든 레코드를 쿼리합니다.
단점 - 외부 데이터베이스에는 비밀번호가 없습니다.
보충: 게시물에서 ugvanxk의 답변을 보고 사용할 수 있습니다.
[c:/aa/a.mdb;pwd=1111].table1에서 *를 선택합니다.
액세스 XP 테스트 통과
액세스 중인 다른 odbc 데이터 소스에 액세스
다음 예에서는 액세스 중인 sqlserver의 데이터를 쿼리합니다.
[odbc]의 tab1에서 *를 선택하세요.
[odbc;드라이버=sql 서버;uid=sa;pwd=;서버=127.0.0.1;데이터베이스=demo;]
외부 데이터 원본 연결 속성의 전체 매개 변수는 다음과 같습니다.
[odbc;드라이버=드라이버;서버=서버;데이터베이스=데이터베이스;uid=사용자;pwd=암호;]
드라이버=드라이버는 레지스트리에서 찾을 수 있습니다.
hkey_local_machine/software/odbc/odbcinst.ini/
에서 발견
이기종 데이터베이스 간의 데이터 가져오기에 대해서는 Blue Blood Sword를 참조하십시오.
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1691966
액세스는 하위 쿼리를 지원합니다
access는 외부 조인을 지원하지만 지원되는 경우 완전한 외부 조인을 포함하지 않습니다.
왼쪽 조인 또는 오른쪽 조인
하지만 지원되지 않음
완전 외부 조인 또는 완전 조인
액세스 날짜 쿼리
참고: 액세스의 날짜 및 시간 구분 기호는 따옴표 대신 #입니다.
[날짜]>#2002-1-1#인 tab1에서 *를 선택합니다.
델파이에서는 이것을 사용합니다
sql.add(형식(
'[날짜]>#%s#;인 탭1에서 *를 선택하세요.',
[datetostr(날짜)]));
접근 시 문자열은 큰따옴표로 구분할 수 있으나 sqlserver에서는 이를 인식하지 못하므로 마이그레이션 및 호환성의 편의를 위해
문자열 구분 기호로 작은따옴표를 사용하는 것이 좋습니다.