액세스가 1초 안에 로드되지 않습니다. 데이터베이스 파일을 생성하는 함수의 소스 코드

특징:

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

제한:

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

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

  1. 데이터베이스 파일을 생성하는 기능입니다.
  2. 데이터베이스 테이블을 생성하는 함수입니다.
  3. 데이터베이스 테이블에 데이터를 쓰는 함수입니다.

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

원천 DB 파일 생성 기능:

//함수 생성 새로운 파일기존 DB를 덮어쓰는 기능을 갖춘 DB//매개변수 //매개변수 2: 부울 - 데이터베이스 파일이 이미 존재하는 경우 플래그를 다시 작성합니다. //함수가 성공적으로 완료되면 0을 반환하고, 함수가 실패하면 0을 반환하지 않습니다.함수 CreateFileAccess(ValueFileName,ValueOverwriteFile = True) //파일 이름이 맞는지 확인빈 문자열(파일 이름)이면 Return - 2 ; 그렇지 않으면 //파일이 디스크에 있는 위치를 분석합니다. OverwriteFile이면 File = New File(FileName) ; 만약 파일. Exists() 그런 다음 파일 = 정의되지 않음; 삭제파일(파일이름) ; 종료If ; 종료If ; 종료If ; 상태(" 액세스 파일이 생성됩니다." + 파일명); //데이터베이스 쉘 생성 ADOX = New COMObject(" ADOX를 사용해 보세요. . 목록" ); 예외 보고서(" " + 기호. PS + 오류 설명() ) ; 시도 종료 ; //새로 생성된 데이터베이스에 연결 ConnectionString = " 공급자 " " " + 파일 이름 + " " " "; //ADOH 시도를 연결합니다. 생성(ConnectionString) ; 예외 보고서(" 데이터 파일을 생성하지 못했습니다. ADOX 개체를 만들 때. 카탈로그 오류가 발생했습니다!" + 기호. PS + DescriptionError() ) ; Return - 1 ; EndAttempt ; ADOH.ActiveConnection.Close() ; ADOH = 정의되지 않음 ; Return 0 ; EndFunction

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

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

먼저 전체 파일 이름을 확인합니다. 그러면 파일을 다시 쓰는 메커니즘이 작동합니다. 필요한 경우 기존 파일이 삭제됩니다. 그 후 절차는 생성으로 진행됩니다. 빈 파일 DB. 이는 ADOX.Catalog 개체를 사용하여 수행됩니다. ADOX.Catalog 작동 방식의 복잡성을 이해하려면 Microsoft 웹 사이트에서 관련 정보를 찾아보는 것이 좋습니다.

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

데이터베이스에 새 테이블을 생성하는 절차에 대한 소스 코드:

