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

ارور در ساخت کتاب با b4a و پایگاه داده


mahdilotfi

سوال

سلام من با استفاده از پایگاه داده خواستم یه کتاب بسازم
تا نوشتن کد کپی پایگاه داده در حافظه گوشی همه چیز خوب کار میکنه :

IF File.Exist(File.DirInternal , "database.db") = False Then

File.Copy(File.DirAssets , "database.db" , File.DirInternal , "database.db")

End IF

اما بعد از مقدار دهی sql با کد :

(sql1.initialize ( file.dirinternal , "database.db" , false

 به محض کامپایل و اجرا تو شبیه ساز پیغام خطا میده و مینویسه 'متسفانه ........ متوقف شده است'
خواهش میکنم کمک کنید

نسخه b4a 7.80

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

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

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

درود

خطایی که میده رو بذار تا برسی بشه

If File.Exists(File.DirInternal,"database.db")=False Then
	File.Copy(File.DirAssets,"database.db",File.DirInternal,"database.db")
End If
sql.Initialize(File.DirInternal,"database.db",False)

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

 

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

در 10 ساعت قبل، mahdilotfi گفته است :

سلام من با استفاده از پایگاه داده خواستم یه کتاب بسازم
تا نوشتن کد کپی پایگاه داده در حافظه گوشی همه چیز خوب کار میکنه :

IF File.Exist(File.DirInternal , "database.db") = False Then

File.Copy(File.DirAssets , "database.db" , File.DirInternal , "database.db")

End IF

اما بعد از مقدار دهی sql با کد :

(sql1.initialize ( file.dirinternal , "database.db" , false

 به محض کامپایل و اجرا تو شبیه ساز پیغام خطا میده و مینویسه 'متسفانه ........ متوقف شده است'
خواهش میکنم کمک کنید

نسخه b4a 7.80

با این چک کنید ببنید توی direxternal میشه ریخت یا نه
  

 If File.ExternalWritable = True Then

اینم کدایی که من ازشون استفاده میکنم
خود sql رو توی سرویس استارتر تعریف کنید و تو اون ازش استفاده کنید
 

Sub existdb(dbname As String)
	If File.ExternalWritable = True Then
	

		If File.Exists( File.DirRootExternal,"Qdb/"&dbname) Then
			File.Delete( File.DirRootExternal,"Qdb/"&dbname)
			Log("deleted")
	
			File.Copy(File.DirAssets,dbname, File.DirRootExternal,"Qdb/"&dbname)
			ToastMessageShow("copied",False)

		Else
			File.MakeDir(File.DirRootExternal,"Qdb")
			If File.Exists( File.DirRootExternal,"Qdb") Then
			File.Copy(File.DirAssets,dbname, File.DirRootExternal,"Qdb/"&dbname)
			ToastMessageShow("copied",False)
		End If
		
		End If
	Else
	
		If File.Exists( File.DirInternal,"Qdb/"&dbname) Then
			File.Delete( File.DirInternal,"Qdb/"&dbname)
			Log("deleted")
	
			File.Copy(File.DirAssets,dbname, File.DirInternal,"Qdb/"&dbname)
			ToastMessageShow("copied",False)

		Else
			File.MakeDir(File.DirInternal,"Qdb")
			If File.Exists( File.DirInternal,"Qdb/"&dbname) Then
			File.Copy(File.DirAssets,dbname, File.DirInternal,"Qdb/"&dbname)
			ToastMessageShow("copied",False)
		
		End If
		End If
	End If
	

End Sub

Sub initdb(dbname As String)
	Log("ANSWER"&File.Exists( File.DirRootExternal,"Qdb/"&dbname))
	If File.Exists( File.DirRootExternal,"Qdb/"&dbname) = True Then
		starter.sql.Initialize( File.DirRootExternal,"Qdb/"&dbname,False)
		Log("init:"&starter.sql.IsInitialized)
	End If

	
End Sub

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

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

سلام کل کد ها :

Sub Process_Globals
    Dim sql1 As SQL
    

End Sub


Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout1")
    If File.Exists(File.DirInternal , "database.db") = False Then
        File.Copy(File.DirAssets , "database.db" , File.DirInternal , "database.db")
    

        sql1.Initialize(File.DirInternal , "database.db" , False)

End Sub

و پیغام های خطای بعد از کامپایل :

*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
main_activity_create (java line: 344)
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
    at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:792)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
    at anywheresoftware.b4a.sql.SQL.Initialize(SQL.java:44)
    at b4a.example.main._activity_create(main.java:344)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:186)
    at b4a.example.main.afterFirstLayout(main.java:102)
    at b4a.example.main.access$000(main.java:17)
    at b4a.example.main$WaitForLayout.run(main.java:80)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5019)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    at dalvik.system.NativeStart.main(Native Method)
 

خواهش میکنم کمک کنید

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

در 6 دقیقه قبل، mahdilotfi گفته است :

سلام کل کد ها :

Sub Process_Globals
    Dim sql1 As SQL
    

End Sub


Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout1")
    If File.Exists(File.DirInternal , "database.db") = False Then
        File.Copy(File.DirAssets , "database.db" , File.DirInternal , "database.db")
    

        sql1.Initialize(File.DirInternal , "database.db" , False)

End Sub

و پیغام های خطای بعد از کامپایل :

*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
main_activity_create (java line: 344)
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
    at android.database.sqlite.SQLiteConnection.nativeOpen(Native Method)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:209)
    at android.database.sqlite.SQLiteConnection.open(SQLiteConnection.java:193)
    at android.database.sqlite.SQLiteConnectionPool.openConnectionLocked(SQLiteConnectionPool.java:463)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:185)
    at android.database.sqlite.SQLiteConnectionPool.open(SQLiteConnectionPool.java:177)
    at android.database.sqlite.SQLiteDatabase.openInner(SQLiteDatabase.java:804)
    at android.database.sqlite.SQLiteDatabase.open(SQLiteDatabase.java:792)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:694)
    at android.database.sqlite.SQLiteDatabase.openDatabase(SQLiteDatabase.java:669)
    at anywheresoftware.b4a.sql.SQL.Initialize(SQL.java:44)
    at b4a.example.main._activity_create(main.java:344)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:186)
    at b4a.example.main.afterFirstLayout(main.java:102)
    at b4a.example.main.access$000(main.java:17)
    at b4a.example.main$WaitForLayout.run(main.java:80)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5019)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    at dalvik.system.NativeStart.main(Native Method)
 

