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

خطا به هنگام فراخوانی دیتابیس


احسان عزت زاده اصل

سوال

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

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=55 (# cursors opened by this proc=55)

    at android.database.CursorWindow.<init>(CursorWindow.java:108)

    at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)

و کد بصورت زیر هست:

Dim cure As Cursor = mysql.ExecQuery("SELECT * FROM English WHERE English_Word LIKE  '%"&userworden&"%' ")

		lblecount.Text = cure.RowCount 
		lblecount.Visible = True
		Imgerecord.Visible = True
Try
		If cure.RowCount > 0 Then
	
			For i=0 To cure.RowCount - 1
				cure.Position = i
				Dim enide As Int = cure.GetString("Word_ID")
				Dim cure2 As Cursor
				cure2 = mysql.ExecQuery2("SELECT * FROM Farsi WHERE English_ID =? " , Array As String(enide))
				
				cure2.Position = 0
				
				Dim logate As String = cure2.GetString("Farsi_Word")
				Dim loagatee As String = cure.GetString("English_Word")
				Dim pe2 As Panel
				pe2.Initialize("")
				customenglist.Add(pe2 , 250dip , "" )
				pe2.Left = 0
				pe2.Width = 100%x
				pe2.LoadLayout("Ltempe")
				lblfaword.Height = 10%y
				lblemani.Height = 12%y
				lblemani.Top= 11%y
				btnsen.Height = 11%y
				btnsen.Top = 10%y
			
				btnsen.Tag = loagatee
			
				lblfaword.Text = logate
				lblemani.Text = cure.GetString("English_Word")
			
			Next
		
			Else
				ToastMessageShow("هیچ نتیجه ای یافت نشد" , False)	
		End If
		cure.Close
		'cure2.Close
		Catch
			ToastMessageShow("خطا، لطفا بعدا امتحان نمایید",True)
	End Try

 

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

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

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

در ۱۴۰۰/۷/۳ در 01:12، fun_code گفته است:

سلام مجدد

در ۱۴۰۰/۷/۳ در 01:12، fun_code گفته است:

سلام مجدد

کلا جهت تست پیش از دستور next شما cure2.close رو بنویسید ببینید مشکل برطرف نمیشه ؟

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

سلام. نه متاسفانه درست نشد.

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

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

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

در ۱۴۰۰/۷/۸ در 08:53، امین مهدی نژاد گفته است:

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

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

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

در ۱۴۰۰/۶/۲۹ در ۱۱:۱۸، احسان عزت زاده اصل گفته است:

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

android.database.CursorWindowAllocationException: Cursor window allocation of 2048 kb failed. # Open Cursors=55 (# cursors opened by this proc=55)

    at android.database.CursorWindow.<init>(CursorWindow.java:108)

    at android.database.AbstractWindowedCursor.clearOrCreateWindow(AbstractWindowedCursor.java:198)

و کد بصورت زیر هست:

Dim cure As Cursor = mysql.ExecQuery("SELECT * FROM English WHERE English_Word LIKE  '%"&userworden&"%' ")

		lblecount.Text = cure.RowCount 
		lblecount.Visible = True
		Imgerecord.Visible = True
Try
		If cure.RowCount > 0 Then
	
			For i=0 To cure.RowCount - 1
				cure.Position = i
				Dim enide As Int = cure.GetString("Word_ID")
				Dim cure2 As Cursor
				cure2 = mysql.ExecQuery2("SELECT * FROM Farsi WHERE English_ID =? " , Array As String(enide))
				
				cure2.Position = 0
				
				Dim logate As String = cure2.GetString("Farsi_Word")
				Dim loagatee As String = cure.GetString("English_Word")
				Dim pe2 As Panel
				pe2.Initialize("")
				customenglist.Add(pe2 , 250dip , "" )
				pe2.Left = 0
				pe2.Width = 100%x
				pe2.LoadLayout("Ltempe")
				lblfaword.Height = 10%y
				lblemani.Height = 12%y
				lblemani.Top= 11%y
				btnsen.Height = 11%y
				btnsen.Top = 10%y
			
				btnsen.Tag = loagatee
			
				lblfaword.Text = logate
				lblemani.Text = cure.GetString("English_Word")
			
			Next
		
			Else
				ToastMessageShow("هیچ نتیجه ای یافت نشد" , False)	
		End If
		cure.Close
		'cure2.Close
		Catch
			ToastMessageShow("خطا، لطفا بعدا امتحان نمایید",True)
	End Try

 

سلام

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

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

در ۱۴۰۰/۷/۱ در 21:52، fun_code گفته است:

سلام

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

نه دیتا افزایش پیدا نکرده قبلا که استفاده میکردم تو جستجو بیشتر از 600 مورد رو میاورد ولی الان که میخواستم در قسمت های دیگه برنامه تغییر ایجاد کنم تصادفی دیدم که مثل قبل نیست و حتی بیشتر 30 مورد رو نمیتونه فراخوانی کنه و این خطارو میده.

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

در ۱۴۰۰/۷/۲ در ۱۱:۳۱، احسان عزت زاده اصل گفته است:

نه دیتا افزایش پیدا نکرده قبلا که استفاده میکردم تو جستجو بیشتر از 600 مورد رو میاورد ولی الان که میخواستم در قسمت های دیگه برنامه تغییر ایجاد کنم تصادفی دیدم که مثل قبل نیست و حتی بیشتر 30 مورد رو نمیتونه فراخوانی کنه و این خطارو میده.

سلام مجدد

کلا جهت تست پیش از دستور next شما cure2.close رو بنویسید ببینید مشکل برطرف نمیشه ؟

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

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

بایگانی شده

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

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

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