آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

مشکل با دیتابیس (حل شد)

alfredo  10 سال پیش  10 سال پیش
0 0

سلام استاد

من طبق این دستور فایل دیتابیس رو داخل اپدلیگیت ایجاد میکنم:

func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
        // Override point for customization after application launch.
        let db = DB.getInstance()
        let columns = [
            "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT",
            "name TEXT NOT NULL",
            "text TEXT NOT NULL",
                       ]
        db.createTable("contact", withColumnNamesAndParam: columns)

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

  let db = DB.getInstance()
        db.executeChange("INSERT INTO  contact (name, text) VALUES('ahmad',  'alakitext'")

فایل دیتابیس ایجاد میشه ولی حجمش ۰ کیلوبایت هست. و با برنامه TextEditor که بازش میکنم داخلش خالیه. و از توی خود Xcode که با دستور executeQuery کوری میگیرم ازش. داخل کنسول این رو برام چاپ میکنه

Database Error  -> During: SQL Prepare
                -> Code: 1 - SQL error or missing database
                -> Details: near "FROM": syntax error

nil

 

 

+1 0
اول از همه اینکه لطفا ویدئو ها رو با دقت ببنید، دوم اینکه برای خواندن اطلاعات داخل دیتابیس از ابزاری که در آموزش ها معرفی شده استفاده کنید، سوم اینکه دستور خواندن داده شما همانطور که در خطا مشخص شده ایراد دارد و باید ابتدا سینتکس را اصلاح کنید . (10 سال پیش)
0 0
استاد با دقت نگاه میکنم. ولی خوب من کلا یکم گیجم. سه چهار بار نگاه کردم استاد همه چیزو. همه دستوراتش مو به موی دستورات آموزش هست. از اون افزونه فایرفاکس هم استفاده کردم هیچی نشون نمیده. تعداد تیبل هارو ۰ زده. بنظرتون کج (10 سال پیش)
0 0
بنظرتون کجاهارو دوباره بررسی کنم؟ (10 سال پیش)
+1 0
مشکل شما این هست که عجله میکنید و این عجله باعث بی دقتی شما میشه . یه عکس از ابزار SqliteManager قرار بدید که توش وضعیت دیتابیس رو نمایش میده . همچنین بررسی کنید آیا بعد از درج رکورد با دستور executeChange آیا خطایی هم سیستم به شما میده یا نه . در صورتی که هیچ مشکلی نبود یکبار فایل دیتابیس رو به صورت دستی از دستگاه پاک کنید و از اول یک دیتابیس رو بسازید . (10 سال پیش)
 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
alfredo  10 سال پیش
0 0

تصویر:

بعد از درج دستور ‌executeChange هم هیچ خطایی نمیده...

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

