액세스가 1 초 후에로드되지 않습니다. 데이터베이스 파일 생성 기능의 소스 코드

풍모:

  1. 데이터베이스 파일은 데이터와 별도로 생성 할 수 있습니다.
  2. 데이터베이스 파일의 테이블은 데이터와 별도로 생성 할 수 있습니다.
  3. 데이터 유형은 액세스와 호환되도록 변환됩니다.
  4. 빈 날짜 문자열과 같은 값은 null로 변환됩니다.
  5. 비 기본 및 비 문자열 데이터 유형 (참조)은 255 자로 잘립니다.
  6. 문자열 데이터 유형은 공간을 절약하기 위해 문자열 길이에 맞게 조정됩니다.
  7. 작은 따옴표 문자 '는 char () 쿼리 함수를 사용하여 데이터베이스에 기록됩니다.
  8. 기본 인덱스 자동 추가 (행 수).

제한 사항 :

  1. 데이터 소스로 값 테이블에서만 작동합니다.
  2. 이 메커니즘은 씩 클라이언트 모드에서만 작동합니다. 이는 ADO 라이브러리와 값 테이블을 동시에 사용하기 때문입니다.
  3. 작업은 Windows 시스템에서만 가능합니다.

메커니즘 자체는 세 가지 블록으로 구성됩니다.

  1. 데이터베이스 파일 생성 기능.
  2. 데이터베이스 테이블 생성 기능.
  3. 데이터베이스 테이블에 데이터를 쓰는 기능.

개략적으로 메커니즘의 작동은 다음과 같습니다.

데이터베이스 파일을 생성하는 함수의 소스 코드 :

// 함수 생성 새로운 파일 이전을 덮어 쓸 수있는 DB // 매개 변수 // 매개 변수 2 : 부울-데이터베이스 파일이 이미있는 경우 덮어 쓰기 플래그 // 함수가 실패하면 0이 아니라 성공적으로 완료되면 0을 반환합니다. 함수 CreateFileAxes (FileName 값, OverwriteFile 값 \u003d True) // 파일 이름이 유효한지 확인 EmptyString (FileName)이면 반환-2; 그렇지 않으면 // 디스크에서 파일 위치 분석 OverwriteFile Then File \u003d 새 파일 (FileName); If File. 존재 () 다음 파일 \u003d 정의되지 않음; DeleteFiles (FileName); EndIf; EndIf; EndIf; 질환(" 액세스 파일이 생성됩니다."+ 파일 이름); // 데이터베이스 셸 생성 ADOX 시도 \u003d 새 COMObject ( "ADOX ... 목록"); 예외 보고서 (" "+ 기호. 변전소 + 설명 오류 ()); EndTry; // 새로 생성 된 데이터베이스에 연결 ConnectionString \u003d "제공자" ""+ 파일 이름 + "" ""; // 시도 ADOH를 연결합니다. (ConnectionString); 만들기 예외 보고서 ( " 데이터 파일을 생성하지 못했습니다. ADOX 개체를 만들 때. 카탈로그 오류가 발생했습니다!"+ 기호. PS + 설명 오류 ()), 반환-1, 시도 종료, ADOC. ActiveConnection. 닫기 (), ADOC \u003d 정의되지 않음, 반환 0, EndFunction

이 함수는 2 개의 매개 변수를받습니다.

  1. 향후 데이터베이스 파일의 이름은 문자열입니다. 이것은 파일의 전체 경로이며 전달되지 않으면 프로 시저가 종료됩니다.
  2. 파일 덮어 쓰기는 부울입니다. 이것은 파일 덮어 쓰기 메커니즘을 사용하는 부울 플래그입니다.

전체 파일 이름이 먼저 확인됩니다. 그런 다음 파일을 덮어 쓰는 메커니즘이 해결됩니다. 필요한 경우 기존 파일이 삭제됩니다. 그런 다음 절차가 계속됩니다. 빈 파일 DB. 이는 ADOX.Catalog 개체를 사용하여 수행됩니다. ADOX.Catalog 작업의 복잡성을 분석하려면 Microsoft 웹 사이트에서 관련 정보를 찾는 것이 좋습니다.

액세스에서 언로드 메커니즘의 두 번째 "기어"는 데이터베이스 파일에 테이블 생성을 구현합니다. 테이블을 만들려면 동일한 ADOX.Catalog 개체가 사용됩니다.

데이터베이스에 새 테이블을 만드는 절차의 소스 코드 :

