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

ذخیره نشدن id تکراری در دیتابیس


alireza-love

سوال

سلام و خسته نباشید

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

خب تا اینجا مشکلی نیست

تو سرور هر متنی که هست یه فیلد id هم داره

این id هم دریافت میشه و تو دیتابیس گوشی ذخیره میشه

کاربر یه بار درخواست میکنه و از سرور میاد دانلود میشه و id های 1 و 2 تو گوشیش ذخیره میشه خب یبار دیگه که درخواست بشه دوباره میاد 1 و 2 ذخیره میشه

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

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

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

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

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

اینو تست بفرمایید :

 Dim cur1 As Cursor
    
    cur1 = s90.ExecQuery("SELECT count(id) FROM tbl1 WHERE id= '"&b(0)&"' ")
    cur1.Position = 0
    If cur1.GetInt("count(id)") = 0 Then
            s90.ExecNonQuery("INSERT INTO tbl1 (id,onvan,matn) VALUES('"& lb1.Text &"' , '"& lb2.Text &"' , '"& lb3.Text &"' ) ")
    End If 
لینک ارسال
به اشتراک گذاری در سایت های دیگر

فیلد مورد نظر رو Primary Key قرار بده تا از ورود داده تکراری جلوگیری کنه

طبق عکس زیر:

attachment.php?attachmentid=408&stc=1

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

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

 

post-2383-0-04308800-1436791748_thumb.png

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

فیلد مورد نظر رو Primary Key قرار بده تا از ورود داده تکراری جلوگیری کنه

طبق عکس زیر:

http://answercenter.ir/attachment.php?attachmentid=408&stc=1

کدامین تصویر برادر :S

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

داداش مشکل من اینه 

 

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

 

attachicon.gif 002.png

 

 

 

کدامین تصویر برادر :S

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

به این صورت :

	cur1 = query.ExecQuery("SELECT count(id) FROM offline WHERE id='id_db'")
	cur1.Position = 0
	If cur1.GetInt("count(id)") = 0 Then
		'your query insert'
	End If
لینک ارسال
به اشتراک گذاری در سایت های دیگر

 

به این صورت :

	cur1 = query.ExecQuery("SELECT count(id) FROM offline WHERE id='id_db'")
	cur1.Position = 0
	If cur1.GetInt("count(id)") = 0 Then
		'your query insert'
	End If

یه سوال اینا چین

id_db

count(id)

offline

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

id_db : شماره آی دی که میخوای بررسی کنی تو دیتابیس هست یا نه

count(id) : این تابع count میاد میشماره تعداد id هایی که وجود داره اگه صفر بود اجازه اینزرت میده در غیر این صورت اجازه نمیده

offline : اسم تیبل

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

id_db : شماره آی دی که میخوای بررسی کنی تو دیتابیس هست یا نه

count(id) : این تابع count میاد میشماره تعداد id هایی که وجود داره اگه صفر بود اجازه اینزرت میده در غیر این صورت اجازه نمیده

offline : اسم تیبل

id_db : شماره آی دی که میخوای بررسی کنی تو دیتابیس هست یا نه

اینو باید ایدی دیتابیس  انلاین رو بزنم یا افلاین

شماره ای دی ندارم بار اول ساید ای دی 1 باشه ولی هقتی 50 تا خط نوشت تو دیتابیس اونوقت من ای دی رو از کجا بیارم

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

گفتید دارید آی دی را از دیتابیس آنلاین به آفلاین میفرستید آی دی دیتابیس آنلاین رو قرار بدید دیگه ولی تو دیتابیس آفلاین جستجو کنه :)

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

گفتید دارید آی دی را از دیتابیس آنلاین به آفلاین میفرستید آی دی دیتابیس آنلاین رو قرار بدید دیگه ولی تو دیتابیس آفلاین جستجو کنه :)

من با اسپلیت جدا کردم و ای دی دیتابس انلاینم رو مساوی lb1.text گذاشتم همینو میزارم جواب نمیده باز تکرار میشه

Dim cur1 As Cursor
	
	cur1 = s90.ExecQuery("SELECT count(id) FROM tbl1 WHERE id= 'lb1.text' ")
	cur1.Position = 0
	If cur1.GetInt("count(id)") = 0 Then
			s90.ExecNonQuery("INSERT INTO tbl1 (id,onvan,matn) VALUES('"& lb1.Text &"' , '"& lb2.Text &"' , '"& lb3.Text &"' ) ")
	End If
				

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

