ورود

View Full Version : سوال: Update کردن جدول از روی جدول مشابه در DB دیگر



babak_delphi
پنج شنبه 02 خرداد 1387, 16:14 عصر
سلام
من یک برنامه دارم که با استفاده از Access کار می کنه
یک Web Application هم هست که پایگاه داده اون چند جدول مشابه همین برنامه داره که در حقیقت برای گزارش گیری تحت وب استفاده میشه
حالا من می خوام برنامه به اینترنت وصل بشه و با زدن یک دکمه (منظور این است که هر وقت کاربر خواست) چند جدول از پایگاه دادهء سایت از روی جدول های مشابه پایگاه داده برنامهء Desktop ، به روز بشند و همچنین چند جدول از پایگاه داده برنامه از روی Site بتونند Update بشند
مثلا بشه از اطلاعاتی که در نرم افزار وارد شده بصورت تحت وب گزارش گرفت و همچنین وقتی کسی از طریق سایت اطلاعاتی را وارد کرده باشه ، بشه بصورت Offline اونها رو بررسی کرد
اما مساله اینه که نمی خوام از یک دیتا بیس استفاده کنم
چون امکانات محدوده و کاربر فقط در زمان Update کردن برنامه با Dialup به اینترنت وصل میشه و بعد از Disconnect شدن کارهاش رو انجام میده
پس از راه حلهایی مثل Valid IP یا Web Service نمی تونم استفاده کنم
لطفا راهنمایی کنید که چطور Table ها رو Update کنم؟
ممنون

vcldeveloper
پنج شنبه 02 خرداد 1387, 16:46 عصر
1- Tagهایی که برای تاپیک درست می کنید را داخل " " قرار ندید.
2- من خیلی متوجه منظور شما نشدم، شما میگید از Access استفاده می کنید، بعد میگید یک Web Application هست که یک پایگاه داده داره، بعد میگید که نمی خواید از دیتابیس استفاده کنید!
اگر نمی خواید از دیتابیس استفاده کنید، پس Access و اون پایگاه داده، که Web Application ازش استفاده میکنه، چی هستند؟!

تا اونجایی که من متوجه شدم، شما می خواید جداول بانک اطلاعاتی را بصورت Disconnected داشته باشید. برای این کار می تونید از کامپوننت های مربوط به ADO در دلفی یا ClientDataset استفاده کنید. تغییراتی را که کاربر اعمال می کند، می تونید با استفاده از متد SaveToFile در یک فایل روی سیستم کاربر بریزید، و هر وقت لازم شد، با LoadFromFile آنها را مجددا در DataSet مربوطه لود کنید، به سرور متصل بشید و تغییران را اعمال کنید. ClientDataset که بطور پیش فرض به این صورت کار میکنه، اما برای ADO باید خصوصیت LockType آن را بر روی BatchOptimistic تنظیم کنید و مواقعی که به اتصال به سرور نیازی ندارید، خصوصیت AdoConnection آن را nil کنید و سپس AdoConnection را Disconnect کنید. برای اتصال مجدد هم اول AdoConnection را Connect کنید و بعد خصوصیت AdoConnection مربوط به AdoDataset را بر روی نام AdoConnection مربوطه تنظیم کنید.

babak_delphi
جمعه 03 خرداد 1387, 01:33 صبح
نه
ببینید منظور من چیز دیگه ایست
من نگفتم که نمی خوام از دیتا بیس استفاده کنم
گفتم نمی خوام از یک (1) دیتا بیس استفاده کنم
یعنی سایت برای خودش دیتابیسش رو داشته باشه و برنامهء دسکتاپ هم دیتابیس خودش رو
ولی هروقت خواستیم بتونیم مثلا یکی از جداول دیتابیسی که سایت از اون استفاده میکنه (و در اینترنت است) را از روی یکی از جداول برنامهء دسکتاپ (که روی کامپیوتر کاربر نصب شده) Update کنیم و برعکس.
نمیدونم تونستم منظورم رو برسونم یا نه
در مورد Tag هم چشم.

vcldeveloper
جمعه 03 خرداد 1387, 02:24 صبح
یعنی سایت برای خودش دیتابیسش رو داشته باشه و برنامهء دسکتاپ هم دیتابیس خودش رو
ولی هروقت خواستیم بتونیم مثلا یکی از جداول دیتابیسی که سایت از اون استفاده میکنه (و در اینترنت است) را از روی یکی از جداول برنامهء دسکتاپ (که روی کامپیوتر کاربر نصب شده) Update کنیم و برعکس.
خب، همون فایل هایی که ADO یا ClientDataset برای نگهداری داده ها بر روی کلاینت استفاده می کنند چه محدودیتی برای شما بوجود میارند؟