//매개변수 1 : 문자열 - 이름데이터베이스 파일//매개변수 2: 값 테이블 - 업로드할 데이터가 포함된 테이블//매개변수 3: 구조 - 생성되는 테이블에 대한 설명(필드 설명 구조 생성 기능을 사용하여 생성할 수 있음) //함수가 성공적으로 완료되면 0을 반환하고, 함수가 실패하면 0을 반환하지 않습니다.함수 EnterTableData(FileNameValue, DataTableValue, TableDescriptionValue)ConnectionString = " 공급자 =마이크로소프트. 제트기. OLEDB. 4 . 0 ; 데이터 소스=" " " + 파일 이름 + " " " ; 제트 OLEDB:엔진 유형= 5 ;" ; 커넥터 = 새 COMObject(" ADODB . 연결" ) ; Connector.ConnectionString = 연결 문자열; //연결 시도 Connector.Open() ; 예외 보고서(" 데이터베이스 파일을 열지 못했습니다!" ); Report(ErrorDescription() ) ; Return - 1 ; EndAttempt ; Status(" 데이터로 테이블을 채웁니다." + 테이블설명.테이블이름); //DB 명령 객체 Com = 새 COMObject(" ADODB . 명령" ) ;Com.ActiveConnection = 커넥터; //상수 1은 "쿼리"를 의미하며 뷰와 저장 프로시저도 있습니다.컴. 명령 유형 = 1 ; 행카운터 = 1 ; 데이터 테이블 루프에서 각 라인 TK 처리UserInterrupt() ; //순회 데이터 열 FieldList = Format(RowCounter, " CH = " ) + " , " + 기호. PS; 행 카운터 = 행 카운터 + 1 ; 열 카운터 = 0 ; 데이터 테이블의 각 열 TK에 대해. 열 주기 CurrentValue = 행 TK [ 열 TK. 이름] ; 필드 설명 = 테이블 설명. 필드 설명. Get(열 카운터) ; //데이터 유형 분석설명 필드. 유형 = " 3 " 그러면 // 정수 TechValue = ? (TechValue = null , 0 , TechValue); FieldList = FieldList + Format(TechValue, " CHN = null ; CHG=" ) + " , 5 " 그러면 //숫자는 분수입니다. //추가 Format() 함수가 이를 올바르게 변환하지 않기 때문에 null을 0으로 변환합니다.기술가치 = ? (기술값 = null , 0 , 기술값) ; FieldList = FieldList + Format(현재값, " BRD = . ; CHN= 널 ; CHG=" ) + " , " + 기호. PS; ElseIfField 설명. 유형 = " 7 "그럼 //날짜 CurrentValue = ? (TechValue = null , " 00010101 " , 기술값) ; TechValue = "인 경우 00010101 " 그런 다음 ModValue = " 없는" ; Else ModValue = " " " + Format(TechValue, " DLF = DT" ) + " " "; 종료If ; FieldList = FieldList + ModValue + " , " + 기호. PS; ElseIfField 설명. 유형 = " 11 " 그러면 //부울 TechValue = ? (TechValue = null , False , TechValue); FieldList = FieldList + Format(TechValue, " BL = 거짓 ; BI= 참" ) + " , " + 기호. PS; ElseIfField 설명. 유형 = " 202 " Then // string TechValue = ? (TechValue = null , " " , TechValue); ; StringValue = Lev(TechValue, 255 ) ; If 빈 문자열(StringValue) Then FieldList = FieldList + " 없는" + 기호. PS; 그렇지 않으면 ModValue = StrReplace(ValueString, " " " , " " +문자() + " " ); FieldList = FieldList + " " " + Abbr(Lev(ModValue, 255 ) ) + " " , " + 기호. PS EndIf; ElseIfField 설명. 유형 = " 203 " Then //string If EmptyString(ValueString) Then FieldList = FieldList + " 없는" + 기호. PS; Else ModValue = StrReplace(CurrentValue, " " " , " " +문자(" + SymbolCode(" " " ) + " ) + " " ); FieldList = FieldList + " " " + ModValue + " " , " + 기호. PS EndIf; EndIf; 열 카운터 = 열 카운터 + 1; EndCycle; //마지막 쉼표를 잘라냅니다. FieldList = Lev(FieldList, StrLength(FieldList) - 2 ) ; QueryText = "INSERT INTO" + TableDescription. 테이블 이름 + " VALUES ( " +필드목록+ " ) " ; Com.CommandText = 요청 텍스트; Com.Execute 시도 () ; 예외 보고서 (" 데이터 쓰기 오류!" + 기호. PS + " 요청 텍스트: " + 요청 텍스트 + 기호. PS + 오류 설명() ) ; 반환 - 2 ; EndAttempt ; EndCycle ; //연결을 닫는다컴. ActiveConnection. 닫다() ; Com = 정의되지 않음; 커넥터 = 정의되지 않음; 0을 반환합니다. EndFunction

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

  1. 테이블 설명 구조 - 테이블 자체와 해당 필드에 대한 설명이 포함된 구조입니다. 이는 아래에 제공할 보조 기능으로 구성됩니다.
  2. 파일 이름 - 데이터베이스 파일의 문자열 이름입니다.
  3. DeleteExistingTable - 동일한 이름의 기존 테이블과 관련하여 함수의 동작을 결정하는 플래그입니다.

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

물론 2번 함수의 매개변수를 수동으로 수집하는 것은 꽤 노동집약적이므로, 쉽게 하기 위해 데이터가 포함된 값 테이블을 기반으로 테이블 설명의 구조를 형성하는 함수를 작성했습니다.

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

