ساختار درختی با اتصال به دیتا بیس

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
شما باید با کدهای SQL آشنایی داشته باشید، این دیگه مربوط به پلاگین و MMB نمیشه !
مثلاً برای دریافت اطلاعات از SELECT استفاده میشه (به کدهای مثالی که پیوست کرده بودم توجه کنید) و برای درج اطلاعات از INSERT.

برای اینکار توصیه میکنم یک کتاب مرتبط با SQL رو بخونید و یا اگر در همین انجمن هم جستجو کنید مطالب مرتبط زیادی پیدا میشه.
در مبحث آموزش کار با SQLite که بصورت مهم شده در انجمن مولتی مدیا بیلدر موجود هست هم توضیحاتی ارائه شده.
 
من اگر فایل اکسس دیتابیس رو بدم, کسی می تونه فایل تبدیل شده رو به من تحویل بده؟
جبران می کنم براش
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
شما این پست رو ببینید : سورس: Dicti [دیکشنری ساخته شده با MMB]

برنامه ای که معرفی شده، میاد و فایل های متنی رو به دیتابیس تبدیل میکنه،البته این برنامه مختص دیکشنری معرفی شده نوشته شده، اما مهم کدهاش هست که میتونید با کمی تغییر ازش استفاده کنید.
برای اینکار ابتدا باید تمامی فیلدهای موجود در دیتابیس اکسستون رو جداگانه تحت یک فایل متنی و بصورت ANSI ذخیره کنید،
بعد بر اساس مثالی که معرفی کردم، خط به خط از تمام فایلها رو بخونید و در دیتابیس ذخیره شون کنید.
 
