Qt

2010-02-22 12 views
6

के साथ SQLite से चुनें I Linux पर Qt 4.5.3 पर SQLite डेटाबेस से निपटने का प्रयास करें। मैंने पहले ही डाटाबेस बनाया है।Qt

फिर, मैं क्यूटी पर चुनिंदा प्रदर्शन करने के लिए प्रयास करें:

db = QSqlDatabase::addDatabase("QSQLITE"); 
db.setDatabaseName(filename); // Here is FULL path to the database. I've checked it twice :) 
bool ok = db.open(); 
qDebug() << db.tables(); 

QSqlQuery query; 
query.exec("select * from lessons"); 
qDebug() << query.size(); 
qDebug() << query.isSelect(); 
qDebug() << query.isValid(); 

लेकिन डिबग सांत्वना का कहना है:

("lessons", "weeklessons", "weeks") 
-1 
true 
false 

क्यों यह चयन कुछ भी नहीं है? मैंने क्या गलत किया है?

+4

ऐसा लगता है कि .size() SQLite साथ काम नहीं करता :(यही कारण है कि आपके पास -1 है – Seba

उत्तर

0

क्यूटी के बारे में बहुत कुछ जानने के बिना, मैं खुद से एक प्रश्न पूछ रहा था: QSqlQuery कैसे पता चलता है कि कनेक्शन का उपयोग करना है। मैनुअल में है कि अवलोकन किया जा रहा से पता चला है कि वहाँ मूल रूप से दो एक प्रश्न निष्पादित करने के लिए संभावनाएं हैं कि: executing वहाँ से

  1. query = db.exec("select * from lessons");
    डेटाबेस कनेक्शन का उपयोग करना, और।
  2. QSqlQuery query(db);
    existing database का उपयोग कर क्वेरी का निर्माण और उसके बाद क्वेरी को निष्पादित:
    query.exec("select * from lessons");

संपादित करें: में थोड़ा और अधिक पढ़ने के बाद, ऐसा लगता है कि डिफ़ॉल्ट कनेक्शन का समर्थन कर रहे हैं, इसलिए अपने उदाहरण से काम करना चाहिए ...

क्या आप क्वेरी को निर्माता के मूल्य के रूप में पास करने का प्रयास कर सकते हैं? शायद यह तब काम करता है।

QSqlQuery query("select * from lessons"); 
+0

क्यूटी के रूप में "डिफ़ॉल्ट कनेक्शन" यह बनाता है हां।। , निश्चित रूप से मैंने इस तरह से करने की कोशिश की। नहीं, वही त्रुटियां। डीबी = क्यूएसक्लडेटाबेस :: एडडेटाबेस ("क्यूएसक्लाइट"); डीबी।setDatabaseName (फ़ाइल नाम); बूल ठीक = db.open(); qDebug() << db.tables(); QSqlQuery क्वेरी = db.exec ("सबक से * चुनें"); qDebug() << query.size(); आउटपुट: ("सबक", "सप्ताहांत", "सप्ताह") -1 – vas3k

+0

और मैंने कन्स्ट्रक्टर के मूल्य में क्वेरी जोड़ने की कोशिश की। वही त्रुटियां, काम भी न करें। बहुत अजीब :( – vas3k

3

आपके "QSqlQuery क्वेरी" में; घोषणा, आपको डेटाबेस कनेक्शन निर्दिष्ट करना होगा, उदा। "QSqlQuery क्वेरी (डाटाबेस)"

1

त्रुटि संदेश पर एक नज़र देखते हुए अपने कार्यक्रम की रिपोर्ट है कि कि क्वेरी अमान्य है, है इस प्रकार है:

QDebug() << query.lastError().text(); 

इस समस्या को दूर करने में मदद करनी चाहिए।

+0

उत्तर के लिए Thanx, हाँ मुझे पता है। लेकिन यह एक खाली स्ट्रिंग (केवल एक स्थान) आउटपुट: ("सबक", "सप्ताहांत", "सप्ताह") " -1 – vas3k

+0

क्या आप सुनिश्चित हैं कि क्वेरी वास्तव में काम करती है? इसे SQLite प्रॉम्प्ट से आज़माएं। हो सकता है कि आपकी क्वेरी के अंत में अर्द्ध-कोलन जोड़ने से मदद मिल सके? अंत में, मैं SQLite उदाहरण प्राप्त करने का प्रयास करूंगा जो क्यूटी के साथ काम करने के लिए भेज दिया गया है। –

+0

हाँ यह मेरे SQLite में काम करता है दर्शक: http://lh3.ggpht.com/_hyIyDtqe5N0/S4KNBpfapeI/AAAAAAAAAU0/3MEliEIy8G4/sqlite2.png अर्धविराम जोड़ना भी मदद नहीं करता है। और मुझे क्यूटी SQLite उदाहरण कहां मिल सकता है? मुझे केवल MySQL मिला। – vas3k

9

यदि सत्यापित वैध स्थिति पर क्वेरी स्थिति में है, लेकिन exec() को कॉल करने के बाद, यह नहीं है: आपको पहले वैध रिकॉर्ड में जाना होगा, उदाहरण के लिए query.first () या query.next()। क्यूटी देखें डॉक्स: http://doc.qt.io/archives/4.6/qsqlquery.html

आकार() लौट -1 मतलब यह नहीं है कि वहाँ कोई परिणाम है: SQLite डेटाबेस जिसके लिए क्वेरी के आकार सीधे उपलब्ध नहीं होता में से एक (QSqlDriver के लिए दस्तावेज में देखने के लिए है :: hasFeature())। आप जांच सकते हैं कि पंक्तियां वापस आती हैं और आकार को लूप और query.next() के साथ ढूंढें।

आप अपने चयन के परिणाम के साथ क्या करना चाहते हैं, इसके आधार पर, आप QSqlQuery के बजाय QSqlQueryModel का भी उपयोग कर सकते हैं।

+0

यह समस्या की तरह दिखता है। सामान्य रूप से @ vas3k आपको निष्पादित निष्पादन के निष्पादन को गीला करने के लिए निष्पादन() के वापसी मूल्य की जांच करनी चाहिए। –

0

यह आपको एक जवाब दे सकते हैं: http://www.qtcentre.org/threads/7904-Is-there-any-other-reason-why-QSqlQuery-size%28%29-returns-1

+1

यहां जवाब सबसे अच्छा माना जाता है अगर वे न केवल एक लिंक प्रदान करते हैं (हालांकि सहायक हो सकता है) लेकिन समस्या के कारणों को समझाएं या समाधान का वर्णन करें। आप उन्हें सुधारने के लिए हमेशा अपने उत्तरों को संपादित कर सकते हैं। –

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