PDA

View Full Version : سوال: چکار کنم ذخیره داده در اکسس تاخیر در فرایند خواندن از پورت سریال و نمایشش ایجاد نکنه؟



elahe1393
سه شنبه 27 آبان 1393, 13:57 عصر
سلام
برنامه از طریق پورت سریال با دستگاه در ارتباط است
من برروی رویداد کلیک دکمه شروع برنامه یه ترد ساختم که فرایند خواندن از پورت سریال رو انجام میده باید داده هایی که از پورت خونده میشه برروی نمودار رسم کنم و همچنین برای اینکه در گزارش بعدا نیاز به این داده ها دارم باید در دیتابیس اکسس ذخیره اش کنم توی تابع ترد ابتدا یه بسته داده میخونم اونو تفکیک میکنم تا مقادیر موردنظرمو بدست بیارم بعد این مقادیر رو روی نمودار رسم میکنم هنگام رسم همون داده هارو در دیتابیس ذخیره میکنم الان مشکلی که دارم اینه که بعد از کلیک روی دکمه شروع ابتدای کار واکنش دستگاه با خواندن از پورت و رسم همزمانه ولی به مرور زمان خواندن از پورتم نسبت به واکنش دستگاه کند میشه و رسم از realtime بودن درمیاد هنگام بررسی فهمیدم زمانیکه صرف ذخیره داده در دیتابیس میشه باعث کند شدن اجرای تردم میشه
سرعت ارسال داده دستگاه روی بافر پورت با سرعت خوندن برنامه از بافر پورت برابر نیست بخاطر ذخیره داده در دیتابیس هنگام خوندن از پورت
اومدم کد مربوط به ذخیره داده رو حذف کردم مشکل حل شد ولی من میخوام همون حین داده هارو در دیتابیس ذخیره کنم چه کنم؟؟؟؟

elahe1393
چهارشنبه 28 آبان 1393, 07:51 صبح
کسی راهنمایی برای من نداره
چه کنم؟

elahe1393
چهارشنبه 28 آبان 1393, 08:57 صبح
دستگاه دارای دو بازو هست که برنامه تنظیم میکنه که این بازو ها در تمرین چندبار حرکت کنن من میخوام داده هایی که در هر تکرار حرکت مخصوص هر بازو روی نمودار مربوطه همزمان رسم بشه و همچنین این داده هارو تو دیتابیس ذخیره کنم که هنگام گرفتن گزارش بتونم ازشون استفاده کنم و نمودار رو در صورت درخواست مجدد رسم کنم اول ذخیره در دیتابیس رو تو همون ترد مخصوص خواندن گذاشته بودم که هر نقطه اطلاعاتش دریافت شد همون زمان در دیتابیس ذخیره بشه ولی این چون نیاز داشت به اکسس وصل بشه در هر ثانیه نیاز بود حداقل 10بار اینکاررو انجام بده و این باعث عقب افتادن خواندن از پورت نسبت به ارسال دیتا به پورت میشد بعدش اومدم ذخیره در دیتابیس رو موازی خواندن از پورت نوشتم تغییری نکرد شاید تاخیر بیشتر شد بعد اومدم توی ترد خواندن نقطه دریافتی رو تو یه لیست نقاط قرار دادم و گفتم هروقت خواست بره سراغ تکرار بعدی این نقاط که مال تکرار قبلی بوده رو تو دیتابیس ذخیره کن ولی این قضیه باعث مکث تو برنامه برای رسم نمودار میشد و یه مقدار از داده هام هم از دست میرفت چون حین ذخیره کردن یه سری دیتا به پورت ارسال میشد که من نمیتونستم بخونمشون چون داشتم داده ذخیره میکردم اگر بخوام هم همه نقاط رو تو لیست ذخیره کنم و بعد از اتمام کار تو دیتابیس ذخیره کنم دوتا مشکل دارم یکی اینکه نمیتونم تشخیص بدم نقطه برای کدوم تکرار و کدوم بازو هست و دوم اینکه اگر یه زمان شخص بخواد تمرین رو ناتموم بذاره اطلاعات از دستم میره نمیدونم چیکار باید بکنم این نقاط رو چطوری ذخیره کنم که رسم نمودارم همزمان باشه کلیه نقاط هم دریافت بشه و ذخیره بشه و تشخیص بدم نقطه مال کدوم تکرار و کدوم بازو هست تا تو رسم نمودار برای گزارش بتونم استفاده کنم راه حل چیه راهنمایی کنید؟

hamid_hr
چهارشنبه 28 آبان 1393, 09:00 صبح
خب یه تابع بنویس برا ذخیره تو فایل
بعد تابعو با ترد اجراش کن

