رفتن به مطلب
  • 0

کدنویسی دیتابیس (هوشتو بسنج)


حمید زارع

سوال

Capture.PNG

 

دوستان این عکس رو ببینید

 

من یه جدول به همین شکل دارم

 

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

 

میدونم برای این کار باید یه sub بنویسم که رکوردهای زیرمجموعه مورد نظر رو حذف کنه

 

ولی اون sub رو نتونستم بنویسم

 

اگه دوستان کسی میتونه یه sub نمونه بنویسه

 

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

 

بازم میگم فقط sub میخام ، راه حل رو دارم 

 

اصلا اگه اشکال نداره همین بشه یه مسابقه کوچولو ببینیم کی بهترین و خلاصه ترین Sub رو مینویسه

 

با تشکر

 
در کدنویسی نام تیبل رو هم مثلاً Table1 در نظر بگیرید
لینک ارسال
به اشتراک گذاری در سایت های دیگر

ارسال‌های توصیه شده

در پست قبلی جوتب داده شد

 

سلام 

دوست من جوابتون رو دیدم

"DELETE FROM tbl WHERE ParentID="&idvar 

ممنون ولی  تا این حد که دیگه خودمم بلدم 

 

میخام یه ماژول باشه که هر وقت صداش زدم یه آی دی از من بگیره و خود اون آی دی و تمام زیر مجموعه هاش رو پاک کنه ...

Sub DeleteSubject(ID as Int)
'کدی که آی دی و تمام زیر مجموعه هاش رو پاک کنه
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

اینجور که نمیشه :eynak:

کدی که خودت واسش نوشتی رو اینجا بزار ما و دوستان بهت کمک می کنیم :eynak:حتی یک خط هم باشه ایرادی نداره تلاش کردی 

 

چشم آقای آرتا

 

این شد حرف حسابی ...

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

 

سلام 

دوست من جوابتون رو دیدم

"DELETE FROM tbl WHERE ParentID="&idvar 

ممنون ولی  تا این حد که دیگه خودمم بلدم 

 

میخام یه ماژول باشه که هر وقت صداش زدم یه آی دی از من بگیره و خود اون آی دی و تمام زیر مجموعه هاش رو پاک کنه ...

Sub DeleteSubject(ID as Int)
'کدی که آی دی و تمام زیر مجموعه هاش رو پاک کنه
End Sub

برادر خودت جواب رو دادی که

 

اینو تست کن

Sub DeleteSubject(ID As Int)
Dim cur As Cursor
cur = db.ExecQuery("SELECT * FROM tbl")
For i = 0 To cur.RowCount -1
	db.ExecNonQuery("DELETE FROM tbl WHERE ParentID="&ID)
Next
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

این کدی که شما نوشتی درست

 

ولی این آی دی و فقط یک ردیف از زیرمجموعه های آی دی رو حذف میکنه

 

ممکن زیر مجموعه های آی دی هرکدوم چندین زیر مجموعه داشته باشن

 

خیلی پیچیده تر از این حرفاست ...

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

من متوجه نمیشم مثلا id 1 شما هزارتا زیر مجموعه هم داشته باشه همیشون Parentid میشه 1 دیگه

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

من متوجه نمیشم مثلا id 1 شما هزارتا زیر مجموعه هم داشته باشه همیشون Parentid میشه 1 دیگه

 

ممنون که وقت میزاری 

 

ببین مثلا من از تصویر بالا میخام A رو حذف کنم

 

باید اول بگردم دنبال زیر مجموعه های A که جواب میشه : A1,A2,A3  اینا رو یه جایی ذخیره می کنم

 

بعد میام سراغ هر کدوم از اینا ببینم زیر مجموعه دارن یا نه ... که برای  A1 سه تا زیر مجموعه داره : AA1,AA2,AA3 که اینا رو هم باید به قبلی ها اضافه کنم

 

تا اینجا کار من تمومه چون بقیه زیر مجموعه ندارن یعنی باید A1,A2,A3  و  AA1,AA2,AA3   را حذف کنم

 

حالا ممکنه زیر مجموعه ها خیلی بیشتر باشن

 

در واقع اون روالی که میخاد زیر مجموعه ها رو پیدا کنه مهمه ....

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

شما برای راحتی کار بیا زیر مجموعه ها رو همه رو با عدد مشخص کن

 

و یه سوال شما میگید a1 , a2 a3 , aa1 تا آخر همه زیر مجموعه a هستن درسته؟

 

خوب چرا parentid متفاوت هست؟

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

ببخشید کلا اصول کارت اشتباه است  ! کسی مجموعه در  یک تیبل به این شکل درست نمیکنه من تا حالا همچین دیتایی در یک تیبل ندیدم !! 

رکوردها باید مجزا باشند نمیتونن از هم ارث ببرند فقط باید با یک ID به هم وصل باشند .. شما باید چند تیبل ایجاد کنی و ریلیشن بزنی به ID  های هم  وقتی  اولی رو پاک کنی که مادر هست همه زیر مجموعه  اتوماتیک پاک میشه ...

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

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

خوب مسلمه که با عدد کار می کنم یعنی همون آی دی ...

 

و سوالتون ...

آفرین زدی توخال 

 

من الان کامل توضیح میدم که بفهمید چی به چیه ؟

 

ببینید من یه همچین دیتابیسی رو برای برنامه حسابداری طراحی کردم این Table برای ذخیره دسته بندی ها به کار میره

 

مثال یک دسته بندی :

 

