PDA

View Full Version : اشكال اين كد در كجاست



kavehYn
دوشنبه 13 خرداد 1387, 23:27 عصر
با سلام به دوستان و همكاران محترم

من كد زير رو با اين هدف نوشتم كه مقدار فيلدهاي يك ديتا ست رو
در يك استراكچر بريزم. همانطور كه ميبنيد تمام برنامه ها رو به شكلي نوشتم كه قابل استفاده درهمه جا باشه
مشكل من اينه كه اطلاعات از ديتا ست خوانده ميشه ولي در استراكچر قرار نميگيره
لطفا راهنمايي كنيد كه اشكال اين كد در كجاست

توجه : نام و ترتيب و نوع فيلدهاي ديتاست دقيقا مشابه نام- ترتيب و نوع فيلدهاي استراكچر ميباشد
DS نام ديتا ستي است كه اطلاعات در آنجا قراردارد
Stru_Employee نام استراكچري است كه حلقه بايد آنرا با اطلاعات موجود در ديتا ست پركند






Dim ObjInfo As New Stru_Employee

ItemCounter = 0
For Each f As System.Reflection.FieldInfo In GetType(Stru_Employee).GetFields
Dim Amount = ds.Tables(0).Rows(0).Item(ItemCounter)
ItemCounter = ItemCounter + 1

f.SetValue(ObjInfo, Amount)


Next

Dariuosh
دوشنبه 13 خرداد 1387, 23:45 عصر
دقيقاً نفهميدم که چي کار ميخواي بکني ولي فک ميکنم برا اين مدل کار بهتره از Interface استفاده کني

kavehYn
سه شنبه 14 خرداد 1387, 00:13 صبح
مشغول توسعه دادن نرم افزاري هستم كه فردي ديگري نوشته بوده
اين برنامه براي خواندن اطلاعات از بانك اطلاعاتي اول يك ديتا ست رو پر ميكنه
و بعد اطلاعات ديتا ست رو در يك استراكچر ميريزه و به فرم فراخواننده ارسال ميكنه
فرمها به ديتا ست دسترسي ندارند بلكه فقط به يك استراكچر كه يك رديف داره دسترسي
دارند.روش فعلي عملكرد نرم افزار به اين شكله
Structure.item1=dataset.tables(0).rows(0).item1
Structure.item2=dataset.tables(0).rows(0).item2
Structure.item3=dataset.tables(0).rows(0).item3
اين روش وقتيكه داراي 50 يا 100 فيلد هستيد خيلي مسخره ميشه و من تصميم دارم با
نوشتن يك حلقه اينكار رو انجام بدم.

Dariuosh
سه شنبه 14 خرداد 1387, 00:44 صبح
خوب اگه کد نفر قبلي اشتباهه يا ناکارامده مجبور نيستي متحمل يه سري کارايي بشي ، که احتمالاً خودشون هم اشتباه باشن
به نظرم اون قسمتهايي رو که ميبيني مشکل داره مجدد يه فکري به حالشون بکون چون اينجور موقع ها شما برا پوشوندن اشتباهات مجبور ميشي يه سري اشتباهه ديگه مرتکب شي ، که بالاخره يه جايي تو کار گير ميکني که اون موقع حتي شايد بي خيال پروژه بشي و بعد از اونهمه زحمت ولش کني

قاعدتاً شما به ازائ هر DataTable بايد يه استراکچر داشته باشي درسته ؟
اگه اينجوري باشه ديگه چه فايده ايي داره اين کاري که ميخواي بکني ؟

linux
سه شنبه 14 خرداد 1387, 01:03 صبح
دقيقاً نفهميدم که چي کار ميخواي بکني ولي فک ميکنم برا اين مدل کار بهتره از Interface استفاده کني
یکبار دیگه مطالب مربطو به OOP را مرور کنید

linux
سه شنبه 14 خرداد 1387, 01:11 صبح
با سلام به دوستان و همكاران محترم

من كد زير رو با اين هدف نوشتم كه مقدار فيلدهاي يك ديتا ست رو
در يك استراكچر بريزم. همانطور كه ميبنيد تمام برنامه ها رو به شكلي نوشتم كه قابل استفاده درهمه جا باشه
مشكل من اينه كه اطلاعات از ديتا ست خوانده ميشه ولي در استراكچر قرار نميگيره
لطفا راهنمايي كنيد كه اشكال اين كد در كجاست

توجه : نام و ترتيب و نوع فيلدهاي ديتاست دقيقا مشابه نام- ترتيب و نوع فيلدهاي استراكچر ميباشد
DS نام ديتا ستي است كه اطلاعات در آنجا قراردارد
Stru_Employee نام استراكچري است كه حلقه بايد آنرا با اطلاعات موجود در ديتا ست پركند