از اینکه همش مزاحم شما میشم شرمسارم :(

 

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

            "id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT",
+1 0
اگر در زمان ایجاد دیتابیس و درج رکورد خطایی نمیگیره ، احتمالا شما به اشتباه دارید فایل دیگه ای رو میبینید . دستور Select رو به شکل کاملا ساده : "SELECT * FROM contact" اجرا کنید و بعد نتیجه را اعلام کنید . (10 سال پیش)
0 0
فرقی نکرد. همون پیغام قبلی رو میده. (10 سال پیش)
0 0
استاد یادتونه شما AUTOINCEREMENT رو اشتباه نوشتید بهتون خطا میداد ؟ من از عمد هم که اشتباه مینویسمش بهم خطا نمیده ! (10 سال پیش)
+1 0
طبیعتا وقتی یکبار تیبل ایجاد شده باشه دفعه بعد تیبل تکراری ایجاد نمیشه و نباید خطایی به شما بده . به نظرم باز یه جایی از کارتون ایراد داره وگرنه دلیلی برای این مشکل نباید باشه ، اگر خواستید میتونم روی سیستمتون با تیم ویور مشکل رو بررسی کنم . (10 سال پیش)
0 0
ممنونم استاد. تا این حد نمیخواستم مزاحمتون بشم. الان میرم کدهارو عینا از پروژه خودتون کپی میکنم ببینیم شاید درست بشه. (10 سال پیش)
+1 0
اگر شرایطی که توضیح دادید درست باشه دیتابیس شما اصلا ساخته نمیشه . (10 سال پیش)
0 0
استاد پروژه شما باز نمیشه توی ایکس کد من. استاد تیم ویور نصب میکنم الان :(( (10 سال پیش)
+1 0
مشکلتون از اونجایی هست که باز بی دقتی کردید بهمراه عجله و پرانتز مربوط به VALUES رو نبستید . (10 سال پیش)
+1 0
به نظرم اگر به سوالات شما پاسخ ندم ، سعی میکنید خودتون مشکل رو حل کنید و با توجه به این موضوع بیشتر دقت میکنیم و کمتر عجله ، اینطوری نتیجه مطلوب تری هم خواهید گرفت :) (10 سال پیش)
0 0
استاد اون هم درست کردم باز هم توفیری حاصل نشد. :( (10 سال پیش)
+1 0
با توجه به شواهد نشون میده شما یه جای کارت باز ایراد داره ، من همین کد های شما رو وارد کردم و مشکلی نداشت بغیر از همون بخش مربوط به VALUES ، رفع این مشکل رو به خودتون واگذار میکنم تا ببنید کجا اشتباه کردید ، یکبار پروژه رو کامل حذف کنید و یک پروژه جدید باز کنید و مرحله به مرحله با آموزش ها برید جلو . (10 سال پیش)
0 0
استاد معمولا قبل از اینکه اینجا سوالی مطرح کنم. توی گوگل سرچ میکنم و چندین بار بررسی میکنم. بعدش مزاحم شما میشم. ولی خوب کلا چشمم خیلی اشتباهات رو نمیبینه و این ضعف رو دارم. کلا در تمام عرصه های زندگی مشکل ندیدن رو دارم. دست خودم نیست :(( (10 سال پیش)
0 0
چشم. از اول می سازم. (10 سال پیش)
0 0
استاد از اول ساختم درست شد !‌ولی آخرش متوجه نشدم اشتباهم کجا بوده. خیلی زحمتتون دادم. شرمندم بخدا. (10 سال پیش)
پاسخ به سوال 
alfredo  10 سال پیش
0 0

به یک مورد جالب برخوردم. اینجا میگم شاید روزی گره گشای کسی دیگه بشه

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

با بررسی مرحله به مرحله متوجه شدم که من نام یکی از ستون های دیتابیس رو "limit" قرار میدادم. البته از روی عمد. و بعد از کلنجارهای فراوان و تغییر نام  limit به limits مشکل برطرف شد ! گویا از هر اسمی هم نمیشه بعنوان نام برای ستون های جدول استفاده کرد ! البته این تجربه شخصی من بود و براش هیچ رفرنسی ندارم.

+1 0
بله ، استفاده کردن از اسامی خاص یا Keyword ها در sql باید تحت شرایط خاصی انجام بشه ، هرچند که توصیه میکنم از این اسامی استفاده نکنید . البته به مشکل شما در بالا ارتباطی نداره این مسئله و در واقع یک مشکل جدید بوده . این لینک کلید های Sqlite رو معرفی کرده . (10 سال پیش)
0 0
استاد اگه بخوایم لیتسمون آپدیت بشه بدون اینکه کل اطلاعات حذف بشند و دوباره نوشته بشند. راه ساده ای براش وجود داره؟ (10 سال پیش)
+1 0
اطلاعات از روی دیتابیس حذف نمیشن از لیست ارایه خالی میشه ، شما میتونید خونه های آرایه رو دونه به دونه اصلاح کنید، ولی کار منطقی نیست و از نظر پرفرمنس این روش مشکلی نداره . (10 سال پیش)
0 0
با این وضعیت قابلیت سورت کردن برای لیست وجود داره؟ (10 سال پیش)
+1 0
سورت کرده آرایه ارتباطی با این موضوع نداره ، زمانی که شما به آرایه صورت متن و یا عددی دارید راحت میتونید سورتش کنید ، ولی زمانی که ساختمان داده ای از اطلاعات رو دارید باید خودتون الگوریتمی برای چیدمانش در سمت سرور و یا کلاینت بنویسید . مثلا در سمت سرور شما آرایه ارساللی را بر اساس شناسه ID و یا Name به صورت DESC و یا ASC مرتب میکنید . (10 سال پیش)

پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .