PDA

View Full Version : RefreshRecord



MNosouhi
دوشنبه 20 آذر 1385, 18:21 عصر
با سلام
برای برنامه نویسی تحت شبکه از clientdataset همراه با sql server 2000 استفاده کرده ام، اما با متد refreshrecord عنصر clientdataset مشکل دارم ، یعنی هر موقع ازش استفاده می کنم پیغام خطا میده . از بعضی از دوستان هم سوال کردم آنها هم همین مشکل رو داشتن . چطوری میشه از این متد استفاده کرد؟شرایط خاصی داره؟

mzjahromi
سه شنبه 21 آذر 1385, 07:30 صبح
اونطور که من تست کردم DataSet اصلی شما باید یک دیتا ست ایندکس دار باشه مثل TTable یا TAdoTable (و KeyField) مشخص باشه در اینصورت امکان RefreshRecord وجود داره و مشکلی پیش نمیاد. حالا با AdoQuery یا TQuery ظاهرا این امکان وجود نداره(باید بیشتر بررسی بشه)

saman020
سه شنبه 21 آذر 1385, 09:02 صبح
جواب نمیده
باید از close , open استفاده کنید
برای حفظ مکان جاری از savebookmark استفاده شود

MNosouhi
سه شنبه 21 آذر 1385, 14:38 عصر
DataSet اصلی شما باید یک دیتا ست ایندکس دار باشه
آقا ببخشید سواد من کمه ، اما دیتاست ایندکس دار یعنی چی؟ یعنی مثلا AdoQuery ایندکس دار نیست؟
من از AdoDataset استفاده کرده ام. اما هر بار که از RefreshRecord استفاده می کنم این پیغام رو میده :
Unable To find record, key not specified

جواب نمیده
باید از close , open استفاده کنید
با خود دستور Refresh مشکلی ندارم و میتونم ازش استفاده کنم ، منتها میخام فقط یک رکورد را بازیابی کنم ونه همه رکوردها رو.

mzjahromi
چهارشنبه 22 آذر 1385, 06:49 صبح
من از AdoDataset استفاده کرده ام. اما هر بار که از RefreshRecord استفاده می کنم این پیغام رو میده :
Unable To find record, key not specified
مثلا اگر از AdoTable استفاده کنی این مشکل بوجود نمیاد.
در مورد AdoQuery هم همونطوری که گفتم جای بررسی بیشتر داره

MNosouhi
چهارشنبه 22 آذر 1385, 10:24 صبح
بقیه دوستان در این مورد تجربه ای ندارن؟
آقای کوشا، آقای خراسانی ، آقای خطیبی شما نمی دونید دلیل چیه؟
راستی آقای کشاورز کجاست؟ چند روزیه نیستش؟

ghabil
چهارشنبه 22 آذر 1385, 10:57 صبح
اگر خطایی که میگیری Can not be modified هست این یک باگ شناخته شده در دلفی بود که با وجودی که بورلند قول داده بود رفعش بکنه ولی در کمال تعجب یادشون رفت تو دلفی 7 درستش بکنند!! یادم میاد یک مدتی کلی بد و بیراه میگفتند بهشون سر این و دوسه تا باگ دیگه .چون باگ تابلویی هم هست.
ما از همون اول خودمون با Request XML تو شرکت معادلش رو نوشتیم دیگه هم تستش نکردیم برای همین نمیدونم تو Updateهای بعدی درستش کردند یا نه.
راستی فکر میکنم یک ربطی به وجود فیلدهای Auto Inc داشت. به هر حال تو QualityCenter احتمالا میتونی پیداش کنی.

MNosouhi
چهارشنبه 22 آذر 1385, 11:07 صبح
اگر خطایی که میگیری Can not be modified هست این یک باگ شناخته شده در دلفی بود
این خطا رو هم داشتم ، اما گذاشته بودم بعد سوال کنم ، وقتی که فیلد از نوع AutoInc تعریف می کنم ، این خطایی که شما فرمودید رو نشون میده.

ما از همون اول خودمون با Request XML تو شرکت معادلش رو نوشتیم
میشه بیشتر راهنمایی کنید چطوری می تونم این کار رو من هم بکنم؟

هر حال تو QualityCenter احتمالا میتونی پیداش کنی.
بعضی وقتها از اینکه اطلاعاتم اینقدر کمه خندم میگیره ، این که گفتید چی هست؟