//필드 설명 구조의 형식을 지정하기 위한 보조 함수//매개변수 1: 값 테이블 - 업로드할 데이터가 포함된 테이블//매개변수 2: 문자열 - 전체 테이블 이름(잘못된 문자를 포함해서는 안 됩니다: " , .) //테이블 설명 구조를 반환합니다.함수 ComposeFieldDescriptionStructure(DataTableValue, TableNameValue)DescriptionStructure = 새 구조("TableName , 설명필드" ) ;DescriptionStructure.TableName =TableName;DescriptionStructure.FieldDescription = 새 배열; //값 테이블의 열을 살펴봅니다.데이터 테이블의 각 열 TK에 대해. 열 순환 StructurePropertyFields = 새 구조(" 이름 , 유형, 길이, 동의어" ); ColumnValueType = ColumnTZ.ValueType;StringLength =ColumnValueType.StringQualifiers.Length; //컬럼에 포함된 타입 확인 //어느 복합형문자열이 될 것입니다 IfColumnValueType. 유형() . Quantity() > 2 그런 다음 StructurePropertyField입니다. 이름 = ColumnTZ. 이름; 구조속성필드. 유형 = " 202 " ; //adVarWChar, 유형 FieldPropertyStructure.Length = 255 ;FieldPropertyStructure. Synonym = ColumnTK.Header; ElseIfColumnValueType.ContainsType(Type(" " ) ) 그러면 FieldPropertyStructure.Name = TK Column.Name; LineLength = 0이면 FieldPropertyStructure.Type = " 203 " ; //adLongVarWChar("memo"), 유형 203 [유니코드 텍스트 스트림(DT_NTEXT)]202 " ; //adVarWChar, 유형 202 [255자의 유니코드 문자열(DT_WSTR)] //FieldPropertyStructure.Length = ?(LineLength 0 그러면 //코드 삽입 시 기사 편집기 오류가 발생하여 수정할 수 없습니다. 처리를 참조하세요.구조속성필드. 유형 = " 5 " ; //adDouble, 유형 5 그렇지 않으면 StructurePropertyFields입니다. 유형 = " 3 " ; //adInteger, 유형 3 종료If ; ElseIfColumnValueType. ContainsType(Type(" Boolean ") ) 그런 다음 StructurePropertyField를 선택합니다. 이름 = ColumnTZ. 이름; 구조속성필드. 유형 = " 11 " ; //adBoolean, 유형 11 구조속성필드. 길이 = 정의되지 않음; 구조속성필드. 동의어 = ColumnTZ. 제목; ElseIfColumnValueType. ContainsType(Type(" Date ") ) 그런 다음 StructurePropertyField. 이름 = ColumnTZ. 이름; 구조속성필드. 유형 = " 7 " ; //adDate, 유형 7 구조속성필드. 길이 = 정의되지 않음; 구조속성필드. 동의어 = ColumnTZ. 제목; 그렇지 않으면 StructurePropertyFields입니다. 이름 = ColumnTZ. 이름; 구조속성필드. 유형 = " 202 " ; //adVarWChar, 유형 202 [255자의 유니코드 문자열(DT_WSTR)]구조속성필드. 길이 = 255 ; 구조속성필드. 동의어 = ColumnTZ. 제목; 종료If ; 구조설명. 설명필드. 추가(필드속성구조) ; 엔드사이클 ; return설명구조; EndFunction

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

  1. DataTable - 데이터가 포함된 값의 테이블입니다. 이 매개변수로부터 함수는 미래 필드의 데이터 유형에 대한 설명을 생성합니다. 이 경우 기술 할당의 모든 필드가 입력되므로 쿼리를 통해 이 값 테이블을 생성하는 것이 좋습니다.
  2. TableName - 문자열 이름 미래 테이블입장.

처음에는 데이터베이스 자체를 설명하는 구조가 생성된 후 필드를 설명하는 다른 구조를 포함하는 배열이 추가됩니다. 값 테이블의 열을 반복하는 과정에서 필드 설명 배열이 채워집니다. 필드 설명 구조에는 4가지 주요 속성이 포함되어 있습니다.

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

구조 형성이 끝나면 반환됩니다.

마지막으로 데이터베이스 테이블에 데이터를 쓰는 함수로 넘어갈 수 있습니다. 이 기능에는 전체 메커니즘 기능의 핵심이 집중되어 있다고 말할 수 있습니다. 따라서, 이 기능가장 어려운 일이지만 겁먹을 필요는 없습니다. 프로그래머는 분석적 사고방식을 개발하기 때문에 프로그래머입니다.

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

