2009-09-30 9 views
5

मेरे पास एक डेल्फी 4 प्रोग्राम था जिसे मैंने कई साल पहले विकसित किया था जो अनुक्रमिक रूप से माइक्रोसॉफ्ट एक्सेस डेटाबेस के माध्यम से खोज करने और इच्छित रिकॉर्ड्स पुनर्प्राप्त करने के लिए Opus DirectAccess का उपयोग करता था। डेल्फी 4 में एडीओ नहीं था, इसलिए मैं DirectAccess का उपयोग कर रहा था।एडीओ अगला रिकॉर्ड प्रसंस्करण क्यों डेल्फी में धीमा हो जाता है?

लेकिन अब मैं डेल्फी 200 9 में अपग्रेड कर चुका हूं और कार्यक्रम को एडीओ का उपयोग करने के लिए परिवर्तित कर चुका हूं। मुझे जो मिला वह था कि तालिका के माध्यम से लूप (कुछ 100,000 रिकॉर्ड) डायरेक्टएप में जितनी तेजी से शुरू होता है, लेकिन फिर यह धीमा हो जाता है और धीमा और धीमा हो जाता है क्योंकि यह तालिका के माध्यम से जाता है। मूल लूप है:

ArticlesTable.First; 
while not Cancel and not ArticlesTable.Eof do begin 

    (See if the current record has criteria desired) 
    (If so, process the record) 

    ArticlesTable.Next; 
end; 

तो मूल रूप से, यह केवल .Next विधि का उपयोग कर रिकॉर्ड को संसाधित कर रहा है।

तो यह धीमा क्यों हो रहा है, और मैं इसे कैसे रिकोड कर सकता हूं ताकि यह धीमा न हो जाए?

उत्तर

10

यदि आप डेटासेट पर डीबी जागरूक नियंत्रण का उपयोग नहीं कर रहे हैं तो आपको सभी एडीओ डेटासेट पर DisableControls को कॉल करना चाहिए।

अन्यथा गति बेकार हो जाती है।

विवरण के लिए this article देखें।

वैकल्पिक रूप से, आंतरिक ADO recordset संपत्ति

while Not ADOQuery1.Recordset.EOF do 
begin 
    ADOQuery1.Recordset.Movenext; 
end; 
+0

"ArticleTable.DisableControls" जोड़ना "ArticleTable.First;" से पहले समस्या तय की। उत्तम! आपको बहुत - बहुत धन्यवाद! – lkessler

1

साथ ही उपयोग करते हैं, तो आपको अपने पहुँच घटक के CursorType संपत्ति को बदल सकते हैं (TADOTable/TADOQuery/...)।

प्रदर्शन को लागू करने के लिए ctOpenForwardOnly आज़माएं; यह संभव है कि आपको डी डीबीग्रीड को डिस्कनेक्ट करने की आवश्यकता हो (यदि आपने एक को पहचाना है) और लूप से बाहर निकलने पर पुनः कनेक्ट करें।

सम्मान।

+0

मैंने कोशिश की कि जब मैं प्रश्न पूछने से पहले समस्या को ठीक करने की कोशिश कर रहा था। लेकिन इसका कोई उल्लेखनीय प्रभाव नहीं पड़ा। – lkessler

संबंधित मुद्दे