1. 질문 제기
최근 프로젝트에서 ASP의 FoxPro 라이브러리 테이블(*.DBF) 작업에 문제가 발생했습니다. 실제로 DBF 테이블을 사용하는 응용 소프트웨어가 실제로 많이 있습니다. 네트워크 환경에서 이러한 데이터를 사용하는 방법으로 인해 많은 친구들이 당황하게 되었습니다.
또한 많은 정보를 확인했지만 해결 방법에 대한 자세한 설명을 찾을 수 없었습니다. 테스트 후 처음에는 이 문제를 해결했으며 이를 모든 사람과 공유하겠습니다.
이 기사에서는 다음 문제를 해결하려고 시도합니다.
1. ASP는 FoxPro에 의해 생성된 사용 가능한 테이블(*.dbf 파일)에 조인됩니다.
2. 여러 유형의 데이터 및 그래픽 파일을 동시에 dbf 테이블에 저장
(샘플 프로그램은 Set conn = Server.CreateObject("ADODB.Connection") 에서 사용할 수 있습니다.
connstr = "드라이버={Microsoft Visual FoxPro 드라이버};SourceType=DBF;"&_
"SourceDB=" & Server.MapPath(db) &";Exclusive=아니요"
conn.Open connstr
위 코드에서 data는 내 DBF 파일이 위치한 상대 경로(이 코드가 위치한 파일 기준)이며, Server.MapPath(db)를 통해 절대 경로로 변환됩니다.
http://www.connectionstrings.com은 다양한 유형의 라이브러리 테이블 파일에 대한 연결 문자열을 제공합니다. DBF 파일의 경우 제공된 연결 문자열은 다음과 같습니다.
"드라이버={Microsoft dBASE 드라이버(*.dbf)};DriverID=277;Dbq=c:mydbpath;"
이 연결 문자열을 사용하여 성공적으로 연결하지 못했고 추가 테스트를 수행하지 않았습니다. 관심 있는 친구는 위 문자열을 시도해 볼 수 있습니다.
.www.downcodes.com
2. SQL 문에 테이블 이름을 선언합니다.
SQL 문에서 동작할 테이블 이름을 [테이블 이름] 또는 [테이블 이름.확장자] 형식으로 선언할 수 있습니다. 예를 들어 테이블 파일 이름은 t1.dbf이고, SQL 문은 다음과 같습니다.
[t1]에서 * 선택 또는 [t1.dbf]에서 * 선택
3. 다양한 형태의 데이터 저장 작업
DBF는 지원하는 데이터 유형이 많지 않은데 그중 Date(날짜 유형), Memo(메모 유형), General(일반 유형)이 주목할 만합니다. 여기서는 Data 유형 데이터에 중점을 두고 있는데, Memo 유형과 Gen 유형은 그래픽 파일을 저장할 때 사용됩니다. 이에 대해서는 나중에 설명하겠습니다.
나는 일반적으로 데이터베이스 작업을 작성하는 데 두 가지 방법을 사용합니다. 하나는 insert 문을 사용하는 것이고 다른 하나는 addnew 방법을 사용하는 것입니다. DBF 테이블의 경우 이 두 가지 방법은 약간 다릅니다.
insert 문을 사용할 때 Date 형식 데이터의 쓰기 형식은 {^yyyy-mm-dd}이며 구분 기호는 Access의 # 및 SQL Server의 '와 다릅니다. 구체적인 SQL 문은 다음과 같습니다.
[t1.dbf] (이름,생일) 값에 삽입 ('MyName',{^1970-1-1})
addnew 메소드를 사용할 때 원래 사용한 코드는 다음과 같습니다:
rst.open "[t1]",conn,0,3
첫 번째.새로 추가
첫 번째(0).value = "내 이름"
첫 번째(1).값 = {^1970-1-1}
첫 번째 업데이트
먼저 닫습니다
SQL Server 및 Access 운영에는 문제가 없으나, DBF 파일 운영에는 문제가 있습니다. 실험 끝에 마침내 올바른 방법을 찾았습니다.
sql = "t1에서 * 선택"
rst.open SQL,콘,0,3
첫 번째.새로 추가
첫 번째(0).value = "내 이름"
첫 번째(1).값 = {^1970-1-1}
첫 번째 업데이트
rst.close
위 두 코드의 차이점은 주로 SQL 문에 있다는 점에 유의하세요. 앞서 언급한 것처럼 SQL문에서는 [테이블명]이나 [테이블명.dbf] 형태로 테이블 파일을 선언할 수 있지만, addnew 메소드를 사용할 경우 테이블 이름에 확장자를 사용할 수 없고 대괄호를 추가할 수 없다. 그렇지 않으면 "간단한 테이블 이름이 아니므로 업데이트할 수 없습니다"라는 메시지가 표시됩니다.
4. 그래픽 파일 저장
DBF 테이블에서는 메모와 일반 필드를 모두 사용하여 그래픽, 오디오 및 비디오, 텍스트 및 기타 파일을 저장할 수 있습니다( http://www.chinadesign.com.cn/NewsContents1.asp?id=2663 참조). 여기서는 필드 유형을 memo(binary)(바이너리 준비 유형)로 설정하고 rst(n).AppendChunk() 메서드를 사용하여 결과 이미지 바이너리 데이터를 쓰고 Response.BinaryWrite() 메서드를 사용하여 바이너리를 복원합니다. 데이터를 사진으로. 이미지 웨어하우징에 관련된 글은 많으니 여기서는 자세히 다루지 않겠습니다.
일반 필드를 이용하여 사진을 저장하는 방법은 시도해 보았지만 작동하지 않아 다시 시도하지 않았습니다.
5. 데이터 삭제
delete 문을 사용하여 데이터를 삭제할 수 있지만, 삭제 후 테이블 파일을 열면 해당 데이터는 삭제 표시만 되어 있을 뿐 실제로 테이블에서 삭제되지는 않는 것을 알 수 있습니다. Foxpro에서는 pack 명령을 사용하여 데이터를 영구적으로 삭제합니다. 일부 정보를 확인한 결과 VB에서는 Pack 작업을 구현할 수 없으며 당연히 VBS에서도 구현할 수 없다고 합니다. 일반적인 해결 방법은 테이블의 데이터(물론 삭제 표시 없이)를 가끔씩 새 테이블로 가져오고 원본 테이블을 삭제한 다음 새 테이블의 이름을 원래 테이블 이름으로 바꾸는 것입니다.
6. 데이터와 사진이 동시에 데이터베이스에 저장됩니다.
이 문제는 이 기사의 범위에 포함되지 않습니다. 그런데 여기서는 이에 대한 해결책을 언급하겠습니다.
저는 "Huajing" 컴포넌트리스 업로드 프로그램을 사용하여 이 기능을 구현했습니다. 어떤 친구들은 '화징' 업로드가 파일로 기록되는데 데이터베이스에 저장할 방법이 없다고 물을 수도 있습니다. 나쁘지는 않지만 약간만 변경하면 이미지의 바이너리 데이터를 가져온 다음 데이터베이스에 저장할 수 있습니다. 제 예시에는 환경 프로그램의 변경사항이 설명되어 있으니 참고하시기 바랍니다.
4. 결론
이 문서에서는 DBF 여유 테이블에 대한 ASP의 작업을 주로 설명합니다. DBC 라이브러리인 경우 해당 연결 문자열은 예제의 inc/conn.asp에 제공됩니다.
이 시점에서 나는 친구들이 DBF 테이블의 작동에 대해 전반적으로 이해하고 있다고 믿습니다. 나의 예를 결합하면 더 많은 기능을 개발할 수 있다고 믿습니다.
행운을 빌어요!