//함수는 테이블에 데이터를 입력합니다. //매개변수 1 : 문자열 - 데이터베이스 파일의 전체 이름 //매개변수 2 : Value Table - 업로드할 데이터가 포함된 테이블 //매개변수 3 : 구조 - 생성되는 테이블에 대한 설명(필드의 구조 설명 컴파일 기능을 사용하여 생성할 수 있음) //보고 0 작업이 성공적으로 완료되었지만 그렇지 않은 경우 0 기능이 실패한 경우 기능테이블에 데이터 입력 (의미파일 이름 , 의미데이터테이블 , 의미설명테이블 ) 연결 문자열 = " 공급자 = 마이크로소프트 . 제트기 . OLEDB . 4 . 0 ; 데이터 소스 = " " " + 파일 이름 + " " " ; 제트 OLEDB:엔진 유형 = 5 ; " ; //데이터베이스와의 통신을 담당하는 객체커넥터 = 새로운 COM객체 (" ADODB . 연결" ) ; 커넥터 . 연결 문자열 = 연결 문자열 ; //연결 시도커넥터 . 열려 있는 () ; 예외신고하기 (" 아니다데이터베이스 파일을 열었습니다!" ) ; 신고하기 (설명오류 () ) ; 반품 - 1 ; 시도 종료; 상태 (" 데이터로 테이블을 채웁니다." + 설명테이블 . 테이블 이름 ) ; //DB 명령 객체= 새로운 COM객체 (" ADODB . 명령" ) ; . 액티브커넥션 = 커넥터 ; //끊임없는 1 "쿼리"를 의미하며 뷰와 저장 프로시저도 있습니다.. 명령 유형 = 1 ; 행 카운터 = 1 ; 을 위한각 라인 TK 에서데이터테이블 주기사용자 인터럽트 처리 () ; //순회 데이터 열필드 목록 = 체재 (행 카운터 , " CHG = " ) + " , " + 기호 . 추신 ; 행 카운터 = 행 카운터 + 1 ; 컬럼 카운터 = 0 ; //필드 목록 생성 주기 을 위한각 열 TK 에서데이터테이블 . 주기기술가치 = 라인 TK [ 칼럼TZ . 이름 ] ; 설명필드 = 설명테이블 . 설명필드 . 얻다 (컬럼 카운터 ) ; //데이터 유형 분석 만약에설명필드 . 유형 = " 3 " 그 다음에 //정수필드 목록 = 필드 목록 + 체재 (기술가치 , " 중국 = 없는; CHG = " ) + " , " + 기호 . 추신 ; 그렇지 않은 경우설명필드 . 유형 = " 5 " 그 다음에 //소수필드 목록 = 필드 목록 + 체재 (기술가치 , " CHRD = . ; 중국 = 없는; CHG = " ) + " , " + 기호 . 추신 ; 그렇지 않은 경우설명필드 . 유형 = " 7 " 그 다음에 //날짜 만약에기술가치 = "00010101 " 그 다음에 Mod값 = " 없는" ; 그렇지 않으면 Mod값 = " " " + 체재 (기술가치 , " DLF = D.T." ) + " " " ; 종료; 필드 목록 = 필드 목록 + Mod값 + " , " + 기호 . 추신 ; 그렇지 않은 경우설명필드 . 유형 = " 11 " 그 다음에 //부울필드 목록 = 필드 목록 + 체재 (기술가치 , " BL = 거짓; BI = 진실" ) + " , " + 기호 . 추신 ; 그렇지 않은 경우설명필드 . 유형 = " 202 " 그 다음에 //선값 문자열 = 사자 (기술가치 , 255 ) ; 만약에빈 줄 (값 문자열 ) 그 다음에필드 목록 = 필드 목록 + " 없는, " + 기호 . 추신 ; 그렇지 않으면 //작은따옴표는 SQL의 특수 문자입니다. //코드를 통해 이 기호를 변환합니다. Mod값 = 페이지바꾸기 (값 문자열 , " " " , " " + 문자 (" + 기호 코드 (" " " ) + " ) + " " ) ; 필드 목록 = 필드 목록 + " " " + 약어LP (사자 ( Mod값 , 255 ) ) + " ", " + 기호 . 추신 종료; 그렇지 않은 경우설명필드 . 유형 = " 203 " 그 다음에 //선 만약에빈 줄 (값 문자열 ) 그 다음에필드 목록 = 필드 목록 + " 없는, " + 기호 . 추신 ; 그렇지 않으면 Mod값 = 페이지바꾸기 (기술가치 , " " " , " " + 문자 (" + 기호 코드 (" " " ) + " ) + " " ) ; 필드 목록 = 필드 목록 + " " " + Mod값 + " ", " + 기호 . 추신 종료; 종료; 컬럼 카운터 = 컬럼 카운터 + 1 ; 사이클의 끝; //데이터 테이블의 각 열 TK에 대해 열 주기 //마지막 쉼표를 잘라냅니다.필드 목록 = 사자 (필드 목록 , 힘길이 (필드 목록 ) - 2 ) ; //요청 테스트의 최종 구성요청 텍스트 = " 에 집어 넣다" + 설명테이블 . 테이블 이름 + " 가치 (" + 필드 목록 + " ) " ; . 명령텍스트 = 요청 텍스트 ; //데이터베이스에 데이터 쓰기(쿼리 실행) 시도. 실행하다() ; 예외신고하기 (" 데이터 쓰기 오류!" + 기호 . 추신 + " 요청 텍스트:" + 요청 텍스트 + 기호 . 추신 + 설명오류 () ) ; 반품 - 2 ; 시도 종료; 사이클의 끝; //데이터 사이클의 각 LineTK에 대해 //연결을 닫는다. 액티브커넥션 . 닫다 () ; = 한정되지 않은; 커넥터 = 한정되지 않은; 반품 0 ; EndFunction

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

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

