PDA

View Full Version : سوال: استفاده از TMemTable



rezamahdizadeh
شنبه 21 اردیبهشت 1387, 09:36 صبح
من می خواهم از TMemTable استفاده کنم چون قکر می کنم Client Side است. موارد استفاده این چیست؟

vcldeveloper
شنبه 21 اردیبهشت 1387, 15:40 عصر
من می خواهم از TMemTable استفاده کنم چون قکر می کنم Client Side است.
TMemTable در مقایسه با چی؟! Client Side هست، یعنی چی؟! الان کامپوننت های ADO و BDE هم بصورت پیش فرض CursorLocation شان سمت Client هست.


موارد استفاده این چیست؟
موارد استفاده چی چیه؟!


کاربران عزیز (نه فقط این کاربر)، واقعا انتظار دارید با این طرز سوال پرسید، جواب درست و حسابی هم بگیرید؟! واقعا چند نفر حوصله دارند که وقتی فردی سوال مبهمی می پرسه، از وقت خودشون بزنند و در جهت روشن شدن سوال فرد - هنوز اصلا سوال روشن نیست - از کاربر سوال بپرسند و تازه وقتی سوال فرد روشن شد، جواب فرد رو بدند؟! اولین کسی که از سوالات مبهم و ناقص شما دچار خسارت میشه، خود شما هستید. وقتی خودتون حال ندارید یک سوال را دقیق و واضح مطرح کنید، نباید انتظار داشته باشید که کاربر دیگه ایی پیدا بشه و برای رفع مشکل شما از خود شما حال و حوصله بیشتری داشته باشه!

rezamahdizadeh
یک شنبه 22 اردیبهشت 1387, 11:33 صبح
البته سوال من کلی بود منظورم این بود که من از DBGridEh برنامه نمایشی آن را می دیدم و نگاه به کدهای آن می کردم دیدم که از TMemTableEh استفاده کرده و راغب شدم که بیشتر در مورد آن بدانم هر چند که بهتر بود سوال این باشد TMemTable چیست و موارد استفاده آن چیست و در چه حالاتی بهتر است از این استفاده شود و به جای چی می تواند استفاده شود؟

vcldeveloper
یک شنبه 22 اردیبهشت 1387, 20:19 عصر
TMemTable یک جدول موقت در داخل حافظه بصورت لوکال ایجاد میکنه. همچین کاری را ClientDataSet هم انجام میده.

موفق باشید

rezamahdizadeh
سه شنبه 24 اردیبهشت 1387, 06:57 صبح
آیا TMemTable به عنوان Datasource یک ClientDataSet می تواند استفاده شود و چه جوری اطلاعاتی که در حافظه اصلی رایانه Client است به Database منتقل می شود؟

vcldeveloper
سه شنبه 24 اردیبهشت 1387, 12:24 عصر
آیا TMemTable به عنوان Datasource یک ClientDataSet می تواند استفاده شود و چه جوری اطلاعاتی که در حافظه اصلی رایانه Client است به Database منتقل می شود؟
TMemTable خودش یک Dataset هست، پس نمی تونه DataSource بشه.
TMemTable برای این هست که شما بخواید اطلاعاتی را بصورت ساختار یک جدول بانک اطلاعاتی در حافظه داشته باشید و باهاش کار کنید. مثلا یکی می خواد تنظیمات برنامه خودش را بصورت یک جدول بانک اطلاعاتی در حافظه داشته باشه و مثلا برای پیدا کردن یک تنظیم خاص، از Locate استفاده کنه. TMemTable معمولا به یک بانک اطلاعاتی وصل نمیشه، بلکه فقط یک مجموعه داده را به شکل یک جدول بانک اطلاعاتی در حافظه نمایش میده. اما اگر بخواید آن را به یک بانک اطلاعاتی وصل کنید، باید از یکی از کامپوننت های DataDriver (مثلا AdoDataDriveEh) استفاده کنید و آن DataDriver را به دیتابیس وصل کنید.

برای شما بهتر هست که توضیح بدید چه کاری می خواید انجام بدید، تا مشخص بشه که اصلا TMemTable بدردتون میخوره، یا با چیزهای راحتری میشه به اون چیزی که مدنظر شما هست، رسید.

rezamahdizadeh
چهارشنبه 25 اردیبهشت 1387, 11:40 صبح
TMemTable خودش یک Dataset هست، پس نمی تونه DataSource بشه.
TMemTable برای این هست که شما بخواید اطلاعاتی را بصورت ساختار یک جدول بانک اطلاعاتی در حافظه داشته باشید و باهاش کار کنید. مثلا یکی می خواد تنظیمات برنامه خودش را بصورت یک جدول بانک اطلاعاتی در حافظه داشته باشه و مثلا برای پیدا کردن یک تنظیم خاص، از Locate استفاده کنه. TMemTable معمولا به یک بانک اطلاعاتی وصل نمیشه، بلکه فقط یک مجموعه داده را به شکل یک جدول بانک اطلاعاتی در حافظه نمایش میده. اما اگر بخواید آن را به یک بانک اطلاعاتی وصل کنید، باید از یکی از کامپوننت های DataDriver (مثلا AdoDataDriveEh) استفاده کنید و آن DataDriver را به دیتابیس وصل کنید.

برای شما بهتر هست که توضیح بدید چه کاری می خواید انجام بدید، تا مشخص بشه که اصلا TMemTable بدردتون میخوره، یا با چیزهای راحتری میشه به اون چیزی که مدنظر شما هست، رسید.
مطالبی که گفتید خیلی مفید است و جای احسنت گفتن دارد. من خودم علاقه دارم که فرمها زیاد ارتباط مستقیم با دیتابیس نداشته باشند چون ممکن است که قبل از ذخیره در دیتابیس پردازش روی داده های کاربر صورت گیرد

vcldeveloper
چهارشنبه 25 اردیبهشت 1387, 12:34 عصر
من خودم علاقه دارم که فرمها زیاد ارتباط مستقیم با دیتابیس نداشته باشند چون ممکن است که قبل از ذخیره در دیتابیس پردازش روی داده های کاربر صورت گیرد
برای این کار، اگر از ADO استفاده می کنید، می تونید LockTyp آن را BatchOptimistic بزارید. در این صورت تا زمانی که متد UpdateBatch فراخوانی نشه، تغییرات ایجاد شده در جدول فقط در سطح کلاینت باقی می مانند و به سرور ارسال نمیشند.
ClientDataset هم با استفاده از متد ApplyUpdates همین کار را انجام میده. برای ClientDataset با توجه به اینکه برای اتصال به بانک از یک واسط بنام DataSetProvider استفاده میکنه، می تونید پردازش را در سمت سرور از طریق DataSetProvider هم انجام بدید. در اینصورت معماری برنامه شما به 3-tier تغییر میکنه؛ یک لایه کلاینت که وظیفه نمایش داده ها به کاربر و دریافت ورودی کاربر را دارد، یک لایه میانی که ورودی کاربر، تغییرات جداول، و داده هایی که از بانک به کلاینت ارسال می شود را کنترل می کند (Dataset Provider)، و یک لایه سرور بانک اطلاعاتی که درخواست هایی را که DatasetProvider برای آن ارسال می کند را جواب میده.
درباره این موضوع قبلا بحش شده، لطفا جستجو کنید.