2009-05-13 2 views
2

양식을 사용하여 공유 드라이브의 Access 데이터베이스에 PDF 파일을 저장해야합니다. 테이블 (OLE 개체 필드를 사용하여 다음 끌어서 놓기)에서이 작업을 수행하는 방법을 알았지 만 저장 단추가있는 양식에서이 작업을 수행하려고합니다. 저장 버튼을 클릭하면 파일뿐만 아니라 링크도 데이터베이스에 저장됩니다. 이 작업을 수행하는 방법에 대한 아이디어가 있습니까?양식을 사용하여 MS Access 데이터베이스에 PDF 저장

EDIT : Access 2003을 사용 중이고 DB가 공유 드라이브에 저장되므로 파일을 연결하면 문제가 해결되지 않을 수 있습니다.

+0

PDF를 OLE 필드에 저장 하시겠습니까? 당신은 Access의 버전을 말하지 않지만, 2007 년 이전에는 엄청난 오버 헤드가있었습니다. 언급되지 않은 요구 사항이 없으면 파일 시스템에 파일을 저장하고 경로/파일 이름을 데이터 테이블의 텍스트 필드에 넣는 것이 좋습니다. –

+0

이 데이터베이스는 공유 드라이브에서 액세스 할 수 있습니다. 그래서, 내가 이해할 때, 파일 시스템은 다르게 보일 것입니다 (사용자가 우리의 공유를 매핑 한 드라이브를 기반으로합니다). 이것이 우리가 연결을 사용하지 않는 이유입니다. 이 제한을 피할 수 있다면 분명히 파일을 저장하는 대신 링크를 사용하고 싶을 것입니다. –

+1

이것은 오래된 글이지만, 제 질문에 대한 Matthew의 답변은 절대로 말하지 않습니다. 매핑 된 드라이브는 사용하지 말고 UNC 경로를 사용하십시오. UNC 경로는 서버 이름이 변경되거나 공유 매핑이 변경되지 않는 한 항상 동일합니다. 이러한 상황이 발생하면 드라이브 매핑이 무효화됩니다. –

답변

0

어쩌면 도움이 될 것입니다 : ACC2000: Reading, Storing, and Writing Binary Large Objects (BLOBs).

설명 : 파일을 청크로 읽고 VBA 기능을 사용하여 blob에 추가합니다.

+0

저는 Access와 VBA에 정말 새롭습니다 (1 주 미만). 그래서 이것은 나에게 너무 복잡합니다. 나는 그것이 내가 원하는 것을한다고 생각하지만 거기에 더 단순한 것이 있는가? –

0

OLE 개체의 필드는 기본적으로 폼에서 바운드 개체 프레임을 사용합니다. 마우스 오른쪽 버튼을 클릭하면 개체를 삽입 할 수 있습니다. 파일 찾아보기가 완료됩니다. 필드를 두 번 클릭하면 실제 문서가 열립니다.

David의 조언과 링크로 이동하는 것이 좋습니다. 단일 파일을 전송해야하고 모든 PDF가 포함되기를 원하는 경우가 아니라면. 크기와 성능이 문제가됩니다.

보안이 문제이고 액세스 파일이 유일한 컨트롤 인 경우 (연결된 모든 파일이 들어있는 폴더에 보안을 설정할 수 없음), 포함해야합니다.

2

우리는 수천 개의 문서 (pdf, doc, jpg, ...)를 포함하는 몇 가지 데이터베이스를 가지고 있습니다. 문제가 전혀 없습니다. Access에서, 우리는 진 필드에 이진 개체를 업로드하려면 다음 코드를 사용합니다

이 경우
Function LoadFileFromDisk(Bestand, Optional FileName As String = "") 
    Dim imgByte() As Byte 
    If FileName = "" Then FileName = strFileName 
    Open FileName For Binary Lock Read As #1 
    ReDim imgByte(1 To LOF(1)) 
    Get #1, , imgByte 
    Close #1 
    If Not IsEmpty(imgByte) Then Bestand.Value = imgByte 
End Function 

, Bestand 바이너리 데이터를 포함하는 필드입니다. 우리는 MS SQL Server를 백엔드로 사용하지만 액세스 백엔드에서도 작동해야합니다.

+0

@birger 제안에 감사드립니다. 이 코드를 구현하려했지만 VBA에 익숙하지 않아서 구현할 방법을 찾지 못했습니다. 예를 들어 "# 1"과 LOF 이름이 의미하는 바를 설명해 주시겠습니까? –

+0

파일이 열리고 번호 (# 1)가 할당됩니다. imgByte는 바이트 배열입니다. 이 배열의 크기는 파일 1 : LOF (1)의 길이로 설정됩니다. GET 함수는 파일을 읽고 imgByte에 저장합니다. 이 시점에서 imgByte는 이미지 파일을 나타내는 바이트 배열입니다. Bestand 필드 값이이 배열로 설정되고 다음과 같이 설정됩니다. 파일이 필드에 저장됩니다. – Birger

+0

끝 :이 메서드는 OLE wrappings을 파일에 추가하지 않기 때문에 이것은 OLE 필드에 개체를 저장하는 것 이외의 다른 것입니다. – Birger

1

동일한 개념을 사용했지만 이미지 데이터 유형 (또는 varbinary (max)) 내에 PDF를 저장하는 SQL Server 크기를 늘린 경우 전체 텍스트 검색을 사용하여 PDF를 검색 할 수 있습니다.

IFILTER 제품을 등록 할 수있는 모든 파일 유형에 대해이 작업을 수행 할 수 있다고 나와 있으며 이전에 Adobe 웹 사이트에 있었기 때문에 Acrobat IFILTER가 실제로 무료라고 말합니다.

+0

매우 흥미 롭습니다! 하지만이 개체는 @ birger의 대답처럼 blob이 아닌 OLE로 저장된 개체에서만 작동할까요? –

+0

Access의 OLE는 SQL Server의 blob과 동일합니다. BLOB는 기본적으로 IMAGE 데이터 유형이든 varbinary (max)이든간에 동일합니다. –

+0

감사합니다. 저장소에 동의하지만 "as OLE"를 저장하면 가능한 클라이언트, 형식 설명, 미리보기 등의 정보를 포함하여 일종의 enveloppe에 문서 (또는 문서의 일부) 등 ... 그래서 그 OLE enveloppe iFilter 그 일을하는 데 필요한 경우 궁금 해서요? –

관련 문제