首页  ç¼–辑  

用Dephi程�维护Paradox数�表的索引

ÔÚÊý¾Ý¿â±à³ÌÖÐ,Ë÷ÒýÎļþ¶ÔÓÚ¸ÄÉÆÊý¾Ý²éѯËÙ¶ÈÓÐמÙ×ãÇáÖØµÄ×÷ÓÃ,³ä·ÖʹÓÃË÷ÒýÎļþ¿ÉÒÔ¼«´ó¸ÄÉÆÊý¾Ý¿âÓ¦ÓóÌÐòµÄÐÔÄÜ,ÕâÒ»µã¿ÖÅÂÊÇÄÑÒÔ·ñÈϵÄ.ÔÚÓ¦Óùý³ÌÖÐ,Óû§µÄ²éѯÌõ¼þ¿ÉÄÜÊǶàÖÖ¶àÑùµÄ,Èç¹ûÄܸù¾ÝÓû§²éѯ½¨Á¢ºÍÑ¡ÔñË÷Òý,¶ÔÓÚ±£Ö¤Ó¦ÓóÌÐòµÄÐÔÄÜ,ÎÞÒÉÊǺÜÓаïÖúµÄ.ÁíÍâ,ÓÉÓÚÍ£µçµÈÒâÍâʹʺÜÈÝÒ×Ôì³ÉÊý¾Ý¿âÖеÄË÷ÒýÎļþδ¼°Ê±¸üÐÂÉõÖÁÓÚËð»µ,´ËʱÈç¹ûÓ¦ÓóÌÐòÔÙ³ö¼¸¸ö´íÎóÐÅÏ¢,ÎÞÒɽ«Ê¹Óû§µÄ´¦¾³Ñ©ÉϼÓ˪.Òò¶ø,¶¯Ì¬Î¬»¤Êý¾Ý¿âË÷ÒýÎļþ,½«Ê¹ÄãµÄÊý¾Ý¿âÓ¦ÓóÌÐò¸üÓÐÎȶ¨ÐԺͿɿ¿ÐÔ.

±ÊÕß½«ÒÔDelphi±à³ÌÖг£ÓõÄParadoxÊý¾Ý¿âΪÀý,½éÉÜÊý¾Ý¿âË÷ÒýÎļþµÄ¶¯Ì¬Î¬»¤.

ParadoxÊý¾Ý±íË÷Òý·ÖΪÖ÷Ë÷Òý(Primary Index)¼´¹Ø¼ü×Ö(Primary Key)Ë÷ÒýºÍ´ÎË÷Òý(Secondary Index),ÆäÖÐÖ÷Ë÷Òý¶ÔÓ¦.PXÎļþ,´ÎË÷Òý¶ÔÓ¦.XG*ºÍ.YG*Îļþ.

Ò». ´´½¨±íË÷Òý

(1)ÓÃTable.AddIndexÀ´ÊµÏÖ

·½·¨:AddIndex( IndexName,FieldNames,Options )

ÆäÖÐ:(Ïê¼ûDelphi°ïÖú)

IndexName:Ë÷ÒýÃû³Æ,½öÔÚÖ¸¶¨´ÎË÷ÒýʱÓÐ×÷ÓÃ.

FieldNames:Ë÷ÒýÓò,¿ÉÖ¸¶¨¶à¸öÓò,¸÷ÓòÖ®¼äÓ÷ֺŸô¿ª,Èç'Field1;Field2;Field3'

Options:Ë÷ÒýÑ¡Ïî,¿ÉΪ[ixPrimary,ixUnique,ixDescending,ixCaseInsensitive,ixExpression]

ÆäÖÐ:

ixPrimary : ½¨Á¢µÄË÷ÒýΪÖ÷Ë÷Òý(²»ÊÊÓÃÓÚdBaseÊý¾Ý±í).

ixUnique : ²»ÔÊÐíÖØ¸´ÖµµÄË÷Òý.