babak_delphi
جمعه 03 خرداد 1387, 18:37 عصر
ببینین آقای کشاورز عزیز
برنامهء من یک قسمت ورودی داره که اطلاعات از اون طریق وارد برنامه می شوند
علاوه بر این یک سایت هم هست که یکی از امکاناتش اینه که میشه از یکسری از داده هایی که توسط برنامهء دسکتاپ وارد شده ، در سایت گزارش گرفت
پس لازمه که یکی از جداول دیتابیس سایت را بشه Update کرد
یعنی کاربر Connect بشه و فقط با زدن یک کلید جدول مورد نظر را در دیتابیس سایت ، Update کنه و تغییرات رو به اون منتقل کنه (نه اینکه اون اطلاعات رو دوباره در سایت وارد کنه)
میدونم که این رو با مالتی تایر میشه راحت پیاده سازی کرد
ولی مساله اینه که برنامه باید ساده و کم هزینه باشه و یک دیتا بیس برای برنامه (بصورت دسکتاپ) و یک دیتابیس برای سایت (روی اینترنت) داشته باشیم و بجای جدول مشترک ، 2 جدول مشابه داشته باشیم که بشه اونها رو از روی هم Update کرد.

vcldeveloper
جمعه 03 خرداد 1387, 19:24 عصر
فقط با زدن یک کلید جدول مورد نظر را در دیتابیس سایت ، Update کنه و تغییرات رو به اون منتقل کنه (نه اینکه اون اطلاعات رو دوباره در سایت وارد کنه)
فایلی که ClientDataSet روی کلاینت ذخیره میکنه شامل داده هایی هست که کاربر از بانک گرفته، وقتی ClientDataset به بانک وصل میشه و این فایل لود میشه، فقط داده هایی که تغییر کردند به بانک ارسال میشه، چون ClientDataset برای نگهداری داده ها از دو Dataset استفاده میکنه، یکی همونی که بصورت عادی باهاش کار می کنید، یکی هم Delta که تغییرات Dataset اصلی نسبت به جدول مربوطه در بانک را نگهداری میکنه.

پس سوال دوباره این میشه:

خب، همون فایل هایی که ADO یا ClientDataset برای نگهداری داده ها بر روی کلاینت استفاده می کنند چه محدودیتی برای شما بوجود میارند؟

babak_delphi
جمعه 03 خرداد 1387, 19:41 عصر
ببینین درست فهمیدم

باید در برنامهء دسکتاپ یک ClientDateset قرار بدم (در حالت معمول از ADOQuery استفاده میکنم)
وقتی به اینترنت وصل شدم ، در زمانی که خواستم جدول مربوط به دیتابیس سایت را Update کنم باید مراحل زیر را انجام بدم

1 - ClientDataset را از روی جدول دیتابیس برنامهء دسکتاپ لود کنم
2 - ClientDataset رو Disconnect کنم
3 - ClientDataset رو به جدول مورد نظر در دیتابیس سایت وصل می کنم
4 - جدول رو از روی ClientDataset آپدیت میکنم

تا اینجا درسته؟

vcldeveloper
شنبه 04 خرداد 1387, 04:30 صبح
تا جایی که یادم هست، مراحل کار به این صورت هست:
1- ClientDataset برای اولین بار هیچ داده ایی نداره، پس به سرور وصل میشه و داده ها را از سرور میگیره.
2- ClientDataset فعلا نیازی به سرور نداره، پس ارتباط با سرور قطع میشه.
3- کاربر روی داده های گرفته شده از سرور تغییراتش را اعمال میکنه.
4- اگر فعلا قرار نیست که تغییرات به سرور ارسال بشند، داده ها روی یک فایل بر روی سیستم کاربر ذخیره میشند (با استفاده از متد SaveToFile).
5- هر زمان که ارتباط با سرور برقرار شد، داده ها از فایل مربوطه خوانده میشند و در ClientDataset لود میشند.
6- داده های لود شده در ClientDataset (که همون تغییرات کاربر هستند) به سرور ارسال میشند.

این کلیاتش بود، ممکنه در جزئیات مراحل دیگه ایی هم داشته باشه، الان یادم نیست.