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

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
اینکه چه جوری میشه موضوعات رو در combo box قرار داد
و اینکه اگر من هزارتا کتاب داشته باشم باید دونه دونه براشون آدرس دهی کنم و چه طوری باید ادرس بدم؟
وقتی شما قصد دارید برنامه ای مبتنی بر دیتابیس بسازید، نیاز هست که با ساختار بانک اطلاعاتی آشنایی پیدا کنید، ضمن اینکه باید با دستورات SQL برای ایجاد ارتباط با بانک اطلاعاتی آشنایی پیدا کنید.

الان این مورد، بر میگرده به ساختار دیتابیس.

attachment.php


مثلاً با این ساختار میتونید لیست سرفصل ها رو از جدول اول بگیرید، و همونطور که میبینید در جدول دوم فیلدی وجود داره که مرتبط میشه به جدول اول.
یعنی عدد فیلد Category رو با ID از جدول اول مقایسه میکنید و برعکس

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

الان اول Categoryها رو از جدول اول میخونید و میریزید تو ComboBox، بعد با انتخاب هر گزینه از ComboBox چک میکنید که کدوم رکوردها از جدول دوم، فیلد Category برابر هست با ID اون سرفصل خاص
 

پیوست ها

  • Tables.PNG
    Tables.PNG
    10.7 کیلوبایت · بازدیدها: 42
فعلا مشکل من درست تبدیل نشدن این اطلاعات به دیتابیس هست
 