ghabil
چهارشنبه 22 آذر 1385, 11:12 صبح
خودم رفتم یک نگاهی کردم. راه حل موقت رفع این باگ اینه که توی یونیت Provider تابع TDataSetProvider.UpdateRecord رو کامل Comment بکنید جاش این تابع رو بزارید .



procedure TDataSetProvider.UpdateRecord(Source, Delta: TDataSet; BlobsOnly, KeyOnly: Boolean);
var
Field: TField;
i: Integer;
UseUpMode: TUpdateMode;
DS: TDataSet;
WasReadOnly:Boolean;
begin
if KeyOnly then
UseUpMode := upWhereKeyOnly
else
UseUpMode := UpdateMode;
if Source.IsUnidirectional then
DS := TDataSetProvider(Self.Resolver.Provider).GetDataSe tFromDelta(
Self.Resolver.UpdateTree, Source, Delta, UseUpMode)
else begin
if not FindRecord(Source, Delta, UseUpMode) then
DatabaseError(SRecordChanged);
DS := Source;
end;
with Delta do
begin
Edit;
for I := 0 to FieldCount - 1 do
begin
Field := DS.FindField(Fields[I].FieldName);
WasReadOnly:=Fields[i].ReadOnly;
Fields[i].ReadOnly:=False;
try
if (Field <> nil) and (not (Field.Lookup or Field.Calculated)) and
(not BlobsOnly or (Field.IsBlob and VarIsNull(Fields[i].NewValue))) then
Fields[i].Assign(Field);
finally
Fields[i].ReadOnly:=WasReadOnly;
end;
end;
Post;
end;
if Source.IsUnidirectional then
DS.Free;
end;



یادتون باشه باید دوباره پروژتون رو Build کنیدها (بخصوص سرورش رو).

منبع : Quality Center

ghabil
چهارشنبه 22 آذر 1385, 11:27 صبح
این خطا رو هم داشتم ، اما گذاشته بودم بعد سوال کنم ، وقتی که فیلد از نوع AutoInc تعریف می کنم ، این خطایی که شما فرمودید رو نشون میده.

خب پس چه پیغام خطایی نشون میده ؟ چون نگفتی که.




میشه بیشتر راهنمایی کنید چطوری می تونم این کار رو من هم بکنم؟


کار راحتی نیست ،کلا برای انجام یک پروژ مجبور شدیم ساپورت Request ها XML رو به میداس اضافه کنیم والا به همین یک دلیل اصلا کار به صرفه ای نیست.



این که گفتید چی هست؟


Quality Center بخشی از سایت بورلند هستش که کاربران باگهایی که برخورد میکنند رو اطلاع میدهند بعد هم بورلند میگه که وضعیتشون چه جوریه و مثلا حلش کرده یا نکرده و از این حرفها مثلا یک جور CRM هست ، قدیما یادمه یک برنامه هم واسش نوشته بودند که انگار خوب نبود حالا نمیدونم دوباره چیزی نوشتند یا نه ولی بصورت WebBased الان روی سایت بورلند هست.

MNosouhi
چهارشنبه 22 آذر 1385, 11:29 صبح
تستش می کنم

MNosouhi
چهارشنبه 22 آذر 1385, 11:41 صبح
هر بار که از RefreshRecord استفاده می کنم این پیغام رو میده :
Unable To find record, key not specified
البته وقتی از AdoQuery یا adodataset استفاده می کنم این مشکل رو داره ، اما اگه از AdoTable استفاده کنم مشکلی نداره.

MNosouhi
چهارشنبه 22 آذر 1385, 12:28 عصر
آقای کوشا من تابعی رو که شما گذاشته بودید جایگزین تابعی با هامان نام در یونیت provider کردم و سپس build All project رو زدم ، سپس برنامه کلاینت و هم سرور رو دوباره build کردم ، اما نتیجه ای نداشت.
ببینید به صورت کلی این اتفاق می افتد:
الف - وقتی فیلد از نو ع Autoinc باشد و refreshRecord فراخوانی شود:
1-اگر از AdoTable استفاده شده باشد خطای Can not be modified را میدهد.
2-اگر از AdoQuery استفاده شده باشد خطای Unable To find record, key not specified
را میدهد.
ب - وقتی فیلد از نو ع Autoinc نباشد و refreshRecord فراخوانی شود:
1-اگر از AdoTable استفاده شده باشد خطایی نمی دهد.
2-اگر از AdoQuery استفاده شده باشد باز هم خطای Unable To find record, key not specified
را میدهد.