데이터베이스 작업을 위해 이미 우리에게 친숙한 연결이 생성됩니다. 연결되면 SQL 명령 실행을 담당하는 개체를 만듭니다. 다음으로 값 테이블의 행(함수 매개변수 2번)을 통한 루프와 테이블의 열을 통한 중첩 루프를 구성합니다. 행 카운터는 행을 인덱싱하는 데 사용됩니다. 열 카운터는 테이블 설명 구조(매개변수 번호 3)에서 필드 설명을 검색하는 데 사용됩니다. 다음 행의 열을 살펴보면서 테이블 설명에 따라 해당 유형을 분석하고 적절한 변환을 수행합니다. 결과적으로 우리는 데이터베이스에 한 줄을 쓰기 위한 미리 만들어진 sql 명령을 갖게 되었습니다. ADODB.Command 개체를 사용하여 수신된 SQL 명령을 적용합니다. 프로세스가 끝나면 연결을 닫고 메모리를 지우십시오.

불행하게도 이 사이트에서는 액세스 데이터베이스에 모든 디렉터리를 업로드할 수 있는 씩(thick) 클라이언트에 대한 처리를 첨부할 수 없었습니다. 하지만 Yandex 디스크에 다운로드할 수 있습니다. http://yadi.sk/d/UzK_PAsJ3vjTS. 이 처리에는 범용 언로드 메커니즘의 모든 부분이 포함됩니다. 물론 이 메커니즘은 이러한 처리에만 국한되지 않습니다. 다음과 같이 안전하게 복사할 수 있습니다. 별도의 모듈, 그리고 처리 중입니다. 업로드 실패로 이어질 수 있는 잘못된 상황을 배제하지는 않지만, 이는 상업적인 프로젝트가 아닙니다. 자유롭게 수정하실 수 있습니다. 이 메커니즘귀하의 필요에 맞게. 다음은 adox 상수를 설명하는 2개의 부록입니다. 이 메커니즘이 여러분에게 도움이 되기를 바랍니다. 나는 당신의 직업 경력에서 성공을 기원합니다!

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

자동 증가

레코드가 추가되면 값이 자동으로 증가하는 "카운터"로 필드 유형을 설정합니다.

기본

기본 필드 값.

설명

필드에 대한 설명입니다.

고정 길이

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

증가

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

널 입력 가능

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

씨앗

"counter" 유형 필드에 대한 첫 번째 레코드의 카운트다운이 시작되는 값입니다.

Jet OLEDB:0 길이 허용

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

Jet OLEDB:자동 생성

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

Jet OLEDB:열 유효성 검사 규칙

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

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

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

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

Microsoft Jet가 디스크에 쓸 때 UNICODE 문자열을 압축할지 여부를 결정합니다. 데이터베이스가 없으면 무시됩니다. 마이크로소프트 형식제트 버전 4.0.

