رفتن به مطلب
جامعه‌ی برنامه‌نویسان مُدرن ایران
  • 0
فانوس

راهنمایی در زمینه استفاده از sqlmodel در QML

سوال

سلام

چندتا سوال داشتم در زمینه اتصال دیتابیس به پروژه کوئیک

من تا اینجا متوجه شدم که برای اتصال دیتابیس ابتدا باید یک فایل مختص درج و حذف و ویرایش و اتصال دیتابیس درست کرد. و یک فایل برای مدل.

اولی که مشکلی ندارم و کاملا واضحه میمونه دومی:

QML - Lesson 016. SQLite database and the working with it in QML Qt

۱ - رول Role چه استفاده ای داره؟ نام هایی که انتخاب می‌کنه چه کاربردی داره؟

۲ - هش برای چی هست؟

۳ - تابعی که خروجی QVariant هست برای چی تعریف شده؟

۴ - ایا به ازای تمامی جداولی که در دیتابیس است باید رول تعریف شه؟

۵ - زمانیکه چندین جدول داریم چجوری این فایل مدل باید تعریف بشه.

ممنون میشم برام ساده توضیح بدید.

  • پسندیدن 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

7 پاسخ به این سوال تا کنون داده شده است

پست های پیشنهاد شده

  • 0

سلام

یک مقداری وقت گذاشتم یه مثال تر و تمیز درست کنم که لپ مطلب توش باشه ولی بعد بیخیال شدم گفتم سر نخ بدم خودتون تلاش کنید که هم یاد بگیرید هم یادتون بمونه

ببینید اون روش قدیمی تعریف رل خیلی جالب نیست یعنی به اعتقاد من روشی خوبه که بشه بدون دست بردن توی کد هم به مدل موارد مورد نیاز رو اضافه کرد .

یک نگاهی به این بندازید داره از JSONListModel استفاده میکنه شما هم میتونید دیتایی ک دارید رو در قالب یک استرینگ جیسان در بیارید و بفرستید کیو ام ال و اونجا از همین روش برای نشون دادن استفاده کنید .

نتیجش رو منتشر کنید .

موفق باشید.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

سلام. ممنون از راهنماییتون. اما هنوز چیزی دستگیرم نشده. میشه بیشتر راهنماییم کنین.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 20 آبان 1397 در 11:01، فانوس گفته است :

سلام. ممنون از راهنماییتون. اما هنوز چیزی دستگیرم نشده. میشه بیشتر راهنماییم کنین.

عه سلام

فکر میکردم راهنمایی کردم الان دیدم نکردم .

ببین باید ابجکت جیسانت رو درست کنی  بعد یه تابع داره برای تبدیل به استرینگ :

QJsonObject jsonObj; // assume this has been populated with Json data

QJsonDocument doc(jsonObj);
QString strJson(doc.toJson(QJsonDocument::Compact));

بعد میتونید استرینگ رو به روش دلخواه بفرستید به کیو ام ال و اونجا پارسش کنید.

  • پسندیدن 2

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در در 26 آبان 1397 در 19:22، بهنام صباغی گفته است :

عه سلام

فکر میکردم راهنمایی کردم الان دیدم نکردم .

ببین باید ابجکت جیسانت رو درست کنی  بعد یه تابع داره برای تبدیل به استرینگ :

 
QJsonObject jsonObj; // assume this has been populated with Json data
 
 
 
QJsonDocument doc(jsonObj);
 
QString strJson(doc.toJson(QJsonDocument::Compact));

بعد میتونید استرینگ رو به روش دلخواه بفرستید به کیو ام ال و اونجا پارسش کنید.

سلام. ممنون از راهنماییتون . اینی که گفتی فهمیدم . اما در کل هنوز بلد نیستم ازش استفاده کنم. ممنون به  هر حال

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0

خب شما دست به کد بشید هرکجا مشکلی بود بپرسید در خدمتم تا دستان مبارک روی کیبورد نره که اشکال کار در نمیاد.

الان پروژه‌ای دارید که مشغولش باشید و بتونید روی اون پیاده کنید تا مشکل رو حل کنیم ؟

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 5 دقیقه قبل، بهنام صباغی گفته است :

خب شما دست به کد بشید هرکجا مشکلی بود بپرسید در خدمتم تا دستان مبارک روی کیبورد نره که اشکال کار در نمیاد.

الان پروژه‌ای دارید که مشغولش باشید و بتونید روی اون پیاده کنید تا مشکل رو حل کنیم ؟

دیتای من اینه :

QSqlQuery DB::UserManage(int id) 


{

 QString str; 

str.append("SELECT ui.[UI_ID],ui.[UI_PID],ui.[UI_Admin],ui.[UI_Active]," "case when(select count(*) FROM t1 ua where ua. [UI_ID]=ui.[UI_ID] and [AT_ID]=1 and [UA_Active]=1)>0 then 1 else 0 end," "case when(select count(*) FROM t2 ua where ua.[UI_ID]=ui.[UI_ID] and [AT_ID]=2 and [UA_Active]=1)>0 then 1 else 0 end," "case when(select count(*) FROM t3 ua where ua.[UI_ID]=ui.[UI_ID] and [AT_ID]=3 and [UA_Active]=1)>0 then 1 else 0 end " "FROM t4 ui ");

/*WHERE ui.[UI_Active]=1*/ 

if(id>-1) 

{

 str.append(" where ui.[UI_ID]=");/*and ui.[UI_ID]=*/ 

str.append(QString::number(id)); 

}

 return q;

 }

