PDA

View Full Version : چند سوال در مورد Pack



رضا عربلو
دوشنبه 25 اسفند 1382, 12:31 عصر
با سلام.
حتماً اساتید گرامی تا به حال با pack کردن بانک های پارادکس خود با الگوریتمی شبیه به زیر پرداخته اند.
(می بخشید من سیستم نامگذاری دراز اما کارای خودم را دارم)

procedure Procedure_ParadoxPack(Table_Paradox : TTable);
var
CRTblDesc_TBDesc : CRTblDesc; // Uses BDE
hDbiDb_hDb : hDbiDb; // Uses BDE
CharArray_TablePath : array[0..DBIMAXPATHLEN] of char;
begin
FillChar(CRTblDesc_TBDesc, SizeOf(CRTblDesc_TBDesc), 0);
with CRTblDesc_TBDesc do
begin
StrPCopy(szTblName, Table_Paradox.TableName);
StrPCopy(szTblType, szPARADOX);
bPack := True;
end;
Table_Paradox.Open;
hDbiDb_hDb := nil;
Check(DbiGetDirectory(Table_Paradox.DBHandle, True, CharArray_TablePath));
Table_Paradox.Close;
Check(DbiOpenDatabase(nil, 'STANDARD', dbiREADWRITE, dbiOPENEXCL, nil, 0, nil, nil, hDbiDb_hDb));
Check(DbiSetDirectory(hDbiDb_hDb, CharArray_TablePath));
Check(DbiDoRestructure(hDbiDb_hDb, 1, @CRTblDesc_TBDesc, nil, nil, nil, False));
Table_Paradox.Open;
Table_Paradox.Close; {// I added}
end;

حال سوال های من به قرار زیر است.
1 - چگونه می توانم در حین انجام pack برای اینکه کاربر حوصله اش سر نرود و در ضمن از مدت زمان لازم برای انجام این دستور و میزان ÷یشرفت دقیق این عمل اگاه شود position یک progressbar را مقدار داد.
2 - وقتیکه دستور فوق را به یک بانک پارادکس بزرگ می زنم. برنامه بسیار کند می شود چگونه می توانم. بلافاصله بعد از دستور فوق دوباره درایورهای بانک الاعاتی را در حافظه لود کنم تا سرعت برنامه از دست نرود.

شفیعی
سه شنبه 26 اسفند 1382, 18:24 عصر
سلام
برای فشرده سازی یک جدول از نوع پاراداکس می توانید از کد زیر استفاده کنید


procedure PARADOXPACK(TABLE:TTABLE);
VAR
TBDESC:CRTBLDESC;
HDB:HDBIDB;
TABLEPATH:ARRAY[0..DBIMAXPATHLEN] OF CHAR;
BEGIN
FillChar(TBDESC,SIZEOF(TBDESC),0);
WITH TBDESC DO BEGIN
StrPCopy(SZTBLNAME,TABLE.TableName);
STRPCOPY(SZTBLTYPE,SZPARADOX);
BPACK:=TRUE;
END;
TABLE.Open;
HDB:=NIL;
Check(DBIGETDIRECTORY(TABLE.DBHANDLE,TRUE,TABLEPAT H));
TABLE.Close;
CHECK(DBIOPENDATABASE(NIL,'STANDARD',DBIREADWRITE, DBIOPENEXCL,NIL,0,NIL,HDB));
CHECK(DBISETDIRECTORY(HDB,TABLEPATH));
Check(DBIDORESTRUCTURE(HDB,1,@TBDESC,NIL,NIL,NIL,F ALSE));
TABLE.Open;
END;

برای فشرده سازی جداول نوع DBASE از دستور زیر استفاده نمایید


DBIPACKTABLE(TABLE1.DBHANDLE,TABLE1.HANDLE,NIL,NIL ,TRUE);





نقل از کتاب 296 برنامه اجرا شده در دلفی 6 ( نویسنده : حسین ریاضی )

رضا عربلو
چهارشنبه 27 اسفند 1382, 01:53 صبح
با سلام
این جواب من نیست. :shock:

این پروسیجر را من هم از کتاب 296 برنامه اجرا شده در دلفی 6 پیدا کرده ام و برای ان افرادی که کتاب فوق را نتوانسته ان تهیه کنند نوشته ام. 8)

JavanSoft
پنج شنبه 28 اسفند 1382, 16:43 عصر
1) اگر واقعا به حوصله کاربرانتون علاقه مندید می تونید با نوشتن یک Thread زمان تخمینی مانده را نمایش دهید
اما من پیشنهاد می کنم بجای اینکار از یک Lable ساده استفاده کنید "لطفا کمی صبر کنید ...."(و زمان "کمی را هم قید کنید ")

2)بدلیل بافری که BDE استفاده می کند پیشنهاد می کنم اصلا اینکار را نکنید