ixDescending: °´½µÐòË÷Òý.

ixCaseInsensitive: Ë÷ÒýÅÅÐòʱ°´ºöÂÔ´óСд(²»ÊÊÓÃÓÚdBaseÊý¾Ý±í).

ixExpression: ½¨Á¢±í´ïʽË÷Òý(ÊÊÓÃÓÚDelphi3.0,½öÊÊÓÃÓÚdBaseÊý¾Ý±í).

ixNonMaintained: ÊÇ·ñ²»ÐèÒªBDE×Ô¶¯Î¬»¤(ÊÊÓÃÓÚDelphi1.0).

ÏÂÃæÊÇÒ»¸öÀý×Ó:

¼ÙÉèÓÐÒ»¸ö´æ·ÅͨѶ¼Êý¾Ý±íMyComm.DB(ÀàÐÍΪParadox)´æ·ÅÓÚ±¾µØÄ¿Â¼d:\mynoteÏÂ,ÏÖ½¨Á¢Ò»¸öÖ÷Ë÷Òý(Ë÷ÒýÓòΪ±àºÅID)ºÍÒ»¸ö´ÎË÷Òý(Ë÷ÒýÓòΪ±àºÅIDºÍÐÕÃûName,Ë÷ÒýÃû³ÆÎªNameIndex).

with table1 do

begin

close;

Exclusive := true;

DatabaseName := 'd:\MyNote';

TableName := 'MyComm.DB';

Open;

{ ½¨Á¢Ö÷Ë÷Òý }

AddIndex('','ID',[ixPrimary]);

{ ½¨Á¢´ÎË÷Òý }

AddIndex('NameIndex','ID;Name',[]);

close;

end;

(2)ÓÃSQLÀ´ÊµÏÖ

¶ÔParadoxÊý¾Ý±íÀ´Ëµ,ÓÃSQLÖ»Äܽ¨Á¢´ÎË÷Òý.ÔÚSQLÓï·¨ÖÐ,ÓÃÀ´½¨Á¢Ë÷ÒýµÄÓï¾äÊÇ:

Create Index IndexName On TableName(IndexField1,IndexField2,..)

ÆäÖÐ:

IndexNameΪһ¸ö´ÎË÷ÒýµÄÃû³Æ,ÈçMySecIndex1µÈ.

TableNameΪ¶ÔÓ¦Êý¾Ý±íµÄÃû³Æ,ÈçMyTableµÈ.

TableNameºóÃæÎªË÷ÒýÓòÁбí,ËùÓÐË÷ÒýÓòÓÐÔ²À¨ºÅÀ¨ÆðÀ´,¸÷Ë÷ÒýÓòÖ®¼äÓöººÅ¸ô¿ª.

ÏÂÃæÊÇÒ»¸öÀý×Ó:

¼ÙÉèÓÐÒ»¸ö´æ·ÅͨѶ¼Êý¾Ý±íMyComm.DB(ÀàÐÍΪParadox)´æ·ÅÓÚ±¾µØÄ¿Â¼d:\mynoteÏÂ,ÏÖ½¨Á¢Ò»¸ö´ÎË÷Òý(Ë÷ÒýÓòΪ±àºÅIDºÍÐÕÃûName,Ë÷ÒýÃû³ÆÎªNameIndex).

with query1 do

begin

close;

DatabaseName := 'd:\MyNote';

{ ½¨Á¢´ÎË÷ÒýNameIndex }

sql.clear;

sql.add( 'Create Index NameIndex On MyComm(ID,Name)' );

execSql;

end;

¶þ. ɾ³ý±íË÷Òý

(1)ÓÃTable.DeleteIndexÀ´ÊµÏÖ

DeleteIndexÖ»ÄÜɾ³ý´ÎË÷ÒýÃû³Æ.

·½·¨:DeleteIndex( IndexName )

ÆäÖÐ:(Ïê¼ûDelphi°ïÖú)

IndexName:´ÎË÷ÒýÃû³Æ.