// 매개 변수 1 : 문자열- 성명 데이터베이스 파일 // 매개 변수 2 : 값 표-다운로드 할 데이터가있는 표 // 매개 변수 3 : 구조-생성중인 테이블에 대한 설명 (ComposingStructureDescriptionFields 함수를 사용하여 구성 할 수 있음) // 함수가 실패하면 0이 아닌 성공적으로 완료되면 0을 반환합니다. 함수 EnterDataTable (값 파일 이름, ValueDataTable, ValueDescriptionTable) ConnectionString \u003d "공급자 \u003d Microsoft. 제트기. OLEDB. 네. 0; 데이터 소스 \u003d"" "+ 파일 이름 +" "" ; 제트 OLEDB : 엔진 유형 \u003d 5;"; 커넥터 \u003d 새 COMObject ("ADODB ... 연결"); 커넥터. ConnectionString \u003d ConnectionString; // 연결 시도 커넥터. 열기 (); 예외 보고서 (" DB 파일을 열지 못했습니다!"); 보고서 (오류 설명 ()); 반환-1; 시도 종료; 상태 (" 테이블을 데이터로 채 웁니다."+ 테이블 설명. 테이블 이름); // DB 명령 객체 Com \u003d 새 COMObject ( "ADODB ... 명령"); Com. ActiveConnection \u003d 커넥터; // 상수 1은 "쿼리"를 의미하며 뷰와 저장 프로시 저도 있습니다. Com. CommandType \u003d 1; LineCount \u003d 1; 데이터 테이블 사이클에서 각 행 TZ에 대해 ProcessUser 인터럽트 (); // 데이터 열을 반복 FieldList \u003d 형식 (LineCounter, "CH = " ) + " , "+ 기호. PS; LineCounter \u003d LineCounter + 1; ColumnCount \u003d 0; 데이터 테이블의 각 ColumnTZ에 대해. 열주기 TekValue \u003d StringTZ [ColumnTZ. Name]; 필드 설명 \u003d 테이블 설명. 필드 설명. Get (ColumnCounter); // 데이터 유형 구문 분석 If 필드 설명. 유형 \u003d " 3 "그런 다음 // 정수 TekValue \u003d? (TekValue \u003d , 0, TekValue); FieldList \u003d FieldList + Format (TekValue,"CHN \u003d null; ChG \u003d" ) + " , 5 "그런 다음 // 숫자는 소수입니다. // 추가 함수 Format ()이 올바르게 변환하지 않으므로 null을 0으로 변환 TekValue \u003d? (TekValue \u003d , 0, TekValue); FieldList \u003d FieldList + 형식 (TekValue, "RHD \u003d. ; CHN \u003d null; ChG \u003d" ) + " , "+ 기호. PS; ElseIf FieldDescription. 유형 \u003d" 7 "그런 다음 // 날짜 TekValue \u003d? (TekValue \u003d ," 00010101 " , TekValue); TekValue \u003d "인 경우 00010101 " 그런 다음 ModValue \u003d " 없는"; 그렇지 않으면 ModValue \u003d" ""+ 형식 (TekValue, "DLF \u003d DT") +" ""; EndIf; FieldList \u003d FieldList + ModValue + " , "+ 기호. PS; ElseIf FieldDescription. 유형 \u003d" 11 "그런 다음 // 부울 TekValue \u003d? (TekValue \u003d , False, TekValue); FieldList \u003d FieldList + Format (TekValue,"BL \u003d 거짓; BI \u003d 참" ) + " , "+ 기호. PS; ElseIf FieldDescription. 유형 \u003d" 202 "그런 다음 // string TekValue \u003d? (TekValue \u003d ," ", TekValue); ValueString \u003d Leo (TekValue, 255); If EmptyString (ValueString) Then FieldList \u003d FieldList +" 없는,"+ 기호. PS, 그렇지 않으면 ModValue \u003d StrReplace (ValueString," "", "" + chr () + " "); ListFields \u003d ListFields +" ""+ 약어 (Leo (ModValue, 255)) + "" , "+ 문자. PS EndIf; ElseIf FieldDescription. 유형 \u003d" 203 "그런 다음 // 문자열 If EmptyString (ValueString) Then FieldList \u003d FieldList +" 없는,"+ 기호. PS, 그렇지 않으면 ModValue \u003d StrReplace (TekValue," "", "" + chr ("+ 문자 코드 (" "") + " ) + " "); ListFields \u003d ListFields +" ""+ ModValue + "" , "+ 기호. PS EndIf, EndIf, ColumnCounter \u003d ColumnCount + 1, EndCycle; // 마지막 쉼표 제거 FieldList \u003d Leo (FieldList, StrLength (FieldList)-2); QueryText \u003d "INSERT INTO"+ TableDescription. TableName + "값 ( "+ FieldList +" ) "; Command. CommandText \u003d 요청 텍스트, 시도. 명령. 실행 (); 예외 보고서 (" 데이터 쓰기 오류!"+ 기호. ПС +"요청 텍스트 : "+ 요청 텍스트 + 기호. ПС + 오류 설명 ()); Return-2; EndTry; EndCycle; // 연결 종료 Com. ActiveConnection. 닫기 (); 덩어리 \u003d 정의되지 않음; 커넥터 \u003d 정의되지 않음; 반환 0; EndFunction

이 함수는 3 개의 매개 변수를받습니다.

  1. StructureDescriptionTables-테이블 자체 및 해당 필드에 대한 설명을 포함하는 구조입니다. 아래에서 제공 할 도우미 함수로 구성됩니다.
  2. FileName-데이터베이스 파일의 문자열 이름입니다.
  3. DeleteExistingTable은 동일한 이름의 기존 테이블에 대한 함수의 동작을 결정하는 확인란입니다.

제어를받은 함수는 데이터베이스 파일을 엽니 다. 연결이 성공하면 "ADOX.Catalog"개체 (테이블 카탈로그)가 생성되며, 먼저 함수 # 3의 매개 변수에 따라 테이블의 존재를 확인합니다. 다음 작업은 새 테이블... 키 필드 (색인)가 테이블에 추가됩니다. 또한 함수 # 2의 매개 변수를 기반으로 해당 유형의 테이블 필드가 생성됩니다. 완료되면 새로 생성 된 테이블이 카탈로그되고 연결이 닫힙니다.

물론 함수 # 2의 매개 변수를 수동으로 수집하는 것은 시간이 많이 걸리며, 사용 편의성을 위해 데이터가있는 값 테이블을 기반으로 테이블 설명의 구조를 형성하는 함수를 작성했습니다.

필드 설명의 구조를 구성하는 함수의 소스 코드 :