Jet OLEDB:하이퍼링크

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

Jet OLEDB:IISAM이 마지막 열이 아님

Installable-ISAM의 경우 이 속성은 이 항목 이후에 테이블에 추가될 열이 더 있음을 I-ISAM에 알립니다. ITableDefinition::AddColumn 또는 ITableDefinition::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. 처리 양식

이 시점에서 우리는 폼 디자인이 준비되었다고 가정할 수 있습니다. 열을 수동으로 생성하지 않고 이 절차를 동적으로 수행합니다. 다행히도 어렵지 않습니다. "실행" 버튼에 대한 "클릭 시" 이벤트 핸들러를 만들고 여기에 다음 코드를 작성합니다.

//테이블 필드 지우기 TableField1.Clear(); TableField1.Columns.Clear(); //MS Access용 연결 문자열 준비 //데이터베이스 경로는 맨 끝에 표시됩니다. Connection string = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+"C:\mydb.mdb"; ConnectionWithBase = New COMObject("ADODB.Connection"); //ConnectionWithBase.Open(ConnectionString); //테이블에서 레코드 세트 가져오기 deco_table Record Collection = New COMObject("ADODB.Recordset"); RecordsCollection.Open("demo_table에서 * 선택", DatabaseConnection, 1); //테이블 필드의 구조 읽기 //값 테이블에서 액세스 테이블에 있는 모든 열을 만듭니다. For count = 0 by Records Collection.Fields.Count - 1 Cycle TableField1.Columns.Add("Column" + count, Row(Records Collection .Fields.Item(count).Name)); EndCycle; //마커를 첫 번째 레코드로 이동RecordsCollection.MoveFirst(); //테이블에서 데이터를 읽고 //ToR에 추가합니다. Not YetRecordsCollection.EOF Cycle NewRow = TableField1.Add(); For count = 0 by RecordsCollection.Fields.Count - 1 Cycle NewLine["Column" + count] = RecordsCollection.fields(TableField1.Columns[count].Header).Value ; EndCycle; RecordsCollection.MoveNext(); 주기 끝; //TableFieldFormElements.TableField1.Value = TableField1;FormElements.TableField1.CreateColumns()의 사양에서 데이터 표시;

코드는 너무 크지는 않지만 매우 유용하다는 것이 밝혀졌습니다. 특정 구조에 대한 바인딩을 만들지 않았습니다. 이 코드는 다양한 테이블에서 훌륭하게 작동합니다. 더 이상 덧붙일 말이 없으니 이만 인사할게요

한마디로 - 절대 안돼. 정부 기관과의 상호 작용과 관련된 모든 것(세금, 회계 보고, 모든 종류의 소비세 등)에서 1C는 무엇으로도 대체할 수 없으며 이를 시도하는 것은 적어도 건설적이지 않습니다.

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

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

반면 1C-Enterprise 프로그램은 회계 및 회계 기록을 유지하고 보고서를 제출하기 위한 회계 부서의 요구 사항만 충족했습니다. 따라서 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 기능을 최대한 활용하는 것"이었습니다. 따라서 번들의 최종 구현에서는 상대방의 이름과 TIN만 MS Access에서 로드되었습니다. 데이터는 1C에 내장된 메커니즘을 사용하여 법인체 및 개인 기업가의 통합 국가 등록부에서 "가져왔습니다". 동일하게 적용됩니다 은행 계좌 정보– BIC를 사용하여 업데이트됩니다.

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

언로드 방식은 두 단계로 구성됩니다. 먼저, 상대방 및 품목 디렉토리의 새 위치가 로드됩니다. 1C에 할당된 GUID는 MS Access로 반환되므로 두 번째 단계에서 모든 문서를 업로드할 때 디렉터리에 대한 올바른 참조를 설정할 수 있습니다. 다음과 같습니다

우리는 이러한 건축 이념이 정보 시스템레거시 비-1C 시스템이 있는 회사뿐만 아니라 새로운 작업을 구성할 때도 기초로 삼을 수 있습니다. 법인, 왜냐하면 우리는 MS Access에 대한 많은 경험을 갖고 있기 때문입니다. 이 접근 방식의 장점은 위에 설명되어 있습니다.

이 기사에서는 1C 시스템 개체에 대한 사용자 액세스 권한을 설정하는 방법에 대해 설명합니다.

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

