2014-10-07 7 views
2

JET oleDb 4.0을 사용하여 DBF 파일을 만들지 만 숫자 필드는 항상 (20.5) 크기가됩니다. 이것은 내가 인터넷에서 읽은 것으로부터 알려진 문제입니다. 많은 사람들이 시도한 Visual FoxPro oleDb를 사용하도록 제안하고 있지만 ArcMap에서 DBF 파일을 열어야하며 잘못된 필드 유형에 대한 오류가 발생합니다. 나는 파일 형식이 지원되지 않는다고 생각한다. FoxPro에서 FoxPro oledb로 만든 DBF를 열고 DBase IV 형식으로 내 보내면 ArcMap에서 열 수 있습니다.DBF 파일 인 Vb.net은 숫자 크기를 설정할 수 없습니다. (항상 20.5)

그러나이 파일을 만들 때 이미 "확장 속성 = dBase IV"옵션을 사용하며 전혀 수행하지 않는 것 같습니다.

DBASE IV 형식으로 올바른 필드 크기를 얻는 방법을 찾아야합니다. 누군가 나를 도울 수 있습니까? 여기

내 연결 문자열입니다 :

제공 = Microsoft.Jet.OLEDB.4.0; 데이터 원본 = {0}; 확장 속성 = 디베이스 IV; 항상 20.5 크기로 숫자를 만듭니다.

공급자 = vfpoledb; 데이터 원본 = {0}; 조합 시퀀스 = 일반; 확장 속성 = dBase IV; ArcMap의

답변

1

에 대한 호환되지 않는 DBF하게 는 코드 페이지 참조의 문맥을 무시 this answer for encoding.

그것은 VFP OLEDB 공급자를 사용하여 살펴보십시오. 테이블 작성 구문도 유사 할 것이므로 필요에 따라 숫자 필드를 정의 할 수 있습니다. 그 다음 중요한 부분은

string vfpScript = @"use MyTest1 
      Copy to MyTest2 type foxplus"; 


    command.CommandType = CommandType.StoredProcedure; 
    command.CommandText = "ExecScript"; 
    command.Parameters.Add("myScript", OleDbType.Char).Value = vfpScript; 
    command.ExecuteNonQuery(); 

이와 호환되어야의 dBASE 호환 (초기 FoxPro에) 파일 헤더에 VFP 정상 파일 헤더에서 .dbf 파일을 걸립니다 ... 섹션의 VFPScript의 사용이다 당신이 필요로하는 것.

+1

고마워, 이제 작동! 필드에 null 값을 포함 할 수없는 또 다른 작은 문제 만 있습니다. 하지만 null 값 이외의 다른 값을 삽입하기 위해 코드를 변경하기 만하면됩니다. – Math

+0

@Math, 이전 dBASE에 대해 NULL 대 NOT NULL을 허용하는 경우 기억이 안나지만 항상 create table 문에서 해당 열 뒤에 추가 할 수 있습니다. – DRapp

+0

시도했지만 작동하지 않습니다. null 설정을 허용하지 않는 이전 dBASE 파일에 대해 옳습니다. 하지만 nulls 삽입을 제거한 이후로 더 이상 필요하지 않습니다. 감사! – Math