Dim ObjInfo AsNew Stru_Employee
ItemCounter = 0
ForEach f As System.Reflection.FieldInfo InGetType(Stru_Employee).GetFields
Dim Amount = ds.Tables(0).Rows(0).Item(ItemCounter)
ItemCounter = ItemCounter + 1
f.SetValue(ObjInfo, Amount)


Next


اگر از استراکچر یا کلاس استفاده می کنید این دیتاست این وسط چکاره هست؟
یک زمانی طول می کشه تا دیتاست پر شده یک زمانی هم طول می کشه شما ساختار خودتان را با اطلاعات دیتاست پر کنید!
اگر از 2008 استفاده می کنید از linq استفاده کنید اگر هم از 2005 استفاده می کنید با استفاده از sqlcommand و sqldatareader ساختار خودتان را پر کنید.
این روش هم بنظرم روش خوبی نیست. حالا فوقش یک تیبل می خواهد 20 تا فیلد داشته باشه، اگر هر کدام را کد بنویسید راحتر هستید.

kavehYn
سه شنبه 14 خرداد 1387, 06:59 صبح
اين برنامه مربوط به پرونده هاي پرسنلي و مواردي از اين قبيله كه هميشه
يك ركورد بايد از بانك خونده بشه.
اطلاعاتي كه از بانك اطلاعاتي خونده ميشن در يك ديتا ست قرار داده ميشه و از
يك لايه پايين برنامه برگشت داده ميشه .در لايه ديگري اطلاعات ديتا ست در يك استراكچر
قرار داده ميشه و به فرم فراخواني كننده ارسال ميشه

فرمايش شما دوستان صحيحه ولي لطفا توجه كنيد كه اين برنامه تعداد
زيادي تيبل داره و اگر قرارباشه براي هرجدولي كه بوجود مياد مجبور باشم كه
اون كدهاي
Structure.item1=dataset.tables(0).rows(0).item1
Structure.item2=dataset.tables(0).rows(0).item2
Structure.item3=dataset.tables(0).rows(0).item3

Structure.item100=dataset.tables(0).rows(0).item10 0

رو بنويسم كار مشكل و وقتگيري ميشه در حاليكه اگر بتوانم يك تابع بنويسم كه
يك ديتا ست و يك استراكچر رو بعنوان ورودي بگيره و ديتاست رو در فيلدهاي متناظر
در استراكچر قرار بده خيلي سريعتر برنامه من نوشته ميشه
همونطور كه گفتم كدي كه در بالا نوشتم كد نوشته شده فقط يك خطش اشكال داره
f.SetValue(ObjInfo, Amount)
مقدار در فيلدAmount موجوده ولي نميدونم كه بجاي فيلدObjinfo
چي بذارم كه مقدارش در فيلدمتناظر از استراكچر قرار بگيره
لطفا اگر ميتونيد اين يك خط رو به من كمك كنيد تا اصلاح كنم

linux
سه شنبه 14 خرداد 1387, 11:07 صبح
اين برنامه مربوط به پرونده هاي پرسنلي و مواردي از اين قبيله كه هميشه
يك ركورد بايد از بانك خونده بشه.
اطلاعاتي كه از بانك اطلاعاتي خونده ميشن در يك ديتا ست قرار داده ميشه و از
يك لايه پايين برنامه برگشت داده ميشه .در لايه ديگري اطلاعات ديتا ست در يك استراكچر
قرار داده ميشه و به فرم فراخواني كننده ارسال ميشه

فرمايش شما دوستان صحيحه ولي لطفا توجه كنيد كه اين برنامه تعداد
زيادي تيبل داره و اگر قرارباشه براي هرجدولي كه بوجود مياد مجبور باشم كه
اون كدهاي
Structure.item1=dataset.tables(0).rows(0).item1
Structure.item2=dataset.tables(0).rows(0).item2
Structure.item3=dataset.tables(0).rows(0).item3

Structure.item100=dataset.tables(0).rows(0).item10 0

رو بنويسم كار مشكل و وقتگيري ميشه در حاليكه اگر بتوانم يك تابع بنويسم كه
يك ديتا ست و يك استراكچر رو بعنوان ورودي بگيره و ديتاست رو در فيلدهاي متناظر
در استراكچر قرار بده خيلي سريعتر برنامه من نوشته ميشه
همونطور كه گفتم كدي كه در بالا نوشتم كد نوشته شده فقط يك خطش اشكال داره
f.SetValue(ObjInfo, Amount)
مقدار در فيلدAmount موجوده ولي نميدونم كه بجاي فيلدObjinfo
چي بذارم كه مقدارش در فيلدمتناظر از استراكچر قرار بگيره
لطفا اگر ميتونيد اين يك خط رو به من كمك كنيد تا اصلاح كنم
یک سری برنامه هستند که اسمشان code generator هست. مثل codesmith
شما یک تمپلیت تعریف می کنید بر اساس آن تمپلیت کدشما تولید شده و می توانید همان را برنامه استفاده کنید.