// 필드 설명 구조를 분할하기위한 도우미 함수 // 매개 변수 1 : 값 테이블-언로드 할 데이터가있는 테이블 // 매개 변수 2 : 문자열-전체 테이블 이름 (잘못된 문자를 포함해서는 안 됨 : ",.). // 테이블 설명의 구조를 반환합니다. 함수 ComposeFieldDescriptionStructure (ValDataTable, ValueTableName) DescriptionStructure \u003d 새 구조 ( "TableName , 설명 필드"); DescriptionStructure. TableName \u003d TableName; DescriptionStructure .FieldsDescription \u003d 새 배열; // 값 테이블의 열을 살펴 봅니다. 데이터 테이블의 각 열 TZ에 대해. 열 루프 StructureFieldProperty \u003d 새 구조 ( "이름 , 유형, 길이, 동의어"); ColumnValueType \u003d ColumnTZ .ValueType; StringLength \u003d ColumnValueType .StringQualifiers. Length; // 열에 포함 된 유형 확인 // 모든 복합 유형은 문자열입니다. ValueType이 Column 인 경우. 유형 (). Count ()\u003e 2 다음 FieldPropertyStructure. 이름 \u003d 열 TK. 이름; StructureFieldProperty. 유형 \u003d " 202 "; // adVarWChar, Type FieldPropertyStructure. Length \u003d 255; FieldPropertyStructure. Synonym \u003d TK Column. Header; OtherIf ColumnValueType. ContainsType (Type (" ")) 다음 FieldPropertyStructure. 이름 \u003d TK 열. 이름; IfStringLength \u003d 0 다음 FieldPropertyStructure. 유형 \u003d" 203 " ; // adLongVarWChar ( "memo"), 유형 203 [유니 코드 텍스트 스트림 (DT_NTEXT)]202 "; // adVarWChar, 유형 202 [255 자 유니 코드 문자열 (DT_WSTR)] //StructureFieldProperty.Length \u003d? (StringLength 0 그런 다음 // 코드를 붙여 넣을 때 문서 편집기 오류, 수정할 수 없음, 처리 참조 StructureFieldProperty. 유형 \u003d " 5 "; // adDouble, 유형 5 그렇지 않으면 FieldPropertyStructure입니다. 유형 \u003d " 3 "; // adInteger, 유형 3 EndIf; ElseIfColumnValueType. ContainsType (유형 ( "부울")) ThenStructureFieldProperty. 이름 \u003d 열 TK. 이름; StructurePropertyField. 유형 \u003d " 11 "; // adBoolean, 유형 11 StructureFieldProperty. 길이 \u003d 정의되지 않음; StructureFieldProperty. 동의어 \u003d 열 TK. 표제; ElseIfColumnValueType. ContainsType (유형 ( "Date")) 그런 다음 FieldPropertyStructure. 이름 \u003d 열 TK. 이름; StructureFieldProperty. 유형 \u003d " 7 "; // adDate, 유형 7 StructureFieldProperty. 길이 \u003d 정의되지 않음; StructureFieldProperty. 동의어 \u003d 열 TK. 표제; 그렇지 않으면 FieldPropertyStructure입니다. 이름 \u003d 열 TK. 이름; StructureFieldProperty. 유형 \u003d " 202 "; // adVarWChar, 유형 202 [255 자 유니 코드 문자열 (DT_WSTR)] StructureFieldProperty. 길이 \u003d 255; StructureFieldProperty. 동의어 \u003d 열 TK. 표제; EndIf; 구조 설명. 필드 설명. 추가 (FieldPropertyStructure); 사이클 종료; 반환 구조 설명; EndFunction

이 함수는 2 개의 매개 변수를받습니다.

  1. DataTable은 데이터가있는 값의 테이블입니다. 이 매개 변수에서 함수는 미래 필드의 데이터 유형에 대한 설명을 형성합니다. 이 경우 모든 TK 필드가 입력되므로 쿼리를 통해이 값 테이블을 만드는 것이 좋습니다.
  2. TableName-문자열 이름 미래 테이블 접속하다.

처음에는 데이터베이스 자체에 대한 설명이 포함 된 구조가 생성 된 후 배열이 추가되고 필드에 대한 설명이있는 다른 구조가 포함됩니다. 값 테이블의 열을 순환하는 동안 필드 설명 배열이 채워집니다. 필드 설명 구조에는 4 가지 주요 속성이 있습니다.

  1. 이름-미래 필드의 이름 문자열. 공백이나 호환되지 않는 문자를 포함 할 수 없습니다. 쿼리로 값 테이블을 형성하면 문제가 발생하지 않지만 값 테이블을 자체적으로 채우는 경우 책임은 전적으로 귀하에게 있습니다.
  2. 유형은 문자열이며 Microsoft 상수입니다. 이 경우 정수, 분수, 문자열 (다양한 길이), 부울 및 날짜 만 사용됩니다.
  3. 길이는 문자열 유형의 경우 숫자입니다.
  4. 동의어-문자열, 필드의 텍스트 설명.

구조 형성을 완료 한 후 그녀는 돌아옵니다.

마지막으로 데이터베이스 테이블에 데이터를 쓰는 함수로 이동할 수 있습니다. 이 기능에서는 전체 메커니즘 기능의 핵심이 집중되어 있다고 말할 수 있습니다. 그러므로, 이 기능 가장 어렵지만 겁을 주어서는 안됩니다. 프로그래머는 분석적 사고 방식을 개발하기 때문에 프로그래머입니다.

테이블에 데이터를 입력하는 함수의 소스 코드 :

