PDA

View Full Version : کدام بهتر است؟ ساخت مجدد رکوردست یا اعمال فیلتر



A.Farzin
سه شنبه 12 دی 1385, 18:47 عصر
با سلام

من یک جدول، در پایگاه داده SQL، دارم که حاوی اطلاعات ثبت نام دانشجویان است. می‌خواستم تا اطلاعات ثبت نام شوندگان در هر روز را در یک گرید به نمایش درآورم.
در روی فرم یک تکس‌باکس دارم که کاربر تاریخ مورد نظر خود را در آن وارد کند.
همچنین در پایین همان فرم یک گرید دارم که به محض تعیین تاریخ، اطلاعاتی ثبت نام شوندگان همان روز باید در آن به نمایش درآید.
برای ساخت رکوردست مورد استفاده گرید، 2 را موجود بود:
روش اول) رکوردست من برحسب انطباق تاریخی که کاربر وارد می‌کند با مقدار ستون تاریخ جدول ساخته شود و پس از یک Requery، اطلاعات رکوردست در گرید نمایش داده شود.
روش دوم) رکوردست خود را براساس تمام اطلاعات جدول بسازم و وقتی کاربر یک تاریخ را وارد کرد، با فیلتر کردن رکوردست براسا تاریخ داده شده، فقط رکوردهای مورد نطر را در گرید نشان دهم.
هر دو روش یاد شده، جواب می‌دهد. ولی می‌خواستم ببینم که
مزایا و معایب هر کدام از این روشها چیست؟
برای این کار، کدام روش درست تر است؟
با تشکر

A.Farzin
سه شنبه 12 دی 1385, 18:57 عصر
این را هم اضافه کنم که

من در روش اول به این اشکال برخوردم که وقتی Source رکوردست را می‌‌خواستم عوض کنم خوب علی‌القاعده رکوردست را باید ابتدا Close کنم که می‌کردم. ولی وقتی دوباره پس از تعریف سورس دوباره اقدام به Open نمودن آن می‌کردم، خطا می‌داد که Object Was Open.

و اما اشکال روش دوم هم در کندی عمل آن بود.

Payam Moradi
چهارشنبه 13 دی 1385, 08:59 صبح
روش اول هم خوبه چون با دوباره باز کردن رکوردست، تغییرات در اطلاعاتی که همزمان در رایانه های دیگر بروز شده را میتوان مشاهده کرد.


Recordset.close
recordset.source = "xxxxx"
recordset.open

A.Farzin
چهارشنبه 13 دی 1385, 18:02 عصر
روش اول هم خوبه چون با دوباره باز کردن رکوردست، تغییرات در اطلاعاتی که همزمان در رایانه های دیگر بروز شده را میتوان مشاهده کرد.



خوب صحیح. ولی نمیدانم چرا می‌گوید Object Was Open کدم را هم درست طبق همین شکلی که شما گفتید، نوشته‌ام.
این هم کد:

With denvrmnt.rscommand1
If .State = 1 Then .Close
.Source = "SELECT EntryRecID, EntryDate, EntryNum, " & _
"Class9, Class8, Class7, Class6, Class5, Class4, Class3, Class2, Class1, Class0, Discription, Debit, Credit, UserID, " & _
"LTrim(RTrim(Str(Class9))) + '-' + " & _
"LTrim(RTrim(Str(Class8))) + '-' + " & _
"LTrim(RTrim(Str(Class7))) + '-' + " & _
"LTrim(RTrim(Str(Class6))) + '-' + " & _
"LTrim(RTrim(Str(Class5))) + '-' + " & _
"LTrim(RTrim(Str(Class4))) + '-' + " & _
"LTrim(RTrim(Str(Class3))) + '-' + " & _
"LTrim(RTrim(Str(Class2))) + '-' + " & _
"LTrim(RTrim(Str(Class1))) + '-' + " & _
"LTrim(RTrim(Str(Class0))) AS ClassCod " & _
"From TableEdu " & _
"WHERE (EntryDate = " & LTrim(RTrim(Me.txtField(0).Text)) & ") " & _
"ORDER BY EntryRecID"
.Open
.Requery
End With

Neeloofar
چهارشنبه 13 دی 1385, 19:26 عصر
شما میتونید اینطوری شرط بگذارید:

If .State <> 0 Then .Close
ضمنا لازم نیست بعد از Open فرمان Requey بدید.
درهر صورت کد شما مشکلی ندارد.

A.Farzin
جمعه 22 دی 1385, 14:47 عصر
با سلام

بله کد بالا درست بود. و آمدن پیغام Object Was Open ناشی از تعریف ناکامل Connection String بود که درستش کردم دیگه پیغام Object Was Open نمی‌آید.
ممنون از پاسخهای دوستان