طراحي يك فرم و ذخيره ديتا و فراخواني مجدد آن در mmb

AV_3SG

Member
سلام
این خیلی بهتره چون منم میترسم از پلاگین استفاده کنم یعنی پلاگین SQlite مثل یه کوه می مونه که به نظر خیلی بلنده و نمی شه اونو فتح کرد ولی به نظر اونایی که این کارو کردن اصلا این طور نیست و باید دلو زد به دریا و کار با این پلاگین رو شروع کرد
راستش من خودم چند وقته که می خوام کار با این پلاگین رو شروع کنم ولی هر بار که مثال پلاگین رو باز می کنم و کمی مطالعه می کنم نظرم عوض می شه چون از بعضی دستوراش سر در نمی آرم ولی خوب شروع کار با پلاگین می تونه یه نقطه عطفی توی دوران کاری من با بیلدر باشه
پس من از همین امروز و توی همین پست قول میدم که اگه این دوست عزیزمون کار با پلاگین رو شروع کنن منم حتما به اینجا سر بزنم و به ایشون کمک کنم تا بالاخره خودمم این کوه رو فتح کنم :)
 
آخرین ویرایش:

quantom

Member
جناب Telesate
در مثالی که زحمتش رو کشیدید آیا امکان ویرایش اطلاعات هم وجود داره؟
 

vahid1352

Active Member
ممنون جناب Telesate آیا تو این مثال میشه گزارش گرفته واونو چاپ کرد لطفا در این مورد هم راهنمای کنید
ممنون
 

telesate

Member
امکان ویرایش هم میباشد اما فیلد هایی که با فارسی پر شده است باید کل فیلد پاک شود و دوباره تایپ گردد !
امکان گزارش و پرینت هم میشود اضافه کرد . موفق باشید .
 

vahid1352

Active Member
باعرض خسته نباشید برای اقایTelesate لطفا میشه تو این مثال مراحل گزارش گیری وپرینت رو بزارین ممنون میشم
 

AV_3SG

Member
چون قراره تو این کار همه اونایی که بلد نیستن یاد بگیرن پس من از همون اول سوالامو می پرسم
فقط امیدوارم که اگه سوالام زیاد بود نارحت نشین و با حوصله جواب بدین
من یه تصویری از این پلاگین توی ذهنم دارم اونو مگم شما ببینید درسته یا نه :


اول میاییم با دستور
کد:
PluginRun("PlugIn","SQLiteInit")
دیتابیس رو راه میندازیم بعدش با دستور
کد:
PluginGet("PlugIn","IsInitialized")
چک می کنیم ببینیم فعاله یا نه ، اگه فعال بود با دستور
کد:
  DBPath$ = '<SrcDir>\Varzesh.db'
  PluginSet("PlugIn","DBPath$")
مسیر دیتا بیس رو بهش می دیم
حالا با دستور های زیر اول اسم فایل دیتا بیس رو می گیریم و بعد دیتا بیس رو با اون اسم باز می کنیم و چک می کنیم که ببینیم باز شد یا نه
کد:
  PluginRun("PlugIn","GetDBFileName")
  PluginRun("PlugIn","OpenSQLDB")
  PluginGet("PlugIn","IsOpened")
حالا اگه همه چیز درست بود سایز دیتابیس رو میگیریم و نمایش می دیم و اولین سطر از دیتابیس رو با دستور زیر می خونیم
کد:
    PluginRun("PlugIn","DBFileSize")
    PluginGet("PlugIn","DBSize")
    DisplayValue("DatabaseSize","DBSize")
    RunScript("ReadFirstRow")
*********************************************
حالا باید بریم و دستورات مربوط به سطر اول رو باز کنیم
توی دستورات مربوط به سطر اول ما دو تا متغیر داریم که یکی search و یکی دیگه $DBError هست که من اینا رو متوجه نمی شم و نمی دونم که مقداراشون از کجا مشخص می شن
حالا اگه search یک نبود ما میاییم و دستورات زیر رو یکی یکی اجرا می کنیم
کد:
  SQLQuery$ = 'SELECT * FROM Test;'
  PluginSet("PlugIn","SQLQuery$")
  PluginRun("PlugIn","Query")
  PluginGet("PlugIn","Results$")
  PluginGet("PlugIn","Rows")
  PluginRun("PlugIn","DBError")
  PluginGet("PlugIn","DBError$")