// 함수는 테이블에 데이터를 삽입합니다. // 매개 변수 1 : string-데이터베이스 파일의 전체 이름 // 매개 변수 2 : 값 테이블-언로드 할 데이터가있는 테이블 // 매개 변수 3 : 구조-생성중인 테이블에 대한 설명 (ComposingStructureDescriptionFields 함수를 사용하여 생성 할 수 있음) // 반환 0 작업을 성공적으로 완료 한 경우 0 기능이 실패하면 함수 데이터 입력 테이블 (의미 파일 이름 , 의미 데이터 테이블 , 의미 설명 테이블 ) StringConnection = " 공급자 = 마이크로 소프트 . 제트기 . OLEDB . 4 . 0 ; 데이터 소스 = " " " + 파일 이름 + " " " ; Jet OLEDB : 엔진 유형 = 5 ; " ; // 데이터베이스와의 통신을 담당하는 객체 커넥터 = 새로운 COM 개체 (" ADODB . 연결" ) ; 커넥터 . ConnectionString = StringConnection ; // 연결 시도 커넥터 . 열다 () ; 예외 신고하기 (" 아니 데이터베이스 파일을 열었습니다!" ) ; 신고하기 (설명 오류 () ) ; 반환 - 1 ; 시도 종료; 질환 (" 테이블을 데이터로 채 웁니다." + 설명 테이블 . 테이블 이름 ) ; // DB 명령 객체 덩어리 = 새로운 COM 개체 (" ADODB . 명령" ) ; 덩어리 . ActiveConnection = 커넥터 ; //일정한 1 "쿼리"를 의미하며 뷰와 저장 프로시 저도 있습니다. 덩어리 . CommandType = 1 ; 카운터 스트링 = 1 ; 에 대한 각 라인 TK 데이터 테이블 주기 사용자 인터럽트 처리 () ; // 데이터 열을 반복 ListFields = 체재 (카운터 스트링 , " ChG = " ) + " , " + 기호 . 추신 ; 카운터 스트링 = 카운터 스트링 + 1 ; 컬럼 카운터 = 0 ; // 필드 목록을 형성하기위한 루프 에 대한 각 열 데이터 테이블 . 확성기 주기 TekValue = 문자열 TK [ 열 TZ . 이름 ] ; 설명 필드 = 설명 테이블 . 설명 필드 . 받다 (컬럼 카운터 ) ; // 데이터 유형 구문 분석 만약 설명 필드 . 유형 = " 3 " 그때 // 정수 ListFields = ListFields + 체재 (TekValue , " CHN = 없는; ChG = " ) + " , " + 기호 . 추신 ; 그렇지 않으면 설명 필드 . 유형 = " 5 " 그때 // 소수 ListFields = ListFields + 체재 (TekValue , " CRD = . ; CHN = 없는; ChG = " ) + " , " + 기호 . 추신 ; 그렇지 않으면 설명 필드 . 유형 = " 7 " 그때 //날짜 만약 TekValue = "00010101 " 그때 모드 값 = " 없는" ; 그렇지 않으면 모드 값 = " " " + 체재 (TekValue , " DLF = DT" ) + " " " ; End If; ListFields = ListFields + 모드 값 + " , " + 기호 . 추신 ; 그렇지 않으면 설명 필드 . 유형 = " 11 " 그때 // 부울 ListFields = ListFields + 체재 (TekValue , " BL = 그릇된; BI = 진실" ) + " , " + 기호 . 추신 ; 그렇지 않으면 설명 필드 . 유형 = " 202 " 그때 //선 ValueString = 사자 (TekValue , 255 ) ; 만약 빈 줄 (ValueString ) 그때 ListFields = ListFields + " 없는, " + 기호 . 추신 ; 그렇지 않으면 // 작은 따옴표는 SQL의 특수 문자입니다. // 코드를 통해이 문자를 변환 모드 값 = PageReplace (ValueString , " " " , " " + chr (" + 기호 코드 (" " " ) + " ) + " " ) ; ListFields = ListFields + " " " + SokrLP (사자 (모드 값 , 255 ) ) + " ", " + 기호 . 추신 End If; 그렇지 않으면 설명 필드 . 유형 = " 203 " 그때 //선 만약 빈 줄 (ValueString ) 그때 ListFields = ListFields + " 없는, " + 기호 . 추신 ; 그렇지 않으면 모드 값 = PageReplace (TekValue , " " " , " " + chr (" + 기호 코드 (" " " ) + " ) + " " ) ; ListFields = ListFields + " " " + 모드 값 + " ", " + 기호 . 추신 End If; End If; 컬럼 카운터 = 컬럼 카운터 + 1 ; 주기 종료; // 데이터 Table.Columns 루프의 각 열 TZ에 대해 // 마지막 쉼표 제거 ListFields = 사자 (ListFields , Str 길이 (ListFields ) - 2 ) ; // 요청 테스트의 최종 구성 텍스트 요청 = " 에 집어 넣다" + 설명 테이블 . 테이블 이름 + " 가치 (" + ListFields + " ) " ; 덩어리 . CommandText = 텍스트 요청 ; // 데이터베이스에 데이터 쓰기 (쿼리 실행) 시도 덩어리 . 실행() ; 예외 신고하기 (" 데이터 쓰기 오류!" + 기호 . 추신 + " 요청 텍스트 :" + 텍스트 요청 + 기호 . 추신 + 설명 오류 () ) ; 반환 - 2 ; 시도 종료; 주기 종료; // 데이터 루프의 각 문자열 TZ에 대해 // 연결 종료 덩어리 . ActiveConnection . 닫기 () ; 덩어리 = 찾으시는 주소가 없습니다; 커넥터 = 찾으시는 주소가 없습니다; 반환 0 ; EndFunction

이 함수는 3 개의 매개 변수를받습니다.

  1. FileName-문자열은 데이터베이스 파일의 이름입니다.
  2. DataTable은 데이터가 포함 된 값 테이블입니다.
  3. DescriptionTables는 테이블의 필드와 이름을 설명하는 구조입니다.

