السلام عليكم ورحمه الله وبركاته
أواجه مشكله في إستخدام bindValue مع قاعده بيانات SQLite و هي عند إرسال القيمة إلى المتغير فيتم تبديل القيمه بالحرف ? و لا أعرف لماذا و هذا مثال لتوضيح المشكله
QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE", "DB");
db.setDatabaseName(":memory:");
db.open();
QSqlQuery query(db);
query.prepare("CREATE TABLE IF NOT EXISTS tc_test (fc_index INTEGER PRIMARY KEY AUTOINCREMENT , fe_name TEXT DEFAULT(''))");
query.exec();
query.prepare("insert into tc_test (fe_name) values (:v)");
query.bindValue(":v", QVariant(QObject::trUtf8("Hello")));
QMessageBox::information(0, "", query.lastQuery());
query.exec();
QMessageBox::information(0, "", query.executedQuery());
db.close();من خلال lastQuery سوف يتم عرض سطر SQL قبل تبديل المتغير و من من خلال executedQuery يتم عرض سطر SQL بعد تبديل المتغير و تنفيذ SQL و لكن للأسف لا يتم التبديل بصورة صحيحه و يتم وضع حرف ? بدل القيمة المطلوبه
تم تنفيذ الكود في حاله حفظ قاعده البيانات في الذاكرة أو في ملف و في الحالتين فشلت المحاوله و لكن لا أواجه أي مشكله مع bindValue في حاله التعامل مع PostgreSQL أو MySQL
كما تم تغيير نظام التعامل و تبديل الإستايل من : إلى ? و تم إستخدام الداله addBindValue أيضاً و لكن أواجه نفس المشكله.
نظام التشغيل : OpenSUSE 11.2 64Bit
نسخه QT : الإصدار 4.7 بالتحديد 2010.05.1
ما هو حل المشكله و هل SQLite لا تتعامل مع bindValue علماً بأن الإنترنت ممتلئه بالأمثله التي تستخدم bindValue مع SQLite بدون مشاكل حتى أنني لم أرى أي تلميح لهذا في توثيق Qt
ملحوظه: أقوم الأن بتحميل النسخه Qt_SDK_Lin64_offline_v1_1_en.run فممكن أن تكون المشكله من النسخه التي أستخدمها حالياً و سأطلعكم على النتيجه قريباً إن شاء الله.
إضافة: قمت بإختبار الإمكانيات NamedPlaceholders و PositionalPlaceholders من خلال الداله hasFeature و وجدت أن SQLite يدعم الثانيه فقط و لا يدعم الأولى و لكن في حاله إستخدام Positional Placeholders أواجه نفس المشكله و يتم وضع الحرف ? أيضاً.
إضافة 2: بعد بحث وجدت أن SQLite تدعم Named Placeholders بدون مشاكل فأتوقع أن المشكله في Dirver الخاص بنسخه Qt التي أعمل عليها و سينكشف هذا من النسخه التي أحلمها الأن إن شاء الله.
شكراً