فعلا مشکل من خطای Unable To find record, key not specified است که در حالت الف می دهد.

ghabil
چهارشنبه 22 آذر 1385, 16:13 عصر
فعلا مشکل من خطای Unable To find record, key not specified است که در حالت الف می دهد.
این مشکل در Update 1 دلفی 7 حل شده
شماره رفرنس Quality Centerش هم 5550 هست.

MNosouhi
پنج شنبه 23 آذر 1385, 00:18 صبح
این مشکل در Update 1 دلفی 7 حل شده
update1 رو نصب کردم ، بعد برنامم ذو مجدد اجرا کردم ، همون خطا رو داد. ظاهرا در Update1 هم مشکل حل نشده.

ali_abbasi22145
پنج شنبه 23 آذر 1385, 09:11 صبح
update1 رو نصب کردم ، بعد برنامم ذو مجدد اجرا کردم ، همون خطا رو داد. ظاهرا در Update1 هم مشکل حل نشده.

سلام
آخرین update برای دلفی 7 را کجا در سایت بورلند پیدا کنم من آنرا را می خواهم.

MNosouhi
پنج شنبه 23 آذر 1385, 15:05 عصر
آخرین update برای دلفی 7 را کجا در سایت بورلند پیدا کنم من آنرا را می خواهم.
من توی گوگل سرچ کردم و راحت هم پیدا کردم.

MNosouhi
پنج شنبه 23 آذر 1385, 15:06 عصر
در مورد سوالی که پرسیده بودم کسی جوابی نداره؟

ghabil
پنج شنبه 23 آذر 1385, 16:52 عصر
ببین من یک سرچ دیگه زدم چیز بدرد بخوری پیدا نکردم ، اگر حوصله و وقت داری از مسیر سورسهای میداس رو بزار تو Search Path و ببین خطا داره دقیقا کجا گرفته میشه و Traceش کن شاید بتونی پیداش کنی ، (البته متاسفانه بعد از مدت کوتاهی سروسها به Midas.dll رجوع میکنند که سورس نداره) ولی مثل اون کدی که نوشتم شاید بشه قبل از رسیدن به Midas.dll یکجوری رفعش کرد.
اگر هم حوصله و وقتش رو نداری از همون راه دومی استفاده کن ، بنظر من که روش خوبیه .
البته راه سوم هم اینه که یا بیشتر بگردی یا صبر کنی شاید اینجا کسی چیزه بهتری به نظرش برسه.

MNosouhi
پنج شنبه 23 آذر 1385, 19:54 عصر
از اینکه توجه دارید ممنون.
تا حالا به مایکروسافت بد و بیراه میگفتیم ، اما خودمونیم برلند هم دسته کمی نداره.
فکر کنم بهتره خودم دستی پیاده سازیش کنم ، اگرچه فکر می کنم خیلی بهینه نباشه.

mzjahromi
شنبه 25 آذر 1385, 07:01 صبح
این چند روز من خیلی توی این زمینه جستجو کردم
توی فرومهای خارجی هم زیاد این بحث مطرح شده بود ولی هیچ کدوم جواب قانع کننده ای نداده بودند.
یه جا هم دیدم میگفت استفاده از این دستور توصیه نمیشه ولی زیاد قطعی نبود به نظرم

تا حالا به مایکروسافت بد و بیراه میگفتیم ، اما خودمونیم برلند هم دسته کمی نداره. من هنوز فکر نمیکنم این یه باگ باشه. من فکر میکنم یه شرایطی داره که باید فراهم بشه.
بعید میدونم باگ باشه can not find record no key... رو میگم

MNosouhi
شنبه 25 آذر 1385, 09:44 صبح
این چند روز من خیلی توی این زمینه جستجو کردم
واقعا منو شرمنده کردید.

من هنوز فکر نمیکنم این یه باگ باشه. من فکر میکنم یه شرایطی داره که باید فراهم بشه.
من مثالی دارم از DbExpress که مشکلی با RefreshRecord نداره ، اما با ado به جایی نرسیدم.

MNosouhi
شنبه 25 آذر 1385, 15:07 عصر
من هنوز فکر نمیکنم این یه باگ باشه.
درسته ، این به تنهایی یه باگ نیست .
فکر کنم جواب رو پیدا کردم ، دارم تستش می کنم ، اگر 100% جواب داد ، میزارم همه استفاده کنن.
عاقبت جوینده ، یابنده بود