데이터베이스 작업을 위해 친숙한 연결이 생성됩니다. 연결되면 SQL 명령어를 실행하는 객체를 생성합니다. 다음으로 값 테이블 행 (함수 # 2의 매개 변수)을 통해 루프를 구성하고 테이블 열을 통해 중첩 루프를 구성합니다. 행 수는 행을 인덱싱하는 데 사용됩니다. 열 카운터는 테이블 설명 구조 (파라미터 3)에서 필드 설명을 검색하는 데 사용됩니다. 다음 행의 열을 통해 테이블 \u200b\u200b설명에 따라 유형을 분석하고 적절한 변환을 수행합니다. 결과적으로 우리는 데이터베이스에 행을 쓰는 기성 SQL 명령을 가지고 있습니다. ADODB.Command 개체를 사용하여 수신 된 SQL 문을 적용합니다. 프로세스가 끝나면 연결을 닫고 메모리를 지 웁니다.

안타깝게도이 사이트에서는 디렉토리를 액세스 데이터베이스에 업로드 할 수있는 씩 클라이언트에 대한 처리를 연결할 수 없습니다. 그러나 Yandex 디스크에서 다운로드 할 수 있습니다. http://yadi.sk/d/UzK_PAsJ3vjTS ... 이 처리에는 범용 언 로딩 메커니즘의 모든 세부 사항이 포함됩니다. 물론이 처리는이 메커니즘에 국한되지 않습니다. 별도의 모듈과 자신의 치료에 안전하게 복사 할 수 있습니다. 업로드 충돌로 이어질 수있는 잘못된 상황을 배제하지는 않지만 이것은 상업적인 프로젝트가 아닙니다. 자유롭게 수정할 수 있습니다. 이 메커니즘 당신의 필요에 맞게. 아래는 adox 상수를 설명하는 2 개의 부록입니다. 이 메커니즘이 도움이 되셨기를 바랍니다. 귀하의 전문 분야에서 모든 성공을 기원합니다!

액세스 테이블 필드의 추가 속성에 대한 부록 1 목록 :

자동 증가

레코드가 추가 될 때 자동으로 증가 할 카운터 필드 유형을 지정합니다.

기본

기본 필드 값입니다.

기술

필드에 대한 설명입니다.

고정 길이

필드가 고정 길이인지 가변인지 판별합니다.

증가

"카운터"유형의 필드가 증가되는 값입니다.

널 가능

필드에 값이 포함될 수 있는지 여부, 즉이 필드가 필수인지 여부를 결정합니다.

"카운터"유형의 필드에 대한 첫 번째 레코드에서 계산을 시작할 값입니다.

Jet OLEDB : 제로 길이 허용

텍스트 필드에 길이가 0 인 문자열이 포함될 수 있는지 여부를 결정합니다. 문자가 아닌 필드에서는 무시됩니다.

Jet OLEDB : 자동 생성

adGUID 유형의 필드에 대해 새 GUID 값이 자동으로 생성되는지 여부를 결정합니다.

Jet OLEDB : 열 유효성 검사 규칙

필드에 기록 된 값의 정확성을 결정하는 표현식은 SQL WHERE 형식으로 작성되어야하지만 예어 어디.

Jet OLEDB : 열 유효성 검사 텍스트

필드에 입력 한 값이이 필드 (규칙)에 대해 정의 된 규칙과 일치하지 않는 경우 표시되는 텍스트입니다.

Jet OLEDB : 압축 된 유니 코드 문자열

Microsoft Jet가 디스크에 기록 될 때 유니 코드 문자열을 압축할지 여부를 결정합니다. 데이터베이스가없는 경우 무시됩니다. microsoft 형식 Jet 버전 4.0.

Jet OLEDB : 하이퍼 링크

필드의 데이터가 하이퍼 링크임을 지정합니다. adLongVarWChar 이외의 필드에서는 무시됩니다.

Jet OLEDB : IISAM Not Last Column

Installable-ISAM의 경우이 속성은 I-ISAM에이 열 이후에 테이블에 추가 될 열이 더 있음을 알립니다. ITableDefinition :: AddColumn 또는 ITableDefintion :: CreateTable을 사용하는 경우 모든 항목에 대해이 속성을 설정해야합니다.

Jet OLEDB : 페이지 당 하나의 BLOB

데이터를 별도의 페이지 (True)에 저장해야하는지 또는 공유 데이터베이스 페이지를 사용하여 디스크 공간을 절약 할 수 있는지 여부를 결정합니다. adLongVarBinary 유형의 필드에서만 작동합니다.

부록 2 ADOX에서 사용되는 값 유형 목록

adDouble, 유형 5-분수

adDate, 유형 7-날짜 / 시간

adCurrency, 유형 6-정수

adInteger, 유형 3-부호없는 정수

adBoolean, 유형 11-부울

adVarWChar, 유형 202-255 자의 유니 코드 문자열

adLongVarWChar ( "memo"), 유형 203-유니 코드 문자열 무제한 문자열

최근에는 하나의 간단한 Access 데이터베이스에서 모든 데이터를 자체 작성 구성 (1C : Enterprise. 전송할 수있는 정보가 많지 않았고 원칙적으로이 매혹적인 프로세스를 사용자에게 다운로드 할 수 있었음)으로 언로드해야했습니다. 이미 바쁜 직원들을 돕기로 결정했습니다.

도움은이 프로세스의 완전한 자동화로 구성되었습니다. 몇 초 만에 모든 작업을 수행하는 간단한 처리를 작성해야했습니다. 이 작업 전에는 1C + Access로 작업 할 필요가 없었기 때문에 키보드를 잡고 코드를 훑어보기 전에 설명서를 읽기로 결정했습니다.

처음부터 모든 상호 작용이 적절한 공급자를 사용하는 것임을 알았지 만 여전히 예제를 파헤 치기로 결정했습니다.

이 쪽지를 써야 할 열쇠를 오랫동안 생각했습니다. 결과적으로, 나는 내 솔루션의 코드를 제공하는 가장 간단한 옵션을 선택했습니다. 최적이 아닐 수도 있지만 대부분의 작업에는 충분합니다.

자, 모든 것을 순서대로 살펴 보겠습니다. 새 처리를 만들고 여기에 "TableField"라는 단일 구성 요소를 던집니다. 이 구성 요소를 모양 전체에 늘 렸습니다. 결과적으로 내 양식은 그림 1과 같은 형식을 취했습니다.


그림 1. 처리 형태

이것에 대해 우리는 양식의 디자인이 준비되었다고 가정 할 수 있습니다. 열을 수동으로 만들지는 않지만이 절차를 동적으로 수행합니다. 다행히도 어렵지 않습니다. 실행 버튼에 대한 OnClick 이벤트 핸들러를 만들고 그 안에 다음 코드를 작성합니다.

// 테이블 필드를 지 웁니다. TableField1.Clear (); TabularField1.Columns.Clear (); // MS Access를 사용하여 연결 문자열을 준비합니다. // 데이터베이스 경로는 맨 끝에 표시됩니다. ConnectionString \u003d "Provider \u003d Microsoft.Jet.OLEDB.4.0; Data Source \u003d"+ "C : \\ mydb.mdb"; ConnectionWithBase \u003d 새 COMObject ( "ADODB.Connection"); // ConnectConnectionWithBase.Open (ConnectionString); // 테이블에서 레코드 집합을 가져옵니다. demo_table RecordsCollection \u003d New COMObject ( "ADODB.Recordset"); CollectionRecords.Open ( "select * from demo_table", ConnectWithBase, 1); // 테이블 필드 구조 읽기 // 값 테이블에서 Access "테이블에있는 모든 열을 만듭니다. For count \u003d 0 by Records Collection.Fields.Count-1 Loop TableField1.Columns. Add ("Column "+ nr, Line (Records Collection .Fields.Item (сч) .Name)); End of the Loop; // 마커를 Records Collection의 첫 번째 레코드로 이동합니다 .MoveFirst (); // table // 아직 TK NOT RECORD 컬렉션에 추가합니다. EOF Loop NewRow \u003d TableField1. Add (); For count \u003d 0 by RecordsCollection.Fields.Count-1 Loop NewRow [ "Column"+ nt] \u003d RecordsCollection.fields ( TabularField1.Columns [nr] .Header) .Value; End of Loop; Record Collection.MoveNext (); EndCycle; // TK의 데이터를 TabularFieldFormElements.TableField1.Value \u003d TabularField1; FormFields.TableField1.CreateColumns ()에 표시 ;

코드가 너무 크지는 않지만 충분히 유용합니다. 나는 특정 구조에 묶이지 않았습니다. 이 코드는 다양한 테이블에서 잘 작동합니다. 더 이상 추가 할 게 없으니 작별 인사

간단히 말해서-아무것도 아닙니다. 정부 기관과의 상호 작용과 관련된 모든 것 (세금, 회계, 모든 종류의 소비세 지불 등)에서 1C는 아무것도 대체 할 수 없으며이를 시도하는 것은 적어도 비 구조적입니다.

그러나이 기사를 읽는 것을 멈추지 마십시오. 이것은 아직 주요 아이디어가 아닙니다. 주요한 것은 논리적 함정에 빠지지 않고 기업의 모든 프로세스 자동화의 어떤 부분에서도 1C를 완전히 필수 불가결하다고 생각하지 않는 것입니다. 여기에 논쟁 할 것과 제공 할 것이 있습니다. 컴퓨터 회사의 비즈니스 활동의 다양한 측면을 자동화 한 성공적인 경험에 대해 말씀 드리고 싶습니다. 물론이 솔루션과 1C의 통합에 대해 말씀 드리고 싶습니다. 이 작업은 자체 개발 한 시스템을 1C 프로그램과 인터페이스해야한다는 필요성에서 비롯되었지만이 접근 방식 (2 개의 소프트웨어 블록으로 분할)은 일반적으로 정보 시스템을 구축하는 본격적인 철학으로 개발 될 수 있습니다.

처음에 작업은 다음과 같았습니다. 기업 자동화 시스템이 Microsoft Access... 오랜 개발 기간 동안 은행 유지, 청구, 선적을위한 회계 문서 작성, 창고 유지, 구성 요소 회계 등 거의 모든 일상 업무를 흡수했습니다. 일련 번호, 그리기 기술지도 생산 등 최근에 시스템의 기능이 추가되었습니다. 인보이스를 기반으로 직접 은행 지불을 생성하고, 자동 생성 웹 리소스에 게시하고, 회사 웹 사이트를 업데이트하고, 기존 템플릿을 기반으로 계약을 준비하기위한 다양한 형식의 가격 목록 (소위 사무 자동화). 또한 많은 수의 분석 및 모든 관리 회계의 유지 관리가 있습니다. 이 모든 것이 시스템을 완전히 대체 할 수 없게 만들었습니다.이 모든 기능을 1C로 이전하려면 많은 시간과 비용이 소요됩니다.

반면에 1C-Enterprise 프로그램은 BU 및 NU를 유지하고 보고서를 제출하는 회계 부서의 요구 사항 만 충족했습니다. 따라서 1C는 회사의 일상 업무에서 "분리"되었으며 수행 된 문서는 사후 데이터베이스에 입력되었습니다.

그러한 계획이 좋은 이유는 무엇입니까? 몇 가지 장점이 있습니다.
- "지성소"에 대한 관리자 및 기타 책임있는 사람의 비허가-회계 기반은 주제를 이해하는 직원에 의해서만 형성되어야합니다. 참고 도서의 정확한 유지 관리,
-회계에 반영 할 필요가없는 관리 업무부터 회사에 국한되고 외부인이 접근 할 수없는 기타 사항에 이르기까지 1C와 관련이없는 모든 것을 1C에서 제거합니다.
-라이센스 비용 절감 : 1C 작업에는 많은 비용이 들지만
- 중요한 점: 위에서 설명한 모든 추가 기능을 1C "내부"에서 직접 구현할 때 제품 업데이트가 릴리스 될 때이를 개선해야 할 필요가 있습니다. 물론 이것은 1C 프로그래머의 거의 지속적인 고용을 보장하지만 돈을 크게 절약 할 수있는 곳입니다.

물론 모든 문서를 다시 확인하고 참고 도서를 보충해야 할 필요성이 있습니다.

사실, 이것은 이중 작업에서 벗어나는 주요 작업이었습니다.

먼저 모든 종류의 디렉토리를 처리해야합니다. 우선, 이것은 상대방과 명명법의 디렉토리입니다. 이러한 종류의 프로그램에서 자주 발생하는 디렉터리 동기화 문제는 구현 과정에서 충분히 해결되고 이해되었습니다. 그러나이 경우 상호 동기화에 2 개의 디렉토리를 사용하지 않고 MS Access에 포함 된 하나의 원본 버전을 사용하고 단순히 1C ( 피드백 MS Access에서이 위치가 이미 언로드되었다는 표시 일뿐입니다.)
이 접근 방식은 작업을 크게 단순화합니다. 순전히 회계 요구를 위해 그러한 디렉토리에 필요한 위치는 거의 없으며 공식적인 원칙을 위반하지 않도록 외부 프로그램에도 설정됩니다. 따라서 하나 더 제거 할 수 있습니다. 빈번한 문제 -사용 된 명명법의 참고서의 엄청난 팽창. 아래는 "모니터"제품 그룹입니다.

이러한 공포를 1C 디렉토리에 업로드하면 (그리고 거의 매주 새로운 모니터 모델이 나타남) 화면 주변 프레임 색상의 뉘앙스와 픽셀 수 때문에 모두 동일한 위치에 놓 이도록 구성 할 수 있습니다. 회계에 대해 완전히 중요하지 않습니다! 그리고 대각선의 크기는 솔직히 0.5 인치 차이가 나면 더욱 그렇습니다.

또한 외부 프로그램에서는 1C에서 많은 노력이 필요하기 때문에 디렉토리, 특히 상대방 디렉토리에서 중복 위치를 병합하는 데 훨씬 적은 손실로 가능합니다.

따라서 1C에서는 "정제"되고, 정리되고 적절한 형식의 데이터 만 업로드됩니다. 언로드는 약간의 빈도로 수행 할 수 있습니다. 분할을 사용하면 회계 부서의 작업을 디버그하고 불필요한 작업을 피할 수 있습니다. 낮 (또는 더 긴 기간) 동안 무언가가 취소, 변경, 다시 수행되는 경우 이러한 모든 일이 MS Access 작업 기반이며 "확립"만 가능합니다. 상태는 1C로 이동합니다. 또한 이러한 종류의 업로드는 백업 작업과 동기화 될 수 있으며 항상 1C베이스의 현재 상태의 정확성을 보장합니다.

분명히 문서는 자동 전기없이 수신됩니다 (구성 가능함). 그건 그렇고, MS Access 데이터베이스 자체는 창고에서 필요한 물품의 가용성을 확인합니다-선적을 위해 작성하기 위해 (딜레마) 송장이 현재 날짜까지 발행 될 수 있는지, 모든 항목이 작성에 필요한지 확인합니다. 창고에 있습니다-즉, 구매 또는 생산-문서를 1C로 전달해야합니다. 관리자를 신뢰할 가치가없는 것 같습니다. 그렇지 않으면 항상 관리자 뒤에 회계 직원이 있어야합니다)

