View Full Version : ثبت خوانده شدن رکورد در دی بی گرید
ariobarzan
سه شنبه 19 مهر 1390, 23:03 عصر
با سلام
اگر یک دی بی بی گرید داشته باشیم و بخواهیم که وقتی یک کاربر روی یک رکورد کلیک کنه رنگ اون متفاوت بشه
و این خوانده شدن اطلاعات هم ثبت بشه چه راه حلی رو پیشنهاد می کنید؟
یعنی روزهای بعد هم که وارد برنامه میشه باز هم شکل دی بی گرید نشون بده که کدوم رکورد رو قبلا دیده
این کار ممکنه برای تعداد نا محدود ی کاربر اتفاق بیفته
یه جورایی شبیه ایمیل چک کردن که ایمیل های خوانده شده و نشده با هم متفاوت نشون داده میشه
مثال دیگه هم اتوماسیون اداری هست که پیام های ورودی بشکل خوانده شد یا خوانده نشد با هم متفاوته
امیدوارم منظورم رو متوجه شده باشید
vcldeveloper
سه شنبه 19 مهر 1390, 23:47 عصر
رکوردی که روش کلیک بشه، میشه رکورد فعال دیتاست متصل به دیبی گرید. رکوردی هم که فعال باشه، می تونید ویرایش اش کنید. پس، می تونید یک فیلد Boolean به دیتا ست خودتون اضافه کنید که مشخص کنه که آیا اون رکورد قبلا دیده شده یا نه؛ هر وقت هم که رکورد فعال دیتاست تغییر کرد (این رو می تونید با رویدادهای دیتاست متوجه بشید)، وضعیت این فیلد رو بررسی کنید؛ اگر قبلا دیده شده بود که خب الان به صورت "دیده شده" باید نمایش داده بشه. اگر هم قبلا دیده نشده بود، الان با فعال شدنش دیده شده، پس باید قبل از حرکت کاربر بر روی رکورد دیگه ایی، مقدار اون فیلد Boolean رو تغییر بدید، تا مشخص بشه که کاربر این رکورد رو دیده.
ariobarzan
چهارشنبه 20 مهر 1390, 19:48 عصر
با سلام
و تشکر از توجه شما
همونطور که گفتم این کار ممکنه برای تعداد نا محدود ی کاربر اتفاق بیفته یعنی اینکه فیلد خوانده شدن یا نشدن نمی تونه به یک نفر اختصاص داشته باشه
با توجه به این مسئله لطفا راهنمایی بفرمایید
daneshmand1354
چهارشنبه 20 مهر 1390, 21:23 عصر
برای ثبت اینکه چه کاربری چه رکوردی را کلیک کرده به هر کاربر یک id اختصاص بدهید و برای هر رکورد یک id دیگر حالا این دو را میتوانید در یک فایل ini و یا رجیستیری و یا حتی بانک اطلاعاتی ذخیره کنید.پیشنهاد من ذخیره در رجیستری است
اگر توجه کنید ویندوز هم این تنظیمات را در رجیستری ذخیره میکند و با پاک شدن ویندوز از بین میرود
function FP1.RgStringRead(RegParent, RegChild: string): Variant;
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(RegParent, True) then
begin
result:=Reg.ReadString(RegChild);
Reg.CloseKey;
end;
Reg.Free;
end;
function FP1.RgStringDel(RegParent, RegChild: string): Variant;
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(RegParent, True) then reg.DeleteKey(regchild);
Reg.CloseKey;
Reg.Free;
end;
function FP1.RgStringWrite(RegParent, RegChild: string;
Regvalue: variant): Variant;
var Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_CURRENT_USER;
if Reg.OpenKey(RegParent, True) then
begin
Reg.WriteString(RegChild,Regvalue);
Reg.CloseKey;
end;
Reg.Free;
end;
vcldeveloper
چهارشنبه 20 مهر 1390, 22:25 عصر
همونطور که گفتم این کار ممکنه برای تعداد نا محدود ی کاربر اتفاق بیفته یعنی اینکه فیلد خوانده شدن یا نشدن نمی تونه به یک نفر اختصاص داشته باشه
با توجه به این مسئله لطفا راهنمایی بفرمایید
فیلدی که روی بانک تعریف شده و مقدارش در برنامه بعد از دیده شدن رکورد مربوطه توسط کاربر، تغییر داده میشه، به طور خودکار بعد از تغییر رکورد فعال، در بانک ثبت میشه؛ پس سایر کاربران اگر بخوان از همون بانک کوئری بگیرند، این رکورد را به صورت "خوانده شده" می بینند؛ مگر اینکه چندین کاربر همزمان در حال مشاهده یک یا چند رکورد باشند که در اون صورت، اگر نوع قفل کردن رکوردها Optimistic باشه، کاربری که سریع تر اون رکورد رو دیده باشه، محتوای فیلد را تغییر میده. در غیر این صورت، اگر قفل از نوع Pessimistic باشه، کاربری که اول دیده، تغییر را ثبت میکنه، و سایر کاربران نمی توانند تغییری اعمال کنند، مگر اینکه اون رکورد را ریفرش کنند، که در اون صورت، اون کاربران هم اون رکورد را به صورت "خوانده شده" خواهند دید.
ariobarzan
پنج شنبه 21 مهر 1390, 07:26 صبح
پس به اين ترتيب اضافه شدن يك فيلد به ركوردها چندان كمكي نمي كنه و فقط براي يك كاربر خوبه
فكر كنم پيشنهاد دوستمون daneshman1354 هم بد نباشه كه يه جدول درست كنم با دو فيلد يكي نام كاربر و يكي هم براي ركورد خوانده شده
به هر حال از توجه شما ممنون
اگه باز هم راه حلي بنظرتون مياد دريغ نفرماييد
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.