2008-12-18 12 views
5

मैं एक TClientDataSet क्लोन कर रहा हूं और मैं क्लोन में सभी फ़ील्ड कॉपी करना चाहता हूं (जो एक नया डेटासेट है), मुझे पता है कि मैं फ़ील्ड के माध्यम से लूप कर सकता हूं और जानकारी कॉपी कर सकता हूं, या अपनी कक्षा के 2 उदाहरण बना सकता हूं और क्लोन कर सकता हूं कर्सर, लेकिन क्या कोई बेहतर तरीका है? कुछ नया डेटासेट बनाने और फ़ील्ड जानकारी असाइन करने की तरह कुछ?क्या सभी डेटासेट फ़ील्ड और उनकी गुणों को किसी अन्य डेटासेट में कॉपी करने का कोई बेहतर तरीका है?

संपादित करें:

निम्नलिखित वर्ग सहायक विधि मेरे लिए काम करता है:

procedure TDataSetHelper.CopyFieldDefs(Source: TDataSet); 
var 
    Field, NewField: TField; 
    FieldDef: TFieldDef; 
begin 
    for Field in Source.Fields do 
    begin 
    FieldDef := FieldDefs.AddFieldDef; 
    FieldDef.DataType := Field.DataType; 
    FieldDef.Size := Field.Size; 
    FieldDef.Name := Field.FieldName; 

    NewField := FieldDef.CreateField(Self); 
    NewField.Visible := Field.Visible; 
    NewField.DisplayLabel := Field.DisplayLabel; 
    NewField.DisplayWidth := Field.DisplayWidth; 
    NewField.EditMask := Field.EditMask; 

    if IsPublishedProp(Field, 'currency') then 
    SetPropValue(NewField, 'currency', GetPropValue(Field, 'currency')); 

    end; 
end; 

किसी को भी ऐसा करने के लिए एक बेहतर तरीका है?

उत्तर

4

क्या आप इसे करने का एक और सौंदर्य तरीका ढूंढ रहे हैं या इसे करने का एक तेज तरीका ढूंढ रहे हैं?

यदि पूर्व, लूप को छुपाने वाले अपने स्वयं के वर्ग बनाएं।

यदि उत्तरार्द्ध, इसके बारे में भी चिंता न करें। एक बहुत बुद्धिमान कोडर ने मुझे एक बार कहा: डिस्क एक्सेस लागत; नेटवर्क पहुंच लागत; शायद स्क्रीन एक्सेस लागत; बाकी सब कुछ मुफ्त है।

निष्पादन समय के साथ स्रोत कोड के आकार को भ्रमित न करें। स्मृति कनेक्शन के माध्यम से एक हज़ार बार लूपिंग और बिट्स की प्रतिलिपि डेटाबेस कनेक्शन के प्रारंभिक हैंडशेक की तुलना में ज्ञानी नहीं है।

चीयर्स

1

क्लोन कर्सर आपके लिए काम करेगा?

7

तुम सिर्फ क्षेत्र परिभाषाओं आप निम्न कर सकते नकल करना चाहते हैं:

ds2.FieldDefs.Assign(ds1.FieldDefs); 
ds2.CreateDataSet; 
ds2.Open; 

बेशक यह आप DS1 के लिए FieldDefs बनाई मान लिया गया है।

+0

यह अपेक्षा नहीं करता था जैसा कि मैंने उम्मीद की थी, "मुद्रा" जैसी कुछ संपत्तियों को नए डेटासेट में कॉपी नहीं किया गया था, मैं क्लोन डेटासेट में सभी फ़ील्ड की सेटिंग्स रखना चाहता हूं। –

2

आप डाटासेट लूप करने के लिए जा रहे हैं एक प्रतिलिपि बनाने के लिए, इससे पहले कि उस पर DisableControls कॉल करने के लिए याद है, और EnableControl बाद में।

इसके बिना, चीजें वास्तव में धीमी हो सकती हैं यदि आपके पास अपने फॉर्म पर डेटासेट के डेटा को दिखाए गए दृश्य नियंत्रण हैं।

-2

गैर-प्रोग्रामेबल विधि

  • पहले tclientdataset: खुले क्षेत्रों संपादक। यदि पहले से नहीं दिखाया गया है तो सभी फ़ील्ड जोड़ें। सभी क्षेत्रों का चयन करें। क्लिपबोर्ड पर कॉपी करें।

  • दूसरा tclientdataset: खुले फ़ील्ड संपादक। फ़ील्ड संपादक में क्लिपबोर्ड पेस्ट करें। किया

अब आप दोनों tclientdatasets के लिए समान fieldDefs देखना चाहिए।

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