elahe1393
چهارشنبه 28 آبان 1393, 09:14 صبح
یعنی بنظرتون من داده های تو هر تکرار رو تو یه فایل ذخیره کنم بعد برای اینکه تشخیص بدم این تکرار برای کدوم بازو و تکرار چندمه با یه سری مشخصات تو دیتابیس اکسسم ذخیره کنم یعنی حین اجرای برنامه نقاط تو فایل ذخیره بشه بعد وقتی تکرار تموم شد اون فایل رو با مشخصات اون تکرار در دیتابیس ذخیره کنم اینجوری سرعت بالا میره یعنی ذخیره تو فایل سریعتر از ذخیره در دیتابیس هست یعنی در ثانیه ده بار تو فایل بنویسم سریعتر از تو ثانیه ده بار تو دیتابیس ذخیره کنمه؟
این چیزی بود به ذهنم رسید خواستم بپرسم ببینم درسته نتیجه دلخواهمو میده؟

hamid_hr
چهارشنبه 28 آبان 1393, 09:54 صبح
خب چرا از دیتابیس sqlite استفاده نمیکنی

elahe1393
چهارشنبه 28 آبان 1393, 11:02 صبح
با این دیتابیس زیاد آشنا نیستم
الان یه کار دیگه کردم داده هامو توی یه متغیر رشته ای ریختم بعد هر زمان خواست بره تکرار بعدی متغیر رو تو دیتابیس با مشخصات تکرار و بازو ذخیره میکنم ولی نوع فیلد اکسس تکست که فکر کنم بیشتر از 255 مقدار نمیگیره برای اینکه رشته ام اگه طولش زیاد شد بتونم ذخیرش کنم چه کنم
این sqlite مشکلمو حل میکنه چطوری کل کارهایی که روی دیتابیس اکسس انجام دادمو به sqlite تبدیل کنم؟

hamid_hr
چهارشنبه 28 آبان 1393, 11:20 صبح
اره محدودیت 255 کارکتر رو نداره فیلد از نوع nvarchar(4000) تعریف کنید
ولی max رو نمیدونم چقدره

elahe1393
چهارشنبه 28 آبان 1393, 13:43 عصر
تا الان هرچی سرچ کردم نتونستم راه و روش کار با sqlite رو پیدا کنم چطوری میتونم کل کارایی که با دیتابیس اکسس کردم به sqlite تبدیل کنم چطوری میتونم یه دیتاست از دیتابیس sqlite بسازم که بتونم اطلاعات جداولمو تو گرید ویو نشون بدم؟؟؟؟؟

shivamobin
چهارشنبه 28 آبان 1393, 15:22 عصر
سلام.
من جدولی در اکسس ساخته ام که دارای فیلد فامیلی است.میخوام کوئری تعریف کنم که برای جستجوی شخصی وقتی قسمتی از فامیلی را تایپ کردم تمامی فامیلی های مشابه رو هم نمایش بده.مثلا وقتی فامیلی شریفی رو تایپ کردم تمام کسانی که پسوند یا پیشوند شریفی دارند رو بیاره.یا مثلا اگر اسم علی رو تایپ کردم علیرضا یا محمدعلی رو هم نمایش بده.ممنون میشم کمکم کنید

hamid_hr
چهارشنبه 28 آبان 1393, 15:48 عصر
http://www.codeproject.com/Articles/22165/Using-SQLite-in-your-C-Application

GHADAMI
چهارشنبه 28 آبان 1393, 23:08 عصر
اگه فایل اکسس ورژن قدیمی هست فیلد اکسس رو memo انتخاب کن و اگه ورژن اکسس جدید هست Long Text انتخاب کن ، دیگه محدودیت طول رشته نداره

elahe1393
شنبه 01 آذر 1393, 08:07 صبح
سلام.
من جدولی در اکسس ساخته ام که دارای فیلد فامیلی است.میخوام کوئری تعریف کنم که برای جستجوی شخصی وقتی قسمتی از فامیلی را تایپ کردم تمامی فامیلی های مشابه رو هم نمایش بده.مثلا وقتی فامیلی شریفی رو تایپ کردم تمام کسانی که پسوند یا پیشوند شریفی دارند رو بیاره.یا مثلا اگر اسم علی رو تایپ کردم علیرضا یا محمدعلی رو هم نمایش بده.ممنون میشم کمکم کنید

کوئری

SELECT *
FROM نام جدول
WHERE (Family LIKE '%شریفی%')

اگه بخوای تو سی َارپ ازش استفاده کنی
OleDbConnection ocn = new OleDbConnection();
OleDbCommand ocm = new OleDbCommand();

ocn.ConnectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\db\SportDatabase.accdb";

ocm.Connection = ocn;
ocn.Open();

ocm.CommandText = "SELECT *
FROM نام جدول
WHERE (Family LIKE '%شریفی%')";

ocm.Parameters.AddWithValue("@reportID", reportID);

OleDbDataAdapter adapter = new OleDbDataAdapter(ocm);
DataSet ds = new DataSet();
adapter.Fill(ds);
return ds.Tables[0];
این یه خروجی DataTable میده که میشه تو رکوردها پردازش مورد نظرتونو انجام بدید

shivamobin
چهارشنبه 05 آذر 1393, 10:44 صبح
ممنونم ازتون. ولی من یه جدول پر از اسامی دارم.شریفی رو مثال زدم.اگه این دستور رو برای تمامی اسامی بخوام باید چه دستوری بنویسم.ممنون میشم راهنماییم کنید