این نهایت خروجیش میتونه بشه QSqlQueryModel

حالا من اینو چجوری بفرستم که تبدیل شه به جیسون بعد تبدیل بتونه تو لیست ویو نشون بده . مثلا تو لینک زیر دیتاش کلا جیسونه

JSONListModel - Qt Wiki

دیتا من چجوری باید تبدیل شه. کلا من اینو از پایه متوجه نشدم

چرا QML این مبحث دیتا رو پیچیده کرده.

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
  • 0
در 54 دقیقه قبل، فانوس گفته است :

دیتا من چجوری باید تبدیل شه. کلا من اینو از پایه متوجه نشدم

خب پس مشکل چیز دیگست کلا مشکلی با کتابخانه نداری دیتا رو متوجه نشدی باید چکارش کنی.

شاید یکم طولانی باشه بحثش ولی سعی میکنم یجوری توضیح بدم متوجه بشید.

این حقیقت وجود داره که شما میخواید از دیتا استفاده کنید و صرفا نمیخواید ردش کنید بره پس مثلا به ازای هر مقدار عددی یه کامپوننت نمایشی برای نمایشش نیاز دارید. و این رو باید در زمان نوشتن برنامه مشخص کنید. پس در حالت عادی قضیه اونقدار هم داینامیک نیست و شما می‌دونید مثلا توی لیست قراره چه داده هایی نمایش داده بشه فرض کنید یه کاربر دارید که نام و نام خانوادگی و آدرس ایمیل و شماره موبایل داره از بین ان موارد ممکنه تعدادیشون بیش از یک مقدار داشته باشند یا اصلا ممکنه اپشنال باشند ولی کلیت مشخصه پس با روند عادی که توی پست http://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html گفته شده قابل انجام هست. اما وقتی شما میخواید فول داینامیک باشه یعنی ساختارهای داده پیچیده و تودرتو و کاملا داینامیک داشته باشید طوری که حتی ممکنه خود کاربر مواردی رو اضافه کنه مثلا فرض کنیم بخواد یه بخش برای حیوانات خانگیش اضافه کنه و توی اون دسته بندی بذاره و ... قضیه یکم فرق می‌کنه اما اونم راه حل داره که راهش اینه مثلا هر بخشی که میشه دیتا توش وارد کرد رو نوعش رو از کاربر بگیرید و بر اساس اون مثلا لیبل یا اسپین باکس یا ... نمایش بدید اما مشکل شما چند قدم عقب تر هست یعنی توی آماده سازی و ارسال دیتا به کیو ام ال مشکل دارید که گفتم اگر دیتا ساختار داره یا میتونید ساختار براش در نظر بگیرید که چه بهتر اگر هم ساختار نداره که روش جیسان کردن جواب میده اما این که چطور دیتا رو به جیسان تبدیل کنید می‌تونید دستی این کار رو انجام بدید که البته چندان هم داینامیک نیست یا می‌تونید یه کتابخانه برای تبدیل این کار پیدا کنید که بیاد تبدیل رو براتون انجام بده ولی اینو در نظر داشته باشید که اگر دارید همچین کاری می‌کنید شاید بهتر باشه از دیتابیس‌های NoSQL یا کلا جیسان بیس استفاده کنید. اما اجازه بدید یکم جزئی تر توی مسئله وارد بشم.

الان شما دارید دیتا رو از دیتابیس SQL بیس میخونید و توی مدل اون داریدش حقیقت اینه که روند کاریش تا جایی که من یادم میاد جدولی هست یعنی شما الان که اطلاعات رو خوندی به ازای هر ردیف یه سری فیلد داری پس اون چنان داینامیک و قابل تغییر نیست که نیاز باشه از کتابخانه و ... برای تبدیلش استفاده کنی یه روش میتونه این باشه که شما هر ردیف رو یک جیسان در نظر بگیری و هر فیلد رو یک فیلد جیسان و به همین سادگی می‌تونید تبدیلش کنید به جیسان و ادامه روند هم که توی پست‌های بالا توضیح داده شده.

 

در ۱ ساعت قبل، فانوس گفته است :

چرا QML این مبحث دیتا رو پیچیده کرده.

حقیقتش فکر می‌کنم توی خود کیو ام ال یه ساده ترین حالت ممکن این قضیه هندل شده یعنی وقتی دیتا از یکی از کانال های تعریف شده به کیو ام ال برسه خیلی کار باهاش سادست مثلا وقتی JSON یا XML از طریق شبکه به برنامه ارسال می‌شود ولی الان مشکل شما ایجاد اون کانال ارتباطی هست شاید تا حدودی که خود کیوت توضیح داده برای هر استفاده چطور این کار رو بکنیم ولی به گفته شما شاید یک راه ساده یا یک ساختار مدل داده قابل ارسال به کیو ام ال اگر تعریف می‌کرد که خودش این قضیه رو هندل می‌کرد خیلی می‌تونست ساده تر باشه این قضیه هم ولی تا جایی که من می‌دونم توضیحات داده برای هربار ولی خودش یک کلاس جامع و داینامیک درست نکرده شاید دلایل خودش رو داره یا شایدم خودش درست کرده من خبر ندارم 😁

موفق باشید.

  • تشکر شده 1

به اشتراک گذاری این ارسال


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال دیدگاه یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید دیدگاهی ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در سایت ما ثبت نام کنید. عضویت خیلی ساده است !

ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید

ورود به حساب کاربری

  • کاربران آنلاین در این صفحه   0 کاربر

    هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.

×