프로그램 실행중에 똑같은 DB를 생성해야하는데 필드형식하고 레코드값은 똑같이 생성이 되지만 인덱스는 복사가 되지 않습니다.
BatchMove 컴포넌트를 사용하면 된다고 책에 기입이 되어 있어서 아래와 같이 코딩을 했습니다. 먼저 Table1에는 복사할 DB를 연결하고, Table2에는 복사될 위치와 파일명을 실행시에 입력하도록 했습니다.
Batchmove1의 Source 속성에는 Table1을 Destination속성에는 Table2를 입력하고
Batchmove1의 Move속성값은 batCopy와 batAppend를 번갈아 가며 해보았습니다.
Procedure TForm.Button1Click(Sender:TObject);
begin
Table2.Databasename:='엘리어스명';
Table2.Tablename:='파일명';
Table2.FieldDefs:=Table1.FieldDefs;
Table2.IndexDefs.Assign(Table1.IndexDefs);
Table2.CreateTable;
Table2.Open;
BatchMove1.Execute;
end;
무엇이 잘못된건지 잘 모르겠습니다. 위의 방법이 인덱스까지 복사할 수 없다면 다른방법좀 알려주십시요. 오늘 하루 종일 붙잡고 이책저책 찾아보느라 정말 힘들었습니다.
아시는 분께서 알려주시면 정말 고맙겠습니다.
그럼 이만....
> 프로그램 실행중에 똑같은 DB를 생성해야하는데 필드형식하고 레코드값은 똑같이 생성이 되지만 인덱스는 복사가 되지 않습니다.
>
> BatchMove 컴포넌트를 사용하면 된다고 책에 기입이 되어 있어서 아래와 같이 코딩을 했습니다. 먼저 Table1에는 복사할 DB를 연결하고, Table2에는 복사될 위치와 파일명을 실행시에 입력하도록 했습니다.
> Batchmove1의 Source 속성에는 Table1을 Destination속성에는 Table2를 입력하고
> Batchmove1의 Move속성값은 batCopy와 batAppend를 번갈아 가며 해보았습니다.
>
> Procedure TForm.Button1Click(Sender:TObject);
> begin
>
> Table2.Databasename:='엘리어스명';
> Table2.Tablename:='파일명';
>
> Table2.FieldDefs:=Table1.FieldDefs;
> Table2.IndexDefs.Assign(Table1.IndexDefs);
> Table2.CreateTable;
> Table2.Open;
> BatchMove1.Execute;
>
> end;
>
> 무엇이 잘못된건지 잘 모르겠습니다. 위의 방법이 인덱스까지 복사할 수 없다면 다른방법좀 알려주십시요. 오늘 하루 종일 붙잡고 이책저책 찾아보느라 정말 힘들었습니다.
> 아시는 분께서 알려주시면 정말 고맙겠습니다.
> 그럼 이만....
말씀하신 것처럼 TBatchMove 는 index 를 복사해주지 않습니다
그대신 BDE 함수인 DbiCopyTable() 를 사용해 보세요
그리고 index가 깨졌는지 의심이 가시면 아래처럼 index를 다시 만들어 보세요
Table.Open;
Check(DBIRegenIndexes(Table.Handle));
Table.Close;