خواهش میکنم کمک کنید

اگه با نویکت دیتابیستو ساختی sql3 رو امتحان کن
منم یه همچین مشکلی داشتم گذاشتم رو sql3 برطرف شد
 

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

اس کیو ال 3 رو هم امتحان کردم اینیشالیز با موفقیت انجام میشه اما بعد از مقدار دهی متغیر cursor دوباره با همون مشکل مواجه میشم

کل کدها :

Sub Process_Globals
    Dim sql1 As SQL
    

End Sub


Sub Activity_Create(FirstTime As Boolean)
    Activity.LoadLayout("layout1")
    If File.Exists(File.DirInternal , "database.db") = False Then
        File.Copy(File.DirAssets , "database.db" , File.DirInternal , "database.db")
    

        sql1.Initialize(File.DirInternal , "database.db" , False)

    Dim cur As Cursor
    
    cur = sql1.ExecQuery("SELECT * FROM table")

End Sub

کد های خطا :

*** Service (starter) Create ***
** Service (starter) Start **
** Activity (main) Create, isFirst = true **
main_activity_create (java line: 348)
android.database.sqlite.SQLiteException: no such table: book2 (code 1): , while compiling: SELECT * FROM book2
    at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method)
    at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:889)
    at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:500)
    at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588)
    at android.database.sqlite.SQLiteProgram.<init>(SQLiteProgram.java:58)
    at android.database.sqlite.SQLiteQuery.<init>(SQLiteQuery.java:37)
    at android.database.sqlite.SQLiteDirectCursorDriver.query(SQLiteDirectCursorDriver.java:44)
    at android.database.sqlite.SQLiteDatabase.rawQueryWithFactory(SQLiteDatabase.java:1314)
    at android.database.sqlite.SQLiteDatabase.rawQuery(SQLiteDatabase.java:1253)
    at anywheresoftware.b4a.sql.SQL.ExecQuery2(SQL.java:223)
    at anywheresoftware.b4a.sql.SQL.ExecQuery(SQL.java:211)
    at b4a.example.main._activity_create(main.java:348)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at anywheresoftware.b4a.BA.raiseEvent2(BA.java:186)
    at b4a.example.main.afterFirstLayout(main.java:102)
    at b4a.example.main.access$000(main.java:17)
    at b4a.example.main$WaitForLayout.run(main.java:80)
    at android.os.Handler.handleCallback(Handler.java:733)
    at android.os.Handler.dispatchMessage(Handler.java:95)
    at android.os.Looper.loop(Looper.java:136)
    at android.app.ActivityThread.main(ActivityThread.java:5019)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:515)
    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:779)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:595)
    at dalvik.system.NativeStart.main(Native Method)
 

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

میگه تیبلی به اسم book2 پیدا نمیکنه
دیتابیستون رو چک کنید ببینید تیبلی به اسم دارید اصلا یا نه دقت کنید اسم تیبل رو باید بدید نه connection  یا ستون
و همونطور که گفتم توی استارتر سرویس تعریف کنید sql رو و از اونجا فراخوانی کنیدش
strater.sql1

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

خیلی خیلی ممنون درسته اسم جدول book بود نه book2 مشکلم حل شد خیلی ممنون

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

بایگانی شده

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

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

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