जैसा कि आपको टिप्पणियों में पहले ही समझाया जा चुका है, आपका while
लूप कुछ इस तरह दिखना चाहिए:
while **not** FData.FDQuery1.Eof do **begin**
ShowMessage(FData.FDQuery1.Fields[0].ToString);
**FData.FDQuery1.Next;**
end;
(शून्य से तारांकन, निश्चित रूप से)। हालांकि, यह इस समस्या को दूर नहीं करेगा कि आपका SQL गलत है।
तो, इसके बजाय इसे आजमाएं:
-
एक नई डेल्फी परियोजना में, एक फॉर्म पर एक TFDConnection, TFDQuery, TDataSource, TDataSource और एक TListBox रखें। फॉर्म और प्रोजेक्ट को सेव करें।
-
FDConnection1 के कनेक्शन संपादक को पॉप अप करने और इसे कॉन्फ़िगर करने के लिए डबल-क्लिक करें ताकि आप इसे सफलतापूर्वक अपने डेटाबेस से कनेक्ट कर सकें।
-
DBGrid1 को DataSource1 से और Datasource1 को FDQuery1 से कनेक्ट करें।
-
नीचे दिए गए कोड को फॉर्म के ऑनक्रिएट इवेंट में जोड़ें।
-
संकलित करें और चलाएं।
-
आपको तुरंत अपनी समस्या का कारण देखना चाहिए। जैसा कि त्रुटि संदेश ने आपको बताया, INFORMATION_SCHEMA.TABLES तालिका में कोई strDBName फ़ील्ड नहीं है।
तो आपको MySQL ऑनलाइन सहायता पर वापस जाने की आवश्यकता है, उदा। यहाँ
https://dev.mysql.com/doc/refman /5.7/hi/tables-table.html
और यदि आप पहले से नहीं जानते हैं, और इसे अपने प्रोजेक्ट के भीतर से कैसे प्राप्त करें, तो ठीक उसी तरह से काम करें, जिसकी आप तलाश कर रहे हैं।
बीटीडब्ल्यू, यदि आप सुनिश्चित नहीं हैं कि आप क्या कर रहे हैं, तो आपको हमेशा अपने SQL को पहले MySql कार्यक्षेत्र उपयोगिता में आज़माना चाहिए।
कोड
FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
FDQuery1.Open;
FDQuery1.GetFieldNames(ListBox1.Items);
मेरे पास 'MATestDB' नामक एक MySQL डेटाबेस है। इसकी तालिकाओं में फ़ील्ड (कॉलम) की सूची प्राप्त करने के लिए, मैं इस कोड को TForm1.FormCreate:
में जोड़ूंगा। FDQuery2.SQL.Text := 'select * from information_schema.columns where table_schema = ''MATestDB''';
FDQuery2.Open;
यदि आप चाहते हैं कि FDQuery2 और उसका ग्रिड FDQuery1 में चयनित तालिका को ट्रैक करे, तो आप master-detail
सेट करने के लिए निम्न जैसे कोड का उपयोग कर सकते हैं उनके बीच संबंध:
procedure TForm1.FormCreate(Sender: TObject);
begin
FDQuery1.SQL.Text := 'SELECT * FROM INFORMATION_SCHEMA.TABLES';
FDQuery2.SQL.Text := 'select table_schema, table_name, column_name, data_type, character_maximum_length, ordinal_position from information_schema.columns where table_schema = :Table_Schema and table_name = :Table_Name';
FDQuery2.IndexFieldNames := 'table_schema;table_name;ordinal_position';
FDQuery2.MasterFields := 'table_schema;table_name';
FDQuery2.MasterSource := DataSource1;
FDQuery1.Open;
FDQuery1.GetFieldNames(ListBox1.Items);
FDQuery2.Open;
FDQuery2.GetFieldNames(ListBox2.Items);
end;
बीटीडब्ल्यू, आप उसी तरह एक पैराडॉक्स डेटाबेस के लिए स्कीमा जानकारी प्राप्त करने में सक्षम नहीं होंगे, लेकिन आपको यह पता लगाने में सक्षम होना चाहिए कि आप पैराडॉक्स से कौन सी जानकारी एकत्र करना चाहते हैं।
बीटीडब्ल्यू # 2:एसक्यूएल में आपने अपने हटाए गए उत्तर में उद्धृत किया है, एक समस्या DBGrid2.SelectedField.ToString
का संदर्भ होगा। . यदि DBGrid2 को अपना डेटा FDQuery2 से मिलता है, तो आपका मतलब हो सकता है DBGrid**1**.SelectedField.ToString
. यदि आपको अभी भी इससे समस्या हो रही है, तो मेरा सुझाव है कि आप इसके बारे में एक नए q में पूछें, लेकिन सुनिश्चित करें कि आप समस्या को पुन:उत्पन्न करने के लिए आवश्यक सभी कोड शामिल करते हैं।