2016-08-05 5 views
0

Btrieve와 Pervasive SQL Control Center를 사용하여 테이블을 만듭니다. 이 테이블에는 char 20, char 20, & char 50의 세 열이 있습니다. 첫 번째 열은 기본 키입니다. 코드를 통해 레코드를 삽입 할 때 두 번째 열의 첫 번째 문자는 항상 누락되었습니다. 첫 번째 열이 그것을 덮어 쓰기 때문에 나는 생각했다. 왜 내가 파일 정보 편집기를로드했는지 조사하는 중. File Specification은 레코드 길이를 92로 표시합니다.이 테이블을 레코드 길이가 90 인 것으로 명확하게 정의했기 때문에 이것은 나에게 이해가 가지 않습니다.테이블을 만들 때 PSQL v9에서 레코드 길이는 어떻게 영향을 받습니까?

또한 22라는 레코드 길이가 다른 것을 나타냅니다. 코드와 실제 테이블 레코드 길이의 버퍼.

누락 된 첫 번째 문자를 두 번째 열에서 수정하려면 코드에서 버퍼를 변경하여 첫 번째 열의 길이가 21 문자가되도록하십시오. 또한 제 3 열을 51로 변경하여 오류 22를 수정했습니다.

테이블을 만들 때 레코드 길이를 90으로 명확하게 정의하면 예제에서 레코드 길이가 92로 어떻게 설정됩니까?

답변

1

볼 가능성이 가장 높은 것은 Btrieve/Pervasive에서 "null"처리의 아티팩트입니다.
Btrieve를 사용하여 파일을 만들 때 레코드를 정확히 1 바이트 씩 레이아웃합니다. Pervasive 엔진에 "True Null"지원이 추가되면 Null 허용 (기본값)으로 생성 된 모든 열에 Btrieve 파일의 필드 앞에 접두사가 추가됩니다. 이것은 엔진이 필드가 널인지 빈 문자열인지를 알 수있게합니다.
테이블에 세 개의 열이 있었기 때문에 세 개의 추가 바이트가 있어야하지만 열 중 하나가 기본 키이므로 모두 null이 아니므로 두 개의 추가 바이트 만 있습니다.
기존 Btrieve 파일이 있고 SQL 정의를 만든 경우 추가 필드가없는 경우가 있습니다.

  • 가 꺼져 "진정한 널"지원 테이블을 재 작성 :
    당신은 두 가지 옵션이 있습니다. 이는 Create Table 명령 전에 Set TrueNullCreate = Off 명령을 실행하여 수행됩니다.

  • 테이블의 모든 열에 Not Null을 추가하고 테이블을 다시 작성하십시오.