임시로 사용한 테이블을 다시 NULL Table(?, 아무 데이터도 없는)로
만들려고 합니다. 근데 프로그램 내에서 레코드를 일일이 지우면
자료는 삭제 되는데, 실제 DB의 크기는 그대로 입니다.
델파이에 포함된 Database Desktop의 utility의 'Empty'를 사용하면
테이블이 처음 만든것처럼 크기도 줄어들고 데이터도 날라가는데
프로그램 내에서 SQL을 사용하던 함수를 쓰던,
그런 효과를 줄 수 있는 방법이 있나요???
무지 궁금하네요....
고수님들의 조언 부탁드립니다.
그리고, 미리 감사합니다.(꾸벅)
> 임시로 사용한 테이블을 다시 NULL Table(?, 아무 데이터도 없는)로
> 만들려고 합니다. 근데 프로그램 내에서 레코드를 일일이 지우면
> 자료는 삭제 되는데, 실제 DB의 크기는 그대로 입니다.
> 델파이에 포함된 Database Desktop의 utility의 'Empty'를 사용하면
> 테이블이 처음 만든것처럼 크기도 줄어들고 데이터도 날라가는데
> 프로그램 내에서 SQL을 사용하던 함수를 쓰던,
> 그런 효과를 줄 수 있는 방법이 있나요???
> 무지 궁금하네요....
> 고수님들의 조언 부탁드립니다.
> 그리고, 미리 감사합니다.(꾸벅)
전진우님 안녕하세요?
EmptyTable 메소드를 사용해보시지 않으셨다면,
아래 그나마 안전하게 삭제하는 함수를 한번 사용해 보세요.
그리고, 말씀하신 내용이 Pack(삭제표시된 레코드를 물리적으로 삭제)
하고 싶으신 거라면 '델파이 헬퍼'의 팁/강좌란에서
'Pack'이라고 입력하셔서 검색해서 응용하시면,
원하시는 것을 구현할수 있으리라 생각되네요.
그럼.. 즐거운 프로그래밍 되세요~
procedure TForm1.EmptyTable(const DbName, TbName: string);
begin
if MessageDlg('Empty ' + TbName + ' Table? Are yousure?',
mtConfirmation, [mbYes, mbNo], 0) = mrYes then
begin
with TTable.Create(nil) do
try
DatabaseName := DbName;
TableName := TbName;
repeat
try
EmptyTable;
ShowMessage(TbName + ' Table Empty!');
exit;
except
on EDatabaseError do
begin
if MessageDlg('EmptyTable failed',mtError,
[mbAbort, mbRetry], 0) <> mrRetry then
begin
raise;
end;
end;
end;
until false;
finally
Free;
end;
end;
end;