پیوست ها

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

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
این کدی هست که برای ورود اطلاعات استفاده میشه:
کد:
SQLQuery1$  = [color=#800000]'INSERT INTO Info (Topic,Details,Parent)'[/color] 
SQLQuery2$  = [color=#800000]' VALUES ("'[/color]+TopicData$+[color=#800000]'","'[/color]+DetailsData$+[color=#800000]'","'[/color]+ParentData$+[color=#800000]'");'[/color]

همونطور که میبینید از کاراکتر " در کد SQL استفاده شده، زمانی که من داشتم Dicti رو میساختم، با همین مشکل کواجه شدم، اما با کاراکتر ' مشکل پیدا کردم، دلیلش هم این هست که اون کاراکتر در MMB برای شروع و پایان یک String استفاده میشه و اگه همین کاراکتر داخل یه رشته باشه با مشکل مواجه میشید.
برای همین باید داده ها رو قبل از اینکه به یه رشته ی دیگه پاس بدید، اسکیپ کنید، مثلاً تمام کاراکتر های ' رو با '\ جایگزین کنید.
الان هم این مشکل شما بخاطر اینه که تو کد از کوتیشن استفاده شده و متن شما هم حاوی کوتیشن هست.
برای حل این مسئله تو کد از ' استفاده کنید:

کد:
SQLQuery1$  =  [color=#800000]'INSERT INTO Info (Topic,Details,Parent)'[/color]  
SQLQuery2$  =  [color=#800000]' VALUES (\'[/color][color=#800000]'+TopicData$+'[/color]\[color=#800000]',\'[/color][color=#800000]'+DetailsData$+'[/color]\[color=#800000]',\'[/color][color=#800000]'+ParentData$+'[/color]\[color=#800000]');'[/color]


البته فراموش نکنید که با این تغییر نیاز هست که رشته رو برای وجود کاراکتر ' چک کنید، وگرنه باز با همین مشکل مواجه خواهید شد.
 
فقط details رو ' قرار بدم یا نه توی تمام اطلاعات دیتابیس جایگزین کنم
باز هم مشکل داشت
نشد درستش کنم
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
توی تمام اطلاعاتتون، فقط باید ' رو با '\ جایگزین کنید.
با این تغییر توی کد نیازی نیست کاراکتر کوتیشن رو تغییر بدید.
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
ببینید، شما به گفته های بنده توجه نکردید،
اگر در فایل متنی، کاراکتر " وجود داره، در اسکریپت برنامه از '\ استفاده کنید، و اگر در فایل متنی، کاراکتر ' وجود داره، در اسکریپت از " استفاده کنید.

کاراکتر ' کاراکتر تعیین کننده ی محدوده ی رشته (String) در MMB هست، پس اگه این کاراکتر در متنی که به MMB میفرستیم وجود داشته باشه، ایجاد تداخل میکنه.
بنابراین ما باید این کاراکتر رو اسکیپ (Escape) کنیم.

پس اگر در دستور SQL از کاراکتر کوتیشن برای جداسازی داده ها استفاده کردید، در فایل متنی نباید کاراکتر کوتیشن وجود داشته باشه، و اگر هم از آپوستروف استفاده کردید برای جداسازی رشته ها، اون کاراکتر نباید در فایل متنی موجود باشه.
 
از این همه توضیح متشکرم
اما من می خوام نوشته های بین " " , به عنوان یک detail انتخاب شود
فعلا هر جا که اینتر زده شده باشه به عنوان یک detail انتخاب می شود!
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
خب مسئله اینجاست که ما داده ها رو به صورت خط به خط از فایل متنی میخونیم، یعنی محتویات هر خط، در یک رکورد ذخیره میشه.
میشه روند رو به شکلی تغییر داد که برای Detail بجای خط به خط از یک فایل متنی، هرکدوم از اونها رو از یک فایل متنی جداگانه فراخوانی کنه.
قطعاً این هم تنها راه حل نیست !

اون مثالی که دارید ازش استفاده میکنید رو بنده برای نیاز خودم نوشته بودم، واضح هست که برای اینکه نیازهای شما رو برآورده کنه نیاز به تغییراتی خواهد داشت.
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
گمان میکنم توضیحاتم به اندازه ی کافی گویا بوده باشه !

الان شما برای هر رکورد، یک خط رو از چند فایل جداگانه میخونید و وارد دیتابیس میکنید، خط iام
خب برای Detail، به جای خط، از یک فایل متنی بخونیدش
برای راحتی کار اسم فایلها رو به صورت عددی بزارید
اونوقت بجای اینکه مثلاً خط پنجم فایل Detail.txt رو بخونید، محتویات فایل 5.txt رو بخونید ! (نام فایل = i )
 
یه راه دیگه
آیا کاراکتری وجود داره که همون کار اینتر رو انجام بده ؟
اینجوری فکر کنم مشکل اینتر حل می شه
 
و یا اینکه امکانش هست که به صورت دستی مطالب رو وارد دیتا بیس کرد؟
با چه کدینگی مطالب توی دیتابیس ذخیره می شن؟
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
یه راه دیگه
آیا کاراکتری وجود داره که همون کار اینتر رو انجام بده ؟
اینجوری فکر کنم مشکل اینتر حل می شه
اگرازهمون روشقبل میخاید استفاده کنید، میشه یک تغییر ساده ایجاد کرد
در متنتون، هرجایی که خط شکسته میشه و به خط بعد میره رو با یه کاراکتر خاص (یا مجموعه ای از کاراکترها) که تو متن موجود نباشه میشه جایگزین کرد، اینجوری هر خط شامل همه ی اطلاعات هست، اما الان بجای چند خط، در یک خط قرارگرفتن
بعد هنگام لود هرخط، با یه دستور ساده، اون کاراکتر ها رو با کاراکتری که باز خط رو میشکنه جایگزین کنید
کد:
[FONT=Courier New][SIZE=2][COLOR=Blue]CHR[/COLOR]([COLOR=Red]10[/COLOR])+[COLOR=Blue]CHR[/COLOR]([COLOR=Red]13[/COLOR])[/SIZE][/FONT]
اما چون ممکن بود گیج بشید، روش بعد رو پیشنهاد کردم، به هرحال از هرکدوم که خواستید استفاده کنید
از StrChange برای عوض کردن کاراکترها در MMB استفاده کنید.
و یا اینکه امکانش هست که به صورت دستی مطالب رو وارد دیتا بیس کرد؟
با چه کدینگی مطالب توی دیتابیس ذخیره می شن؟
ظاهراً اینکار امکانپذیر نیست، یعنی اطلاعات فارسی رو باید با خود MMB وارد کرد.
باز هم جناب Silvercover در این مورد میتونن بیشتر توضیح بدن
 
اگرازهمون روشقبل میخاید استفاده کنید، میشه یک تغییر ساده ایجاد کرد
در متنتون، هرجایی که خط شکسته میشه و به خط بعد میره رو با یه کاراکتر خاص (یا مجموعه ای از کاراکترها) که تو متن موجود نباشه میشه جایگزین کرد، اینجوری هر خط شامل همه ی اطلاعات هست، اما الان بجای چند خط، در یک خط قرارگرفتن
بعد هنگام لود هرخط، با یه دستور ساده، اون کاراکتر ها رو با کاراکتری که باز خط رو میشکنه جایگزین کنید
کد:
[font=courier new][size=2][color=blue]chr[/color]([color=red]10[/color])+[color=blue]chr[/color]([color=red]13[/color])[/size][/font]
اما چون ممکن بود گیج بشید، روش بعد رو پیشنهاد کردم، به هرحال از هرکدوم که خواستید استفاده کنید
از strchange برای عوض کردن کاراکترها در mmb استفاده کنید.

مثال برای این مورد وجود داره؟
 

nevercom

کاربر متخصص انجمن مولتی مدیا بیلدر
فرض کنید این محتویات فایل متنی باشه:
Updated 4.9.8 (4.9.8.13)@#$@#$[ADDITIONS]@#$@#$+ Added an option to enable window Maximize and Resize (by dragging the application border). These new options can be found in Project Settings. @#$@#$+ Added Maximized and IsMaximized() scripting function - to detect if the window is in maximized state. @#$@#$+ Added an option to run MMB scripts from HTML page (loaded in Browser object).
مجموعه کاراکترهای $#@ بعنوان جداساز سطر ها استفاده شدن.
با تابع StrChange میتونید این کاراکتر ها رو با یه کاراکتر دیگه تعویض کنید.
کد:
[FONT=Courier New][SIZE=3][SIZE=2]Line$ = [/SIZE][SIZE=2][COLOR=#800000]'Updated 4.9.8 (4.9.8.13)@#$@#$[ADDITIONS]@#$@#$+ Added an option to enable window Maximize and Resize (by dragging the application border). These new options can be found in Project Settings. @#$@#$+ Added Maximized and IsMaximized() scripting function - to detect if the window is in maximized state.  @#$@#$+ Added an option to run MMB scripts from HTML page (loaded in Browser object).'[/COLOR][/SIZE][SIZE=2] 
Sep$ = [/SIZE][SIZE=2][COLOR=#800000]'@#$'[/COLOR][/SIZE][SIZE=2] 
CRLF$ = [/SIZE][SIZE=2][COLOR=#000090][B]CHR[/B][/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#ff0000]10[/COLOR][/SIZE][SIZE=2])+[/SIZE][SIZE=2][COLOR=#000090][B]CHR[/B][/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#ff0000]13[/COLOR][/SIZE][SIZE=2]) 
Line$ = [/SIZE][SIZE=2][COLOR=#000090][B]StrChange[/B][/COLOR][/SIZE][SIZE=2](Line$,Sep$,CRLF$) 
[/SIZE][SIZE=2][COLOR=#000090][B]Message[/B][/COLOR][/SIZE][SIZE=2]("Line$","")[/SIZE] 
[/SIZE][/FONT]
کافیه قبل از اینکه اون رشته رو برای پلاگین بفرستید، با این تابع، به حالتی که مدنظرتون هستد تغییرش بدید.
 
فرض کنید من نوشته رو با کد @#$@#$ تبدیل کردم و در دیتا بیس قرار دادم
حالا هم می خوام متن رو فراخوانی و نمایش بدم
کد زیر رو کجا باید قرار بدم
کد:
[FONT=Courier New][SIZE=3][SIZE=2]Line$ = [/SIZE][SIZE=2][COLOR=#800000]'Updated 4.9.8 (4.9.8.13)@#$@#$[ADDITIONS]@#$@#$+ Added an option to enable window Maximize and Resize (by dragging the application border). These new options can be found in Project Settings. @#$@#$+ Added Maximized and IsMaximized() scripting function - to detect if the window is in maximized state.  @#$@#$+ Added an option to run MMB scripts from HTML page (loaded in Browser object).'[/COLOR][/SIZE][SIZE=2]  Sep$ = [/SIZE][SIZE=2][COLOR=#800000]'@#$'[/COLOR][/SIZE][SIZE=2]  CRLF$ = [/SIZE][SIZE=2][COLOR=#000090][B]CHR[/B][/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#ff0000]10[/COLOR][/SIZE][SIZE=2])+[/SIZE][SIZE=2][COLOR=#000090][B]CHR[/B][/COLOR][/SIZE][SIZE=2]([/SIZE][SIZE=2][COLOR=#ff0000]13[/COLOR][/SIZE][SIZE=2])  Line$ = [/SIZE][SIZE=2][COLOR=#000090][B]StrChange[/B][/COLOR][/SIZE][SIZE=2](Line$,Sep$,CRLF$)  [/SIZE][SIZE=2][COLOR=#000090][B]Message[/B][/COLOR][/SIZE][SIZE=2]("Line$","")[/SIZE] [/SIZE][/FONT]
 

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

بالا