ÏÂÃæÊÇÒ»¸öÀý×Ó:

¼ÙÉèÓÐÒ»¸ö´æ·ÅͨѶ¼Êý¾Ý±íMyComm.DB(ÀàÐÍΪParadox)´æ·ÅÓÚ±¾µØÄ¿Â¼d:\mynoteÏÂ,ÏÖÓÐÒ»¸ö´ÎË÷Òý(Ë÷ÒýÓòΪ±àºÅIDºÍÐÕÃûName,Ë÷ÒýÃû³ÆÎªNameIndex),½«É¾³ýÖ®.

with table1 do

begin

close;

Exclusive := true;

DatabaseName := 'd:\MyNote';

TableName := 'MyComm.DB';

Open;

{ ɾ³ý´ÎË÷Òý }

DeleteIndex('NameIndex');

close;

end;

(2)ÓÃSQLÀ´ÊµÏÖ

ÔÚSQLÓï·¨ÖÐ,ÓÃÀ´É¾³ýË÷ÒýµÄÓï¾äÊÇ:

Drop Index TableName.IndexName

Ҫɾ³ý´ÎË÷Òýʱ,IndexNameΪһ¸ö´ÎË÷ÒýµÄÃû³Æ,Èç'MyTable.MySecIndex1'µÈ.

Ҫɾ³ýÖ÷Ë÷Òýʱ,IndexNameΪ'primary',Èç'MyTable.primary';ÖµµÃ×¢ÒâµÄÊÇ,

ÔÚɾ³ýÖ÷Ë÷Òý³É¹¦ºó,Êý¾Ý±íµÄËùÓдÎË÷ÒýÒ²×Ô¶¯É¾³ý.

ÏÂÃæÊÇÒ»¸öÀý×Ó:

¼ÙÉèÓÐÒ»¸ö´æ·ÅͨѶ¼Êý¾Ý±íMyComm.DB(ÀàÐÍΪParadox)´æ·ÅÓÚ±¾µØÄ¿Â¼d:\mynoteÏÂ,ÒѶ¨ÒåÒ»¸öÖ÷Ë÷Òý(Ë÷ÒýÓòΪ±àºÅID)ºÍÒ»¸ö´ÎË÷Òý(Ë÷ÒýÓòΪ±àºÅIDºÍÐÕÃûName,Ë÷ÒýÃû³ÆÎªNameIndex).ÏÖÔÚÒòΪË÷ÒýËð»µ,Ҫɾ³ýË÷Òý,ÒÔ±ãÖØÐÂË÷Òý.

with query1 do

begin

close;

DatabaseName := 'd:\MyNote';

{ ɾ³ý´ÎË÷ÒýNameIndex }

sql.clear;

sql.add( 'Drop Index MyComm.NameIndex' );

execSql;

{ ɾ³ýÖ÷Ë÷Òý }

sql.clear;

sql.add( 'Drop Index MyComm.Primary' );

execSql;

end;

Èý. ×¢ÒâÊÂÏî:

(1) ÔÚË÷Òý¸ü¸Äʱ,Ó¦±£Ö¤¶ÔÓ¦µÄÊý¾Ý±í¿ÉÒÔÒÔ¶ÀÕ¼·½Ê½(Exclusive=true)´ò¿ª,·ñÔò»áÒýÆð´íÎó.

(2) ÉÏÊö·½·¨ÂÔ¼ÓÐ޸ĺó,Ò²¿ÉÓÃÓÚdBase,OracleµÈÆäËüÊý¾Ý¿âµÄÊý¾Ý±í.

(3) Èç¹ûÐèÒªÖØÐ¶ÔË÷ÒýÎļþ½øÐÐË÷Òý,Çë²Î¿¼BDEµÄDbiº¯Êý˵Ã÷:RegenIndex, RegenIndexes.

(4) ÒÔÉϳÌÐòÔÚDelphi3.0ϲâÊÔͨ¹ý