که اگه دوستان لطف کنن و اینا رو توضیح بدن ممنون می شم
حالا یه حالتی داریم که search=1 و' '=$ DBError باشه که اون وقت میاییم و اسکریپت مربوط به تمام سطر ها رو که این زیر نوشتم رو اجرا می کنیم ولی مشکل اینجاست که توی این اسکریپ هم یه چیزایی گنگ هستش مثل متغیر ، $NumberOfFields ، Rows ، Results
که فکر می کنم یه توضیح مختصر در موردشون بدین خیلی از مشکلات من حل میشه
کد:
If (DBError$='') Then
  Delimiter$ = '#'
  For i=1 To Rows
    Rows$[i] = GetArrayItem(Results$,Delimiter$,i)
    Rows$[i] = Rows$[i] + '|'
    NumberOfFields = GetArrayNum(Rows$[i],|)
    For j=i To Rows
      Ne1$[j] = GetArrayItem(Rows$[i],|,3)
      Ne2$[j] = GetArrayItem(Rows$[i],|,6)
      Ne3$[j] = GetArrayItem(Rows$[i],|,1)
      Ne4$[j] = GetArrayItem(Rows$[i],|,5)
      Ne5$[j] = GetArrayItem(Rows$[i],|,2)
    Next j
  Next i
Else
  Message("Error occured:","DBError$")
  Return()
End
NextPage()
حالا با وجود کد های بالا ما تازه دیتا بیس رو باز کردیم و سطر هاشو خونیدم
و برای نمایش اونا و یا پر کردن دیتابیس باید کد های بیشتری بنویسیم ، درسته ؟
برای نوشتن اطلاعات من باید یکم مطالعه کنم و بعد بیام اشکالاتم رو بپرسم ولی فعلا اگه زحمت نیست در مورد اون نکته هایی که اشاره کردم توضیح بدین

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

با تشکر
 
آخرین ویرایش:

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
خب در مورد اسکریپت های راه اندازی پلاگین و باز کردن دیتابیس همینطور هست که شما فرمودین

حالا میرسیم به ارتباط برقرار کردن با پلاگین و دیتابیس و استخراج یا ورود یا... اطلاعات.
همونطور که میدونید برای ارتباط با پلاگین از دستورات SQL استفاده میشه که البته بسیار هم ساده هستن، حداقل در سطح نیاز معمولی.
تمام دستورات SQLی که مینویسیم توسط تابع Query به پلاگین فرستاده میشن.
کد:
SQLQuery$ = 'SELECT * FROM Test;' 
PluginSet("PlugIn","SQLQuery$")
PluginRun("PlugIn","Query")
و مقدار برگشتی از پلاگین رو هم توسط دستور PluinGet دریافت میکنیم
کد:
PluginGet("PlugIn","Results$")
پس متغیر $Results حاوی اطلاعات بازگشتی از پلاگین که ما درخواست کرده بودیم هست.

حالا در برخی موارد به هر دلیلی مثل نوشتن نادرست دستورات SQL پلاگین قادر به انجام درخواست ما نیست و بنابراین اون اطلاعاتی که ما توقع داشتیم بازگشت داده بشه، طبیعتاً بدست ما نمیرسه، برای اینکه در این موارد ما از بروز خطا مطلع بشیم پلاگین تابعی برای ما فراهم کرده بنام DBError
کد:
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","DBError$")
که در صورت بروز خطا متغیر $DBError حاوی توضیحاتی خواهد بود و در غیر اینصورت متغیر خالی خواهد بود.

تا اینجا ما تونستیم اطلاعاتی رو از دیتابیس توسط پلاگین استخراج کنیم؛ اما فرمت این اطلاعات به شکل خاصی هست.
اطلاعات بازگشتی از پلاگین بصورت آرایه ای از اطلاعات هست که توسط کاراکترهایی که با نام Delimiter شناخته میشن این اطلاعات از هم جدا میشن و قابل تفکیک هستن.

در این فرمت، سطرها یا رکورد ها با کاراکتر جداساز # (در حالت پیشفرض) و ستونهای هر رکورد یا اصطلاحاً فیلدها (ّField) با کاراکتر جداساز | از هم جدا میشن.
که ما میتونیم با کمک توابع مربوط به کار با آرایه ها در MMB این اطلاعات رو از هم تفکیک کنیم.