عزیز تو دیتابیس آنلاین آی دی عدد هست که از 1 تا به اندازه رکورد هاتون عدد هست مثلا از 1 تا 100 شما اومدی برابر با lb1.text قرار دادی این که اصلا شبیه آی دی هم نیست باید هم جواب نده . :)

 

سورس کاملتون قرار بدید ببینم چجوری دیتابیس انلاین را دریافت کردید . :)

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

عزیز تو دیتابیس آنلاین آی دی عدد هست که از 1 تا به اندازه رکورد هاتون عدد هست مثلا از 1 تا 100 شما اومدی برابر با lb1.text قرار دادی این که اصلا شبیه آی دی هم نیست باید هم جواب نده . :)

 

سورس کاملتون قرار بدید ببینم چجوری دیتابیس انلاین را دریافت کردید . :)

اینم سورس کامل

#Region  Project Attributes 
	#ApplicationLabel: B4A Example
	#VersionCode: 1
	#VersionName: 
	'SupportedOrientations possible values: unspecified, landscape or portrait.
	#SupportedOrientations: unspecified
	#CanInstallToExternalStorage: False
#End Region

#Region  Activity Attributes 
	#FullScreen: False
	#IncludeTitle: True
#End Region

Sub Process_Globals
	'These global variables will be declared once when the application starts.
	'These variables can be accessed from all modules.

End Sub

Sub Globals
	'These global variables will be redeclared each time the activity is created.
	'These variables can only be accessed from this module.
Dim fara As Farakhani
	Private ListView1 As ListView
	Dim cur1 As Cursor
		Dim job1 As HttpJob
	Private Label1 As Label
	Private Label2 As Label
	Private Label3 As Label
	Dim s90 As SQL

End Sub

Sub Activity_Create(FirstTime As Boolean)
	'Do not forget to load the layout file created with the visual designer. For example:
	Activity.LoadLayout("1")

	
	
	If File.Exists(File.DirInternal,"ketab5.db")= False Then
	File.Copy(File.DirAssets,"ketab5.db",File.DirInternal,"ketab5.db")
	End If
	
	If s90.IsInitialized=False Then
	s90.Initialize(File.DirInternal,"ketab5.db",True)
	End If
	job1.Initialize("job1" , Me)
	job1.Download("http://noti1.xzn.ir/index.php")
	ProgressDialogShow2("لطفا کمی صبر کنید..." , False)
	

End Sub


Sub JobDone (job As HttpJob)
ProgressDialogHide
If job.Success = True Then 
	Select Case job.JobName
		Case "job1"
			
			Dim a() As String
			a = Regex.Split("<br>",job1.GetString)
			Log(a.Length)
		
		
			For i=0 To a.Length-1
			
				Dim b() As String
				b = Regex.Split("-", a(i))
			
				
		Dim lb1 , lb2 , lb3 As Label
		lb1.Initialize("lb1")
		lb2.Initialize("lb2")
		lb3.Initialize("lb3")
						
		lb1.text = b(0)
		lb2.text = b(1)
		lb3.text = b(2)
			'	ListView1.AddTwoLines(b(0), b(1)& " . " & b(2))
			Dim t1  As Label
			t1.Initialize("t1")
		
			
	Dim cur1 As Cursor
	
	cur1 = s90.ExecQuery("SELECT count(id) FROM tbl1 WHERE id= 'lb1.text' ")
	cur1.Position = 0
	If cur1.GetInt("count(id)") = 0 Then
			s90.ExecNonQuery("INSERT INTO tbl1 (id,onvan,matn) VALUES('"& lb1.Text &"' , '"& lb2.Text &"' , '"& lb3.Text &"' ) ")
	End If
				

			Next
				
				fara.SingleLineTitr("ketab5.db",s90,cur1,"SELECT * FROM tbl1  ",ListView1,"onvan","id")
		Case "job2"
			ToastMessageShow("گزینه مورد نظر شما حذف شد.",False)
			ListView1.Clear
			job1.Download("http://noti1.xzn.ir/index.php")
			ProgressDialogShow2("لطفا کمی صبر کنید..." , False)	
	End Select
Else 
	ToastMessageShow("مشکلی در ارسال وجود دارد لطفا دوباره تلاش کنید." , False)
End If 
job.Release

End Sub



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

بایگانی شده

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

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

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