من می خوام 4 تا ستون ایجاد کنم
یکی id
topic
parent
desc
خوب
توی کد زیر کجا رو باید تغییر بدم؟
If (Error = 1) Then
** In case Process has been stoped before
L$=CHR(13)+CHR(10)
text$='"The Process was stoped because of an error'+L$+'Do you want to continue the process or start it from the Begining ?'+L$+L$+'To continue the Process select "Yes", and select "No" to start it from the begining.'+L$+'Note that if you start the process from the beginning, all the insertrd data will be deleted"'
flag=32+4+0+0+0
param$=text$+','+CHAR(flag)
MessageEx("","param$")
If (CBK_MsgEx=6) Then
**YES
** Inserting Process will continue after last inserted Record.
Error = 0
Event$ = 'Data Inserting Process has been Resumed.'
Notification$ = 'Info'
RunScript("Show Event")
End
If (CBK_MsgEx=7) Then
**No
** Inserting Process Will start from the beginning
** We need to do a DELETE to empty the table
DELETE$ = 'DELETE FROM Dictionary;'
PluginSet("PlugIn","DELETE$")
PluginRun("PlugIn","UpdateDB")
PluginGet("PlugIn","Deleted")
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","Error$")
If (Deleted = 0) Then
** In Case an Error Occured
Event$ = 'The Table contents can NOT be deleted; An error Occured: ' + Error$
Notification$ = 'Error'
RunScript("Show Event")
Running = 0
Error = 1
Return()
Else
i = 0
Event$ = 'Table contents has been deleted successfully..'
Notification$ = 'Info'
RunScript("Show Event")
Event$ = 'Inserting Data into Database Started.'
Notification$ = 'Info'
RunScript("Show Event")
End
End
Else
End
i = i + 1
If (i = 1) Then
TRANSACTION$ = 'BEGIN TRANSACTION;'
PluginSet("PlugIn","TRANSACTION$")
PluginRun("PlugIn","UpdateDB")
End
EnglishWord$ = StrFromFile(English$,i,1)
PersianWord$ = StrFromFile(Persian$,i,1)
SQLQuery1$ = 'INSERT INTO Dictionary (English,Persian)'
SQLQuery2$ = ' VALUES ("'+EnglishWord$+'","'+PersianWord$+'");'
FinalQuery$ = SQLQuery1$ + SQLQuery2$
PluginSet("PlugIn","FinalQuery$")
PluginRun("PlugIn","UpdateDB")
PluginGet("PlugIn","Updated")
PluginRun("PlugIn","DBError")
PluginGet("PlugIn","Error$")
If (Updated=0) Then
** In Case an Error Occured
Event$ = 'Data Inserting Process Stoped; An error Occured: ' + Error$
Notification$ = 'Error'
RunScript("Show Event")
Running = 0
Error = 1
Return()
Else
End
** Progress Bar Movement **
Status = (i/NOL)*631
Percent = (i/NOL)*100
Percent$ = CHAR(Percent)
If (Percent > 10) Then
If (INT(Percent) = 100) Then
Percent$ = StrCopy(Percent$,1,3)
Else
Percent$ = StrCopy(Percent$,1,5)
End
Else
Percent$ = StrCopy(Percent$,1,4)
End
Percent$ = Percent$ + '%'
DisplayValue("Percent","Percent$")
MoveObject("Bar","X,Y,Status,H")
If (i > NOL) Then
COMMIT$ = 'COMMIT;'
PluginSet("PlugIn","COMMIT$")
PluginRun("PlugIn","UpdateDB")
Event$ = 'Data Inserted Successfully into the Database by ' + Timer$
Notification$ = 'Info'
RunScript("Show Event")
Running = 0
Return()
End
ScriptTimer("Timer2=InsertDataProccess","0")
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
شما ساختار دیتابیستون رو در اسکریپت Create Table مشخص میکنید:
کد:
SQLQuery$ = [color=#800000]'CREATE TABLE Info (Desc TEXT, ID INTEGER PRIMARY KEY, Parent NUMERIC, Topic TEXT);'[/color]

در اسکریپت دکمه ی InsertData BTN مسیر فایل های متنی رو مشخص کنید، مثلاً در خود مثال دو فایل متنی معرفی شده:
کد:
English$ = [color=#800000]'<Embedded>\English.txt'[/color] 
Persian$ = [color=#800000]'<Embedded>\Persian.txt'[/color]

که شما در اینجا به سه فایل متنی نیاز دارید (برای Parent و Desc و Topic)
که هر خط از فایل متنی متناظر با اطلاعات یک رکورد هست.
حالا در اسکریپت InsertDataProcces چند خط از کد باید عوض بشه (مطابق با ساختار دیتابیستون):

کدهای اولیه:
کد:
EnglishWord$ = [color=#000090][b]StrFromFile[/b][/color](English$,i,[color=#ff0000]1[/color]) 
PersianWord$ = [color=#000090][b]StrFromFile[/b][/color](Persian$,i,[color=#ff0000]1[/color]) 
SQLQuery1$  = [color=#800000]'INSERT INTO Dictionary (English,Persian)'[/color] 
SQLQuery2$  = [color=#800000]' VALUES ("'[/color]+EnglishWord$+[color=#800000]'","'[/color]+PersianWord$+[color=#800000]'");'[/color] 
FinalQuery$ = SQLQuery1$ + SQLQuery2$

کدهای جایگزین:
کد:
TopicData$  = [color=#000090][b]StrFromFile[/b][/color](Topic$,i,[color=#ff0000]1[/color]) 
DescData$   = [color=#000090][b]StrFromFile[/b][/color](Desc$,i,[color=#ff0000]1[/color]) 
ParentData$ = [color=#000090][b]StrFromFile[/b][/color](Parent$,i,[color=#ff0000]1[/color]) 
SQLQuery1$  = [color=#800000]'INSERT INTO Info (Topic,Desc,Parent)'[/color] 
SQLQuery2$  = [color=#800000]' VALUES ("'[/color]+TopicData$+[color=#800000]'","'[/color]+DescData$+[color=#800000]'","'[/color]+ParentData$+[color=#800000]'");'[/color] 
FinalQuery$ = SQLQuery1$ + SQLQuery2$

با فرض اینکه شما مسیر فایل های متنی رو در متغیر های $Topic و $Desc و $Parent مشخص کردید.
 
من درست کردم
اما فقط یک ردیف ایجاد شد!
در ضمن توی نمونه مثالی که برای نمودار درختی ایجاد کردید نتونستم واردش کنم
فقط عنوان نمایش داده شده
توضیحات نمایش داده نمی شه, نمی دونم اسم متغیر رو چی بذارم تا توضیحات هم نمایش داده بشه
 

پیوست ها

  • 1.zip
    688.6 کیلوبایت · بازدیدها: 38

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
برای اینکه دیتابیس بدرستی ساخته بشه، در اسکریپت InsertData BTN کد زیر رو جایگزین خط هشتم کنید، فراموش کرده بودم اینو یادآوری کنم:
کد:
NOL = [color=#000090][b]NOL[/b][/color](Topic$)

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

پیوست ها

  • test 2.zip
    375.3 کیلوبایت · بازدیدها: 29
تا اینجا بسیار عالی
حالا یه سوال فنی دیگر:paint:
آیا امکان داره قسمت توضیحات رو به چند قسمت تقسیم کرد, به طور مثال به ده صفحه که در هر صفحه مثلا صد کلمه وجود داشته باشه
مثل پیوست
 

پیوست ها

  • Untitled.jpg
    Untitled.jpg
    147.4 کیلوبایت · بازدیدها: 12

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
بله.
ساختار دیتابیس رو خودتون تعیین میکنید، مثلاً 10 تافیلد برای Desc بسازید (مثلاً Desc1 تاDesc10)، و بعد هرکدوم رو جداگانه لود کنید.
این ساده ترین راهش هست، وگرنه میتونید کل متن رو یکجا بگیرید و بعد به تعداد صفحات مناسب تقسیمش کنید که کمی کدنویسی نیاز داره احتمالاً.
 
برای اینکه یک جا گرفته شود و بعد تفسیم کنم چی کار می شه کرد؟مثل پیوست قبلی
آیا می شه مطلب گرفته شده رو در یک متغیر ریحت بعد اونو بر اساس تعداد کلمه تقسیم کرد و بعد از تقسیم شدن, حساب کرد چند بار تقسیم شده و بعد توی یک لیست باز شو نمایش داده بشه
 
آیا می شه با mmb مثل شکل زیر ایجاد کرد
اسم کتاب انتخاب بشه
در کنارش توضیحاتش نوشته بشه
و وقتی روی دکمه باز کردن زده می شه فایل کتاب باز بشه
در ضمن با دسته بندی بشه کتاب های خاصی رو نمایش داد
 

پیوست ها

  • mmb.png
    mmb.png
    246.9 کیلوبایت · بازدیدها: 12
از دیتا بیس نام کتاب و توضیحات و دسته بندی رو بازیابی کنه
و در شکلی مثل بالا نمایش بده
و در آخر هم وقتی روی دکمه باز کردن زده شد , کتاب باز بشه
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
بله، به راحتی !
در مورد عنوان وتوضیحات که قبلاً توضیح داده شد
اگه دوتا فیلد دیگه یکی برای دسته بندی و اونیکی هم برای اسم فایل (یا آدرس فایل) اضافه بشه همین چیزی که نیاز دارید رو میشه پیاده سازی کزد.
میشه اول Category ها رو استخراج کرد و در ComboBox نمایش داد، با انتخاب هرکدوم از Category ها زیر مجموعه ها انتخاب بشن.
یه فیلد هم برای اسم فایل هست که یه آدرسه و اگه پاسش کنید به دستور run اون فایل رو اجرا میکنه.
 
اینکه چه جوری میشه موضوعات رو در combo box قرار داد
و اینکه اگر من هزارتا کتاب داشته باشم باید دونه دونه براشون آدرس دهی کنم و چه طوری باید ادرس بدم؟

یه مشکل دیگه هم هست , توی ایجاد دیتا بیس برای موارد قبلی
ضمیمه کردم موارد رو
درست دیتابیس ایجاد نمی کنه
هر جا که " داره یعنی اینکه توضیحات تاپیک جدید شروع میشه
 

پیوست ها

  • test.zip
    194.5 کیلوبایت · بازدیدها: 11

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

بالا