मुझे आशा है कि आपके स्क्रीनशॉट में दिखाई गई तालिका की संरचना को देखते हुए मैं समझ गया हूँ कि आप क्या माँग रहे हैं।
नीचे दिया गया कोड दिखाता है कि किसी व्यक्ति तालिका में किसी दिए गए व्यक्ति का चयन करने के लिए शहर को प्रदर्शित करने के लिए DBLookUPComboBox कैसे सेट अप करें। मैंने TClientDataSets का उपयोग किया है ताकि यह स्व-निहित abd हो ताकि संपूर्ण सेटिंग अप ऑब्जेक्ट इंस्पेक्टर में संपत्ति सेटिंग्स के बजाय कोड में किया जा सके।
जाहिर है, DBGrid और dbNavigator dsPerson डेटा स्रोत से जुड़े हुए हैं।
कोड
TForm1 = class(TForm)
cdsCity: TClientDataSet;
cdsPerson: TClientDataSet;
dsPerson: TDataSource;
DBGrid1: TDBGrid;
DBLookupComboBox1: TDBLookupComboBox;
dsCity: TDataSource;
DBNavigator1: TDBNavigator;
procedure FormCreate(Sender: TObject);
end;
[...]
procedure TForm1.FormCreate(Sender: TObject);
var
Field : TField;
begin
Field := TIntegerField.Create(Self);
Field.FieldName := 'CityId';
Field.DataSet := cdsCity;
Field := TStringField.Create(Self);
Field.FieldName := 'City';
Field.Size := 40;
Field.DataSet := cdsCity;
cdsCity.CreateDataSet;
cdsCity.InsertRecord([3, 'Moscow']);
cdsCity.InsertRecord([4, 'Leningrad']);
Field := TIntegerField.Create(Self);
Field.FieldName := 'PersonId';
Field.DataSet := cdsPerson;
Field := TIntegerField.Create(Self);
Field.FieldName := 'CityID';
Field.DataSet := cdsPerson;
Field := TStringField.Create(Self);
Field.FieldName := 'Name';
Field.Size := 40;
Field.DataSet := cdsPerson;
cdsPerson.CreateDataSet;
cdsPerson.InsertRecord([1, 4, 'Ivan']);
cdsPerson.InsertRecord([2, 3, 'Kate']);
DBLookupComboBox1.DataField := 'CityID';
DBLookupComboBox1.DataSource := dsPerson;
DBLookupComboBox1.KeyField := 'CityID';
DBLookupComboBox1.ListField := 'City';
DBLookupComboBox1.ListSource := dsCity;
end;
ध्यान दें कि DBLookUpComboBox का उपयोग करने के बजाय (या साथ ही) आप cdsPerson डेटासेट में एक लुकअप फ़ील्ड भी परिभाषित कर सकते हैं, cdsPerson.CreateDataSet पर कॉल करने से पहले नीचे दिए गए कोड को जोड़कर। यदि आप ऐसा करते हैं, तो cdsPerson के पास एक अतिरिक्त, CityName, कॉलम होगा। यह डीबीजीड में प्रदर्शित होगा - आपको इसे देखने के लिए इसे सही स्क्रॉल करने की आवश्यकता हो सकती है - और यदि आप सिटीनाम सेल में से किसी एक में क्लिक करते हैं, तो आप देखेंगे कि यह एक इन-प्लेस, ड्रॉप-डाउन सूची को सक्रिय करता है जिससे एक शहर कर सकता है चयनित हो, जैसे
जब आप एक अलग शहर का नाम चुनते हैं, तो व्यक्ति रिकॉर्ड में सिटीआईडी स्वतः अपडेट हो जाती है।
Field := TStringField.Create(Self);
Field.FieldName := 'CityName';
Field.Size := 40;
Field.DataSet := cdsPerson;
Field.FieldKind := fklookUp;
Field.LookUpDataSet := cdsCity;
Field.LookUpKeyFields := 'CityID';
Field.LookupResultField := 'CityName';
Field.KeyFields := 'CityID';
अगर मैं आपकी टिप्पणी को सही ढंग से समझ पाया हूं, तो इसे आजमाएं:
-
फ़ॉर्म में दूसरा DBGrid और DBNavigator और DBEdit जोड़ें।
-
अपने सभी डेटा स्रोतों को dsCity पर सेट करें और DBEdit के डेटाफ़ील्ड को CityName पर सेट करें।
फिर आप सिटी टेबल में एक नया शहर जोड़ सकते हैं और उसका सिटीआईडी (ग्रिड में) और सिटीनाम (ग्रिड या डीबीईडिट में) निर्दिष्ट कर सकते हैं। ध्यान दें कि जैसे ही आप इसे दूसरे डीबीनेविगेटर का उपयोग करके सहेजते हैं, फिर आप व्यक्ति ग्रिड के सिटीनाम सेल में क्लिक कर सकते हैं और नया सिटीनाम ड्रॉप-डाउन सूची में होगा। यदि आप इस संपादन को वर्तमान रिकॉर्ड . में करना चाहते हैं व्यक्ति तालिका में, आप सिटी टेबल पर एक आफ्टरपोस्ट ईवेंट हैंडलर जोड़कर उसमें कोड इस तरह जोड़ सकते हैं:
procedure TForm1.cdsCityAfterPost(DataSet : TDataSet);
begin
cdsPerson.Edit;
try
cdsPerson.FieldByName('CityId').AsInteger := DataSet.FieldByName('CityId').AsInteger;
finally
cdsPerson.Post;
end;
end;