메모! 이 글은 프로그래머들에게 도움을 주기 위해 작성되었습니다. 1C 회계의 예를 사용하여 사용자 모드에서 권한 설정에 대해 설명합니다.

역할은 사용자가 갖는 권한 집합을 정의합니다. 역할 메커니즘은 Windows 권한 메커니즘과 매우 유사합니다. 액티브 디렉토리. 각 객체(디렉터리, 문서)에 대해 개발자는 읽기/쓰기/추가/변경/... 등 자신만의 권한 세트를 설정합니다.

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

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

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

우리는 탭만 고려할 것입니다 진상.

  • 사물— 권한이 설정될 목록입니다.
  • 진상— 설정에 가능한 권한 설정 목록입니다.
  • 데이터에 대한 액세스 제한— 사용자 정의를 위한 역할 필드

하단의 체크박스에 주의하세요:

  • 새 개체에 대한 권한 설정— 역할에 대해 플래그가 설정된 경우 새 메타데이터 개체에 허용 권한이 자동으로 설정됩니다. 새 개체에 대한 권한 설정을 자주 잊어버린다면 설치하는 것이 좋습니다.
  • 세부정보에 대한 권한 설정 및 표 부분기본— 플래그가 설정되면 세부 정보 및 표 형식 부분이 소유자(디렉토리, 문서 등)의 권한을 상속합니다.
  • 하위 개체의 독립적 권한— 플래그가 설정된 경우 시스템은 구성 개체에 대한 권한을 결정할 때 상위 개체에 대한 권한을 고려합니다.

전체 구성에 대한 권한 설정

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

각각에 대한 자세한 내용 전체 구성에 대한 권한:

1C에서 267개의 비디오 강의를 무료로 받으세요:

  • 관리- 관리 정보 베이스(“데이터 관리” 권한이 필요합니다)
  • 데이터 관리— 데이터에 대한 관리 조치에 대한 권리
  • 데이터베이스 구성 업데이트- 권리
  • 독점 모드— 독점 모드 사용
  • 활성 사용자— 활성 사용자 목록 보기
  • — 일지
  • - 오른쪽으로 발사 씬 클라이언트
  • - 웹 클라이언트를 시작할 수 있는 권한
  • 뚱뚱한 고객— 씩(thick) 클라이언트를 실행하는 역할을 담당합니다.
  • 외부 조인— 외부 연결을 시작할 수 있는 권한
  • 오토메이션— 자동화를 사용할 권리
  • 모든 기능 모드— 관리형 애플리케이션 모드에서
  • 사용자 데이터 저장— 사용자 데이터(설정, 즐겨찾기, 기록) 저장에 대한 허가 또는 금지. 이는 특히 1C 관리 양식에 해당됩니다.
  • 대화형 검색 외부 치료 — 외부 처리 열기
  • 외부 보고서의 대화형 열기— 외부 보고서 열기
  • 결론— 클립보드에 인쇄, 녹음 및 복사

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

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

  • 독서- 독서 (소프트웨어)
  • 덧셈- 추가 (소프트웨어)
  • 변화- 변경 (소프트웨어)
  • 제거- 제거(소프트웨어)
  • 보다- 보다
  • 대화형 추가- 대화형 추가
  • 편집— 편집
  • 대화형 삭제 플래그— 삭제를 위한 대화형 표시
  • 대화형으로 삭제 표시 해제— 삭제 표시 해제
  • 표시된 항목의 대화형 제거— 표시된 객체 삭제
  • 라인 입력— 라인 입력 모드 사용
  • 대화형 제거— 직접 삭제(shift +del)

다음에 대해서만 권리 서류:

  • 대화형 지휘— 수행
  • 해제— 서류 취소
  • 비수술적 대화형 수행— 비작동 모드에서 문서를 보관(표준 형식 명령 사용)
  • 대화형 취소— 대화형 취소
  • 지출액의 대화형 변경— 게시된 문서를 편집합니다. 역할 권한이 설정되지 않은 경우 게시된 문서의 삭제, 삭제 표시 설정, 재전송, 게시 취소가 불가능합니다. 해당 문서의 형식은 보기 모드로 열립니다.

추신여전히 사용자 역할을 파악할 수 없는 경우 주문할 수 있습니다.
1C Accounting 3.0에서 권한 설정 예가 포함된 비디오:

공유하다