이제 구현에 대해. 1C 프로그램은 ADO 메커니즘을 통해 데이터 교환 인터페이스를 지원합니다. 1C 측에서는 일반 소프트웨어 인터페이스 이 메커니즘의 작동이 버전과 업데이트간에 변경 될 수있는 1C 구현의 내부 세부 사항에 의존하지 않도록 디렉토리 및 문서의 요소를 작성합니다. 반면 개발의 주요 슬로건은 "가능한 경우 1C 기능을 최대한 활용하는 것"이었습니다. 따라서 MS Access의 번들 최종 구현에서는 상대방의 이름과 TIN 만로드되었습니다. 데이터는 1C에 내장 된 메커니즘을 사용하여 법인 및 개별 기업가의 통합 주정부 등록부에서 "추출"되었습니다 (동일한 적용 은행 계좌 정보 -BIK에 의해 업데이트 됨).

외부 MS Access 데이터베이스에서 1C에로드하는 데 필요한 모든 데이터를 준비하는 쿼리 (Query)가 생성되었습니다. 데이터를 가져 와서 문서와 필드에 넣습니다.

언로드 계획은 두 단계로 구성됩니다. 첫째, 상대방의 새로운 위치와 명명법 참고서가로드됩니다. 1C에서 할당 한 GUID는 MS Access로 반환되므로 두 번째 단계에서 모든 문서를 언로드 할 때 참조 도서에 올바른 바인딩을 설정합니다. 이렇게 생겼어요

