2011-12-16 12 views
5

डेल्फी 2010 का उपयोग करके, मैंने दूरस्थ MySQL सर्वर से कनेक्ट करने के लिए TSQLQuery और TSQLConnection का उपयोग किया है। मैं एक SQL क्वेरी इस प्रकार का इस्तेमाल किया है:मैं SQL क्वेरी के परिणाम कैसे प्राप्त करूं?

SQLQuery1.SQL.Text := 'SELECT * FROM registered WHERE email="'+email+'" and login_pass="'+password+'"'; 

SQLQuery1.Open; // Open sql connection 

क्या मैं सूची या इस क्वेरी द्वारा चयनित डेटा प्रदर्शित करने के क्या करना चाहिए?

जब मैं

SQLQuery1['who']; // The resault is : James Kan 

टाइप मैं इसे सूची में बहुत पिछले आइटम प्रदर्शित कर रहा है लगता है। लेकिन मैं प्रत्येक आइटम को प्रदर्शित करना चाहता हूं, जैसा कि मैं PHP में फ़ोरैच लूप के साथ कर सकता था। मैं कैसे बना सकता हूं, उदाहरण के लिए, प्रत्येक आइटम के लिए एक TLabel?

+1

resultset से अधिक पुनरावृति एक अलग रूप में नोट के रूप में, आप जिस तरह से कोड एसक्यूएल "SQL इंजेक्शन के लिए" अनुमति देने के लिए हमेशा की तरह है। इसे लॉगिन तालिका के लिए करें, और एक स्मार्ट उपयोगकर्ता पूरी तालिका को पढ़ सकता है। आपको "एसक्यूएल पैरामीटर" का उपयोग करना चाहिए, यानी ईमेल = ईमेल और login_pass = पासवर्ड। पहले "sanitizing" बिना स्ट्रिंग कंसेटिंग स्ट्रिंग खतरनाक है क्योंकि कोई उपयोगकर्ता "उचित" charaters दर्ज कर सकता है और पूरी तरह से अपना क्वेरी बदल सकता है। –

+0

पैरामीटर का उपयोग मानों से बच जाएगा, लेकिन आप 'NULL' को फ़िल्टर करना चाहते हैं। साथ ही, LIKE क्लॉज के साथ '%' और '_' को फ़िल्टर करें। –

उत्तर

12

तुम बस की तरह

SQLQuery1.Open; 
SQLQuery1.First; // move to the first record 
while(not SQLQuery1.EOF)do begin 
    // do something with the current record 
    ... 
    // move to the next record 
    SQLQuery1.Next; 
end; 
+1

+1, आप तेज़ थे। मैं प्रत्येक पंक्ति के लिए लेबल भी बनाना चाहता था :) – TLama

+2

और यदि क्वेरी पहले से सक्रिय है और अंतिम रिकॉर्ड पर, लूपिंग से पहले 'प्रथम' रिकॉर्ड पर नेविगेट करें। –

+0

यदि आपको लगता है कि आपका एप्लिकेशन फ्रीज हो गया है, तो आप 'नेक्स्ट' भूल गए हैं, जो एक आसान गलती है। –

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