PDA

View Full Version : Resynchronize كردن ركوردست حاصل از يك View



A.Farzin
چهارشنبه 25 اردیبهشت 1387, 18:36 عصر
با سلام

فرض كنيد يك View و يا يك SP براي بدست آوردن يك ركوردست از جداول Orders و Customers با Query زير ساخته‌ايم.

SELECT Orders.*, Customers.CompanyName
FROM Orders INNER JOIN Customers
ON Orders.CustomerID = Customers.CustomerID
ميدانيم كه فيلد CostomerID يك FK در جدول Orders است. چگونه ميتوان SQL فهماند كه اگر از طريق View و يا SP ياد شده، مقدار موجود در ستون CostomerID جدول Odrers تغيير كرد، براساس مقدار جديدقرار گرفته در اين فيلد، مقدار فيلد CompanyName هم جديد يا به اصطلاح Resynchronize شود.

ممنون

رضا عربلو
چهارشنبه 25 اردیبهشت 1387, 21:18 عصر
دوست عزیز دستورات تی اس کیو ال که برای استخراج داده بکار برده می شوند اصطلاحاً Disconnect هستند. یعنی شما یک دستور را به سرور می فرستید و سرور به شما پاسخ می دهد حالا اگر مجموعه جواب تغییری پیدا کرد تا هنگامیکه شما درخواست مجددی را به سرور نفرستید متوجه این تغییرات نمی شوید.

البته سرویس Notification Service که با اس کیو ال سرور 2005 ارائه شد می توانددر صورت وقوع شرایط خاصی از سرور به کلاینت Notofication بفرستد

AminSobati
چهارشنبه 25 اردیبهشت 1387, 23:01 عصر
دوست عزیزم،
من این رو نگرفتم که اساسا چرا باید با تغییر CustomerID در Orders، مقدار Companyname تغییر کنه؟ یا شاید هدف اصلی رو باید واضحتر بیان کنید

A.Farzin
پنج شنبه 26 اردیبهشت 1387, 21:18 عصر
با سلام خدمت استاد گرامي


دوست عزیزم،
من این رو نگرفتم که اساسا چرا باید با تغییر CustomerID در Orders، مقدار Companyname تغییر کنه؟ یا شاید هدف اصلی رو باید واضحتر بیان کنید

به اين دليل كه Companyname مربوط به ALFKI با Companyname مربوط به ANATR فرق مي‌كند و وقتي مقدار CustomerID در Orders از ALFKI به ANATR تغيير ميكند، بطور طبيعي بايد مقدار Companyname هم متناسب با اين تغيير، عوض شود.

در Books Online توضيحات بسيار مختصري در مورد Resynchronizing Rows آمده است كه ميگويد SQLOLEDB از اين امكان پشتيباني ميكند ولي چگونگي پياده كردن آن را در يك SP و يا View نميدانم.

ممنونم

AminSobati
شنبه 28 اردیبهشت 1387, 00:35 صبح
منظورتون موقع نمایشه؟ یعنی روی Orders حرکت میکنید (فرضا در Grid) و میخواین CompanyName به روز بشه؟

A.Farzin
شنبه 28 اردیبهشت 1387, 18:45 عصر
منظورتون موقع نمایشه؟ یعنی روی Orders حرکت میکنید (فرضا در Grid) و میخواین CompanyName به روز بشه؟

بله. در واقع Grid من وصل به يك view و يا SP ميشود و ميخواهم وقتي از طريق Grid مقدار موجود در ستون CustomerID جدول Odrers تغيير كرد، متناسب با آن مقدار فيلد CompanyName هم جديد يا به اصطلاح Resynchronize شود.

لازم به توضيح است كه اگر از View و يا SP استفاده نكنم و مستقيماً دستور SELECT خودم را به عنوان ديتاسورس Grid تعريف كنم، با تغيير CustomerID (در سطح Client) فيلد CompanyName به روز ميشود ولي چون از View و SP استفاده مي‌كنم اين كار انجام نميشود و به نظر ميرسد كه Resynchronize بايد توسط SQL Server و روي View يا SP انجام شود.

مثال مربوط به Resynchronize بدون استفاده از View و SP:
http://barnamenevis.org/forum/showthread.php?t=105277&highlight=Resync

ممنون

AminSobati
دوشنبه 30 اردیبهشت 1387, 22:09 عصر
امکانش نیست در سطح کلاینت مدیریت کنید؟ فرضا با استفاده از Eventهایی که در Grid هست