우리는 그러한 건축 이데올로기가 정보 시스템 레거시 비 -1C 시스템이있는 회사뿐만 아니라 새로운 작업을 조직 할 때도 기초로 사용할 수 있습니다. 법인, MS Access에 대한 많은 경험이 있기 때문입니다. 이 접근 방식의 장점은 위에 설명되어 있습니다.

이 문서는 1C 시스템의 개체에 대한 사용자 액세스 권한을 설정하는 데 중점을 둡니다.

1C 8에서는 사용자 액세스를 관리하는 데 별도의 메타 데이터 개체가 사용됩니다. 역할.

노트! 이 기사는 프로그래머를 돕기 위해 작성되었습니다. 1C 계정의 예를 사용하여 사용자 모드에서 권한을 설정하는 방법은에서 설명합니다.

역할은 사용자가 가진 권한 집합을 정의합니다. 역할 메커니즘은 Windows 권한 메커니즘과 매우 유사합니다. Active Directory... 각 개체 (참조 도서, 문서)에 대해 개발자는 자신의 권한 세트 (읽기 / 쓰기 / 추가 / 변경 / ...

사용 가능한 권한 세트- 사용자 역할의 모든 권한 모음.

역할 메타 데이터 개체를 열면 다음 그림을 볼 수 있습니다.

개체에는 권한 및 제한 템플릿이라는 두 개의 탭이 있습니다. 권한-기본 탭, 템플릿-1C의 레코드 수준에서 권한을 설정하기위한 탭 ( RLS). 이것은 매우 중요한 주제이며 향후 기사에서 설명하려고 노력할 것입니다.

우리는 탭만을 고려할 것입니다 권리.

  • 사물 -권한이 설정 될 목록입니다.
  • 권리 -설정할 수있는 권한 목록.
  • 데이터에 대한 액세스 제한 -사용자 정의를위한 역할 필드

하단의 확인 표시에주의하십시오.

  • 새 개체에 대한 권한 설정 -역할에 플래그가 설정된 경우 새 메타 데이터 개체에 대한 권한이 자동으로 설정됩니다. 새 개체에 대한 권한 설정을 자주 잊어 버린 경우 설치하는 것이 좋습니다.
  • 필수 조건 및 권한 설정 표 섹션 기본-플래그가 설정되면 속성 및 표 섹션이 소유자 (참조 도서, 문서 등)의 권한을 상속합니다.
  • 종속 개체의 독립적 인 권한 -플래그가 설정되면 시스템은 구성 개체에 대한 권한을 결정할 때 상위 개체에 대한 권한을 고려합니다.

전체 구성에 대한 권한 설정

역할을 열고 구성 루트를 클릭하면 다음 설정이 표시됩니다.

각각에 대해 자세히 알아보기 전체 구성에 대한 권한:

267 개의 1C 비디오 튜토리얼을 무료로 받으세요 :

  • 관리 -행정 정보베이스 ( "데이터 관리"권한 필요)
  • 데이터 관리 -데이터에 대한 관리 조치에 대한 권리
  • 데이터베이스 구성 업데이트 -권리
  • 독점 모드 -전용 모드 사용
  • 활성 사용자 -활성 사용자 목록보기
  • -등록 로그
  • -발사 권리 씬 클라이언트
  • -웹 클라이언트를 시작할 수있는 권한
  • 뚱뚱한 클라이언트 -뚱뚱한 클라이언트 역할을 실행할 권리
  • 외부 연결 -외부 연결을 시작할 권리
  • 오토메이션 -자동화를 사용할 권리
  • 모든 기능 모드 -관리되는 애플리케이션 모드
  • 사용자 데이터 저장 -사용자 데이터 (설정, 즐겨 찾기, 이력) 저장 권한 또는 금지. 특히 1C 관리 양식과 관련이 있습니다.
  • 대화 형 발견 외부 치료 -외부 치료 열기
  • 대화식으로 외부 보고서 열기 -외부 보고서 열기
  • 산출 -클립 보드에 인쇄, 쓰기 및 복사

다른 메타 데이터 개체에 대한 1C 8.2 권한 설정

나머지 주요 개체 (디렉터리, 상수, 문서, 레지스터 등)의 경우 역할에 대한 권한 집합은 매우 표준입니다.

  • 독서 -읽기 (소프트웨어)
  • 첨가 -추가 (소프트웨어)
  • 변화 -변경 (소프트웨어)
  • 삭제 -삭제 (소프트웨어)
  • 전망 -보기
  • 대화 형 추가 -대화 형 추가
  • 편집 -편집
  • 온라인 플래그 삭제 -삭제를위한 대화 형 표시
  • 온라인 플래그 제거 -삭제 표시 해제
  • 마크의 대화식 삭제-표시된 개체 제거
  • 라인으로 입력 -라인 입력 모드 사용
  • 온라인 제거 -직접 삭제 (shift + del)

에 대한 권리 서류:

  • 상호 작용 행위 -보유
  • 해제 -서류 취소
  • 인터랙티브 비 작동 -비 작동 모드에서 문서 유지 (양식의 표준 명령)
  • 대화 형 취소 -대화 형 취소
  • 수행의 대화식 수정 -게시 된 문서 편집. 역할에 대한 권한이 설정되지 않은 경우 사용자는 게시 된 문서를 삭제하거나 삭제 표시, 재 게시 또는 게시 취소 할 수 없습니다. 이러한 문서의 형식은보기 모드에서 열립니다.

추신 여전히 사용자의 역할을 이해하지 못했다면 주문할 수 있습니다.
1C 회계 3.0에서 권한 설정 예제가 포함 된 비디오 :

이 공유