هزینه های خودرو(ID=1)(ParentID=0) زیرمجموعه هاش  :

بنزین (ID=2)(ParentID=1)

کارواش (ID=3)(ParentID=1)

تعمیرگاه (ID=4)(ParentID=1)

بیمه (ID=5)(ParentID=1)

 

خوب حالا مثلا بیمه خودش زیر مجموعه داره :

بیمه شخص ثالث (ID=6)(ParentID=5)

بیمه بدنه (ID=7)(ParentID=5)

 

در واقع اونایی که ParentID=0 هست ، دسته بندی های اصلی هستند

وبقیه ParentID شون آی دی دسته بندی بالا سرشون هست

 

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

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

ببخشید کلا اصول کارت اشتباه است  ! کسی مجموعه در  یک تیبل به این شکل درست نمیکنه من تا حالا همچین دیتایی در یک تیبل ندیدم !! 

رکوردها باید مجزا باشند نمیتونن از هم ارث ببرند فقط باید با یک ID به هم وصل باشند .. شما باید چند تیبل ایجاد کنی و ریلیشن بزنی به ID  های هم  وقتی  اولی رو پاک کنی که مادر هست همه زیر مجموعه  اتوماتیک پاک میشه ...

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

 

ممنون

ولی من که اصلا با نظرتون موافق نیستم ، چون اصلا امکان پذیر نیست

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

 

بازم اگه شما می گید میشه واسه همین مثال کوچیک که من زدم (هزینه های خودرو) توضیح بدید تا متوجه بشیم ...

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

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

0-----

   1-------

      11-----

1----

   2-------

      22-----

 

تو میتونی Parentid رو به سلیقه خودت بذاری بعد اونو در بیسیک بگیری بررسی کنی و بعد دستورات رو بهش بدی

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

خوبی این روش اینه که هیچ محدودیتی وجود نداره و کاربر میتونه n تا دسته بندی با n تا زیر مجموعه داشته باشه ...

 

دارم یه سری کد نویسی انجام می دم اگه نتیجه داد میزارم همه استفاده کنند فقط مشکل من اینه که زیاد به B4A مسلط نیستم اگه VB بود سریعتر حلش می کردم .

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

خوبی این روش اینه که هیچ محدودیتی وجود نداره و کاربر میتونه n تا دسته بندی با n تا زیر مجموعه داشته باشه ...

 

دارم یه سری کد نویسی انجام می دم اگه نتیجه داد میزارم همه استفاده کنند فقط مشکل من اینه که زیاد به B4A مسلط نیستم اگه VB بود سریعتر حلش می کردم .

زیر مجموعه ها رو به این صورت بساز

1

1-2

1-2-1

1-2-3-1-2-4-5-1

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

بعد بیا در b4a پردازشش کن

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

زیر مجموعه ها رو به این صورت بساز

1

1-2

1-2-1

1-2-3-1-2-4-5-1

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

بعد بیا در b4a پردازشش کن

 

 

میشه یه کم بیشتر توضیح بدی ؟

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

ببین زیر مجموعه هات و زبربن های اونا دارن تغغیر میکنن درسته؟

 

خوب تو باید بدونه مثلا زیر مجموعه شماره 5 چندتا زیر مجموعه داره و مثلا یکی از زیرمجموعه هاش 5-2 هست اون چندتا زیرمجموعه برای خودش داره

 

متوجه منظورم شدی؟

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

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

 

اینو مطمئنم که ساختار دیتابیسی که طراحی کردم درسته (چون برنامه های دیگه هم دیتابیسشون دقیقاً همینجوره)

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

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

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

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

بالاخره نوشتمش ...

خداییش خودم حض کردم از این قطعه کد ... :dance: 

مثل ساعت کار میکنه 

Sub CreateList_ID (ID_Delete As Int) As String
	Dim S_Temp As String
	Dim S_Main As String
	Dim Part() As String

	S_Temp=ID_Delete
	S_Main=ID_Delete

	Do While S_Temp<>""
		Part=Regex.Split("#",S_Temp)
		For i=0 To Part.Length-1
			Main.Cur=Main.SQLACC.ExecQuery("select * from Subjects where ParentID='"&Part(i)&"'")
			If Main.Cur.RowCount<>0 Then
				Main.Cur.Position=0
				S_Temp=""
				For j =0 To Main.Cur.RowCount-1
					Main.Cur.Position=j
					S_Temp=S_Temp & "#" & Main.Cur.GetInt("Id")
					S_Main=S_Main & "#" & Main.Cur.GetInt("Id")
				Next
			Else
				S_Temp=""
			End If
		Next
	Loop
	Return S_Main
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

افرین ولی من کوئری delete نمیبینم فقط اسپلیت مییینم

فکر کنم چشام خیلی خسته هست

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

افرین ولی من کوئری delete نمیبینم فقط اسپلیت مییینم

فکر کنم چشام خیلی خسته هست

 

درسته 

اصل مطلب پیدا کردن لیست آی دی هایی بود که باید حذف می شد

 

ممنون حامد جان که حوصله کردی و وقت گذاشتی

 

اینم قسمت حذف کردن :

Sub DeleteSubject(ID_Delete As String)
	Dim IDs As String
	Dim Part() As String
	IDs=CreateList_ID(ID_Delete)
	
	Part=Regex.Split("#",IDs)
	For i=0 To Part.Length
		Main.SQLACC.ExecnONQuery("delete from Subjects where Id='"&Part(i)&"'")
	Next
	Msgbox(IDs,"حذف شدند")
End Sub
لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

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

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

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