کد:
Delimiter$ = '#'
  For i=1 To Rows
    Rows$[i] = GetArrayItem(Results$,Delimiter$,i)
    Rows$[i] = Rows$[i] + '|'
    NumberOfFields = GetArrayNum(Rows$[i],|)
    For j=i To Rows
      Ne1$[j] = GetArrayItem(Rows$[i],|,3)
      Ne2$[j] = GetArrayItem(Rows$[i],|,6)
      Ne3$[j] = GetArrayItem(Rows$[i],|,1)
      Ne4$[j] = GetArrayItem(Rows$[i],|,5)
      Ne5$[j] = GetArrayItem(Rows$[i],|,2)
    Next j
  Next i
اما برای اینکه بتونیم به درستی و بطور کامل اطلاعات رو از هم تفکیک کنیم، باید بدونیم که اطلاعات استخراج شده از دیتابیس (اطلاعات بازگشتی از پلاگین) شامل چه تعداد رکورد هست، تا بتونیم تمام اونها رو نمایش بدیم (در واقع از هم تفکیک کنیم)
برای مرتفع کردن این مورد هم پلاگین تدبیری اندیشیده است (!)
بدین ترتیب که وقتی ما کوئری SQL رو به پلاگین پاس میدیم، پلگین دو مقدار رو برای ما بر میگردونه،
یکی اطلاعاتی هست که درخواست کرده بودیم که در قالب یک متغیر رشته ای ($Results) به ما تحویل داده میشه
و دیگری متغیری عددی هست که نشان دهنده ی تعداد رکوردها یا سطرهای موجود در مقدار بازگشتی هست:
کد:
PluginGet("PlugIn","Rows")
پس متغیر Rows به ما میگه که چه تعداد رکورد در اطلاعات بازگشتی ما وجود داره.

همونطور که میدونید در سیستم دیتابیس، هر جدول شامل تعدادی ستون هست که اطلاعات رو از هم تفکیک میکنه و تمام سطرها، اون ستونها رو دارن (حالا میتونن در اون ستون اطلاعاتی رو ذخیره بکنن یا نه.

متغیر NumberOfFields میاد تعداد این ستونها رو از روی آرایه ی موجود میخونه، لزوم اینکار برای این هست که ما بتونیم کدهای انعطاف پذیری بنویسیم که بتونه براحتی با دیتابیس کار کنه
البته در مورد تعداد فیلدها معمولاً نیازی به اینکار نیست چون دیتابیس رو خود ما طراحی کردیم و میدونیم که فلان جدول از این مقدار ستون تشکیل شده و یا در فلان دستور ما فلان فیلدها رو در اطلاعات بازگشتیمون داریم.

اما در مورد تعداد ستونها این خیلی مهم هست، چون تعداد رکوردهای بازگشتی همیشه برای ما مشخص نیست (مثلاً در جستجو ها)، بنابراین ما با دونستن تعداد رکورد ها (سطرها) میتونیم با کمک حلقه ها در اونها پیمایش کنیم و اطلاعات رو از هم تفکیک کنیم و در صورت لزوم نمایش بدیم.

امیدوارم تونسته باشم خوب توضیح بدن و توضیحاتم گنگ نبوده باشه.
موفق باشید
 

quantom

Member
امکان ویرایش هم میباشد اما فیلد هایی که با فارسی پر شده است باید کل فیلد پاک شود و دوباره تایپ گردد !
امکان گزارش و پرینت هم میشود اضافه کرد . موفق باشید .

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

vahid1352

Active Member
باعرض سلام به دوستان
لطفا در مورد گزارشگیری وچاپ اون یه مثال هم بزنیدممنون میشم
 

quantom

Member
با سلام و تشکر
در واقع منظورم از ويرايش کم يا زياد کردن فيلدها بود . مي خواستم ببينم آيا اينطور چيزي ممکنه ؟
 

peyman136

کاربر متخصص مولتی مدیا بیلدر
سلام
این خیلی بهتره چون منم میترسم از پلاگین استفاده کنم یعنی پلاگین SQlite مثل یه کوه می مونه که به نظر خیلی بلنده و نمی شه اونو فتح کرد ولی به نظر اونایی که این کارو کردن اصلا این طور نیست و باید دلو زد به دریا و کار با این پلاگین رو شروع کرد
راستش من خودم چند وقته که می خوام کار با این پلاگین رو شروع کنم ولی هر بار که مثال پلاگین رو باز می کنم و کمی مطالعه می کنم نظرم عوض می شه چون از بعضی دستوراش سر در نمی آرم ولی خوب شروع کار با پلاگین می تونه یه نقطه عطفی توی دوران کاری من با بیلدر باشه
پس من از همین امروز و توی همین پست قول میدم که اگه این دوست عزیزمون کار با پلاگین رو شروع کنن منم حتما به اینجا سر بزنم و به ایشون کمک کنم تا بالاخره خودمم این کوه رو فتح کنم
سلام مثل اینکه دیر رسیدم دوستان جواب رو دادن اما این پست رو دیدم گفتم حیف جواب ندم
ببینیددوستان من و بقیه دوستان چندیدن و چند بار گفتیم که مشکل سختی کار با SQLite بخاطر پلاگین نیست در واقع شما منطق کار با پلاگین رو بلدید اما مشکل شما توی دستورات SQLite هستش دستور Query پلاگین دستوری که شما میدید رو به بانک اطلاعاتی میفرسته و نتیجه رو توی یه رشته برای شما میگیره
شما باید
1- توان کار با آرایه ها رو داشته باشید
2- اطلاعات زمینه ای در مورد SQlite داشته باشید اینجا تالار بیلدره درسته که ما به سوالاتی که در مورد بیلدر و پلاگین هاش باشه جواب میدیم اما نمتونیم اینجا کلاس آموزش SQLite بزاریم چون اصل وضوع ربطی به تالار نداره شما اگه مشکل خاصی با SQLite (البته با زبان SQL نه پلاگین) میتونید توی پیام خصوصی بپرسید تا جایی که اطلاعاتم کمک کنه جواب رو میدم البته این کار رو باعث میشه تا محیط تالار هم شلوغ نشه
 

AV_3SG

Member
بله ، حتما ، مطمئن باشید خدمت می رسیم
من یه چند روزی هست که روی این پلاگین و کلا روی sql کار می کنم و امید وارم که مشکل هام رو بتونید حل کنید
ولی درحال حاضر من نمی تونم یه دیتابیس خالی با دستور " ساخت دیتابیس جدید " درست کنم
یعنی من Manual و باز کردم و کد های مربوط به قسمت ساخت یک دیتابیس خالی رو مرحله به مرحله جلو رفتم ولی متاسفانه موفق نشدم
باز رفتم مثالهای دیگه رو هم بررسی کردم ولی همشون برای دیتابیس مسیر پیش فرض داده بودن و از قبل دیتابیس رو به صورت دستی ایجاد کرده بودن
در آخر هم اگه مدیر انجمن بخوان می تونن یه قسمت مربوط به بررسی این پلاگین و مشکلات مربوطه ایجاد کنن و به تالار نظم بدن تا ماهایی که زیاد به دستورات sql آشنا نیستیم بریم و اونجا به بحث و تبادل نظر بپردازیم
 

peyman136

کاربر متخصص مولتی مدیا بیلدر
بله ، حتما ، مطمئن باشید خدمت می رسیم
من یه چند روزی هست که روی این پلاگین و کلا روی sql کار می کنم و امید وارم که مشکل هام رو بتونید حل کنید
ولی درحال حاضر من نمی تونم یه دیتابیس خالی با دستور " ساخت دیتابیس جدید " درست کنم
یعنی من Manual و باز کردم و کد های مربوط به قسمت ساخت یک دیتابیس خالی رو مرحله به مرحله جلو رفتم ولی متاسفانه موفق نشدم
باز رفتم مثالهای دیگه رو هم بررسی کردم ولی همشون برای دیتابیس مسیر پیش فرض داده بودن و از قبل دیتابیس رو به صورت دستی ایجاد کرده بودن
در آخر هم اگه مدیر انجمن بخوان می تونن یه قسمت مربوط به بررسی این پلاگین و مشکلات مربوطه ایجاد کنن و به تالار نظم بدن تا ماهایی که زیاد به دستورات sql آشنا نیستیم بریم و اونجا به بحث و تبادل نظر بپردازیم
این طور نیست شما اگه Sample 2 رو توی نمونه های همراه پلاگین ببینید متوجه میشید که کار این نمونه ساخت دیتا بیس خالی و افزودن فیلد ها به اون هستش
 

AV_3SG

Member
آها درسته من زیاد دقت نکردم ولی حالا یه دیتابیس خالی رو تونستم درست کنم
حالا من برم یکمم بیشتر روی این پلاگین کار کنم و برگردم اشکال هام رو بپرسم
ولی با توجه به حرف های پیمان جان عزیز و تصمیم مدیریت می تونیم یه تاپیک مخصوص این پلاکین و کلا sql بزنیم تا اشکالاتمون رو از اون قسمت پیگیری کنیم
با تشکر
 

جدیدترین ارسال ها

بالا