PDA

View Full Version : حرفه ای: ثبت زیرگروه در دیتابیس



Mohsen0025
پنج شنبه 20 شهریور 1393, 23:26 عصر
با عرض سلام و خسته نباشید خدمت همه اساتید محترم سایت :قلب:
آقا میشه تو دیتابیس اکسس چند مشخصه اصلی و چند زیر گروه داشته باشیم؟ به این صورت؟
1
| 1
| 2
| 3
| 1
| 2
2
| 1
| 1
| 2
| 1
.....
به ایم صورت که در یک گروه به شماره 1 ایجاد شده و چندید زیر گروه داره که بعضی از این زیر گروه ها برای خود زیر گروه دارن!!
اگه بشه تو یه فرم مثلاً 4 تا textbox باشه کاربر که تو text1 کلید مثلاً F1 رو زد به فرم باز بشه و لیست اصلی بدون نمایش ریزها بیاد. در text2 اگه دوباره F1 رو زد زیر مجموعه text1 بیاد و در text3 اگه همون کلیدو زد زیر مجموعه text2 بیاد و.... بعدش که مثلاً همه این کارا رو انجام شد و تو لیست ها ریز شد و یا خواست همونطور کلی باشه بتونه گزارشی به همون صورت بگیره!
توضیح در باره گزارش: اگه فقط text1,text2 رو انتخاب کرده بود و text2 دارای زیرمجموعه بود بتونه تو گزارش گیری همه رو بیاره هم text1,text2 و زیر مجموعه هایی که text2 داره!!!!
تشکر میشه:چشمک:

hmbarnamenevis
جمعه 21 شهریور 1393, 09:45 صبح
شما برای هر زیر گروه باید در دیتابیس یک جدول جداگانه ایجاد کنید. و در هر زیر گروه ، کلید اصلی گروه بالاتر را کلید خارجی قرار دهید.
مثلا:
جدول گروه اصلی : GroupCode(PK) - GroupName
جدول زیر گروه 1: UnderCode1(PK) - GroupCode(fk) - GroupName
جدول زیر گروه 2: UnderCode2(PK) - UnderCode1(fk) - GroupName
جدول زیر گروه 3: UnderCode3(PK) - UnderCode2(fk) - GroupName

Mohsen0025
شنبه 22 شهریور 1393, 18:25 عصر
سلام
اگه کاربر بخواد خودش بر فرض مثال هم شاخه اصلی و هم زیر گروه تشکیل بده چی؟ باید کاری بشه که بتونیم از تو برنامه هم گروه و هم زیر گروه داشته باشیم!من مثال بالا رو متوجه نشدم :متفکر:
اگه دوستان بلدن خداییش یه کمک کنن!:قلب:

hmbarnamenevis
شنبه 22 شهریور 1393, 19:24 عصر
اینهایی که نوشتم مربوط به طراحی بانک است. در برنامه شما باید به هر نحوی که می خواهید طراحی کنید و بعد اطلاعات را در جداول ذخیره کنید و یا از آنها اطلاعات را خوانده و برای کاربر نمایش دهید.
شما برای ذخیره گروه اصلی یک کلید در نظر می گیرید.
وقتی کاربر زیر گروه را تشکیل می دهد ، در جدول بعدی ذخیره می کنید اما آن کدی که در بالا ذخیره کردید را در جدول دوم هم به صورت کلید خارجی ذخیره می کنید.
فکر کنم شما مباحث بانک اطلاعاتی را نمی دانید. برای نوشتن چنین برنامه ای دانستن مباحث اولیه بانک اطلاعاتی لازم است.

Mohsen0025
شنبه 22 شهریور 1393, 23:10 عصر
با عرض سلام و احترام
چرا از بانک اطلاعاتی یه کمکی سر در میارم اما این بار اولمه که میخواه به صورت گروه بنویسم!!!
اگه لطفی کنین و یه نمونه مثالی چیزی بزارین ممنون میشم!!!

vbhamed
یک شنبه 23 شهریور 1393, 11:25 صبح
سلام
البته راهي كه دوستمون گفتن هم درسته ولي محدوديتش اينه كه عمق گروهها محدود به تعداد جدولهاست مثلا در بعضي نرم افزارها نوشتن تا 3 سطح حساب تفصيلي در صورتي كه در روش زير محدوديتي در عمق زير گروه نداريد و يك گروه مي‌تونه خودش زير گروه داشته باشه كه هر زير گروه هم زير گروه داشته باشه و به همين ترتيب تا بي‌نهايت

123435

تصوير بالا رو ببينيد

در سمت چپ جدول بانك اطلاعاتي و در سمت راست يك كنترل Treeview است كه گروهها در اون نمايش داده شدن
براي هر آيتم يك كد تعريف كرديم (كليد اصلي رو نمي‌گم، ستون كد آيتم، مورد نظره)
يك ستون تحت عنوان زير مجموعه داريم اگر آيتمي خودش زير مجموعه آيتم ديگه باشه اين فيلد رو براش پر مي‌كنيم و برابر كد آيتم بالاترش يا سرگروهش قرار مي‌ديم مثلا تو مثال بالا "گرم"، "سرد"، "آبميوه" جزء گروه "نوشيدني ها" هستند و كد گروه "نوشيدني ها" عدد 67 است بنابراين فيلد "زيرمجموعه" اون سه تا گروه رو برابر 67 قرار مي‌ديم حالا مثلا اگر گروه "آبميوه" خودش هم زير مجموعه داشت فيلد "زيرمجموعه" آيتم رو برابر 72 يعني كد گروه "آبميوه" قرار مي‌داديم

تا اينجا شد نحوه ثبت اطلاعات در جدول

حالا براي نمايش در Treeview بايد از تابع بازگشتي استفاده كنيم البته شكل كلي تابع بازگشتي ساده است ولي درك عملكرد تابع كمي دقت مي‌خواد

يك تابع بازگشتي مي‌نويسيم كه كد آيتم سرگروه رو بگيره
Function ReadTree(ParentItemCode As Integer)
در اين تابع آيتمي كه كدش برابر ParentItemCode هست رو به Tree اضافه مي‌كنيم
با يك دستور sql چك مي‌كنيم آيا در جدول ركوردهايي وجود داره كه فيلد "زيرمجموعه" اونها برابر ParentItemCode باشه يا نه و اگر وجود نداشت كه هيچ از تابع خارج ميشيم ولي اگر ركوردهايي با اين شرط وجود داشتند به ترتيب كد اون ركوردها رو به تابع نوشته شده مي‌فرستيم يعني در حقيقت از داخل همون تابعي كه نوشتيم خود تابع رو دوباره با كد اين ركوردها فراخواني مي‌كنيم

مثلا ما ركورد 67 يعني "نوشيدني ها" رو خونديم و اضافه كرديم، حالا چك مي‌كنيم آيا ركوردهايي با فيلد "زيرمجموعه" برابر 67 وجود داره يا نه كه مي‌بينيم بله 3 ركورد وجود داره، به ترتيب شروع مي‌كنيم به فرستادن اين ركوردها به تابع (پارامتر هم كد همين ركودها ميشه)

هنگام اضافه كردن آيتم به كنترل Treeview چند تا پارامتر وجود داره كه اوليش كد سرگروه و سومي كد خود آيتم هست، پارامتر دوم يعني tbwChild هم ميگه اين آيتم خودش زير مجموعه آيتم با كد ParentItemCode هست كه اگر ParentItemCode برابر 0 بود يعني اين آيتم خودش سرگروه اصلي است و زير مجموعه چيزي نيست بنابراين پارامتر tbwChild هم نياز نيست و جاش رو خالي ميزاريم
TreeView1.Nodes.Add ParentItemCode, tbwChild, Code, Caption

اينم يك شبه كد :
Function ReadTree(ParentItemCode As Integer)

Read Record With Code = ParentItemCode From Database
Add Item to Treeview code

If Exist Records with subItemField = ParentItemCode Then
For i = 0 To RecordsCount
ReadTree ItemCode(i)
Next
Else
Exit Function
End If

End Function

البته در كل براي اينكه راحت تر باشيد و دردسر كمتري داشته باشيد مي‌تونيد يك فيلد تحت عنوان Level يا همون عمق بزاريد و سطح هر ركورد رو در اون فيلد يادداشت كنيد، بعد به ترتيب سطح ركوردها رو بخونيد مثلا اولا ركوردهاي با Level برابر 1 و همه رو اضافه كنيد بعد 2 و ...

اين توضيحات به عنوان راهنمايي كلي بود تا بدونيد الگوريتم كار به چه شكله و نوشتن برنامه اصلي ديگه با خودتونه

Mohsen0025
یک شنبه 23 شهریور 1393, 13:39 عصر
با تشکر از جوابتون حامد جان :بوس:
من میخواه تو database بشه این کارو کرد به این صورت :
1- حساب کل 2-معین 3- تفصیلی 1 4- تفصیلی 2 5-تفصیلی3 6-تفصیلی4
تا همین تفصیلی هم داشته باشه خوبه ولی کاربر میتونه 10 تا حساب کل داشته باشه هر کدوم از معین ها هم میتونن چندین تفصیلی و هر تفصیلی هم چندین تفصیلی دیگه داشته باشن!!!
تو همون گزارشگر (Datagrid یا msflxgridو..) که به تعداد 4 تا تفصیلی داره (6 ستون) مثلاً کلید F10 رو که تو اولین ستون که کل باشه بزنه لیست حساب های کل رو بیاره و اگه یکی رو انتخاب کرد ستون دوم(سلولش) انتخاب بشه و اگه کلید F10 رو زد و یا خود کاربر نوشت و بعد Enterزد حسابو براش بنویسه(تو یه لیبل در پایین) و کد حساب تو خود data و اگه معین تفصیلی داشت مابقی کارا رو انجام نده تا همه تفصیلی ها رو پر نکنه بعد بره مابقی عملیات رو انجام بده!
خیلی خیلی ممنونم ازتون خداییش اگه بلدین کمک کنید.

vbhamed
یک شنبه 23 شهریور 1393, 19:25 عصر
سلام

من راه اينكار رو براتون گفتم، آخرش هم گفتم كه نوشتن برنامه با خودتونه، تو سايت معمولا كسي تكليف، حل تمرين و نوشتن پروژه انجام نميده و خلاف قوانين سايته، فقط مي‌تونيد راهنمايي بگيريد.

Mohsen0025
یک شنبه 23 شهریور 1393, 21:56 عصر
سلام
حامد جان من نگفتم کسی آماده کنه بده.لقمه آماده همیشه آدمو تنبل می کنه!!!!
من برا بار اولمه میخوام یه همچین کاری بکنم ولی نمیدونم مثل یه برنامه حسابداری مثلاً اگه کاربر تو datagridیاmsflxgridیا... نوشت 1 و بعد اینتر زد در پایین label که تعیین شده عنوانش رو بنویسه و یا تو یکی از سلولها کلید F10 رو زد لیست اون حساب رو براش بیاره!!
کدوم dataها به درد این کار میخورن؟
لطف کنین راهنمایی کنید. من از اون پست اولتون حقیقتاً هیچی حالیم نشد بعد من نمیخوام از treeview استفاده کنم!!
ممنونم ازتون

vbhamed
سه شنبه 25 شهریور 1393, 00:21 صبح
سلام
اين چيزي كه شما مي‌گيد كمي ارتباط با علم حسابداري و بيشتر ارتباط با الگوريتم نويسي داره
وقتي كسي مي‌گه نمي‌دونم چطوري مسئله رو حل كنم يعني روش حل مسئله يا همون الگوريتم رو خوب كار نكرده و يا هنوز مسئله رو تجزيه و تحليل نكرده ولي مي‌خواد برنامش رو بنويسه، بهتره گام به گام شروع كنيد

Mohsen0025
سه شنبه 25 شهریور 1393, 09:24 صبح
سلام
حامد جان خودم حسابداری انجام میدم و بلدم!! :خجالت:
فقط می خوام بدونم اول از چه Gridی استفاده کنم که بتونه خوب بکارم بیاد!! موقع بستانکاری اون ردیف به رنگ قرمز در بیاد و...
من میخوام 6 تا ستون داشته باشه (کل،معین،تفصیلی 1 تا 4) که کاربر اگه در سلول اولی نوشت 1 یا از لیست که با F10 حساب های اون سلول میاد انتخاب کنه و پایین هم عنوان رو بنویسه! من مشکلم اینه که نمیتونم از چه بانکی ACCESS یا ... استفاده کنم! و این زیرگروهها رو ایجاد کنم و ...:افسرده:
ممنونم اگه راهنمایی کنید :تشویق:

kamiqaderi
سه شنبه 25 شهریور 1393, 10:12 صبح
دوست عزیز

تو باید از فیلتر استفاده کنی با فیلتر مشکلت حل می شه ولی اگر زیاد در هم بر هم بشه برات سخت می شه اون وقت نمی دونی چیکار باید بکنی البته خودم یه پروژه درست کردم با فیلتر مثله پروژه تو هستش

vbhamed
سه شنبه 25 شهریور 1393, 10:19 صبح
سلام
بهترين گرايد در حال حاضر كه vsFlexGrid هستش
بانك هم كه اصلا تو اين قضيه تاثيري نداره، بسته به نيازتون Jet (همون اكسس) يا Sql server
اگر برنامتون كوچيكه و حجم اطلاعات كمه و بحث شبكه هم زياد مطرح نيست Jet و گرنه Sql server

Mohsen0025
چهارشنبه 26 شهریور 1393, 10:01 صبح
سلام
نه لازم نیست که شبکه باشه!!

موقع بستانکاری اون ردیف به رنگ قرمز در بیاد و...
من میخوام 6 تا ستون داشته باشه (کل،معین،تفصیلی 1 تا 4) که کاربر اگه در سلول اولی نوشت 1 یا از لیست که با F10 حساب های اون سلول میاد انتخاب کنه و پایین هم عنوان رو بنویسه

من میخوام کل حسابها توسط خود کاربر ایجاد بشه از همون کل تا معین و تفصیلی باید از چه کد هایی استفاده کنم
خواهشن کمک کنید. کارم گیره خداییش

vbhamed
چهارشنبه 26 شهریور 1393, 13:13 عصر
سلام

شما يا بايد از روشي كه گفتم براي ايجاد زير گروههاي نامحدود استفاده كنيد يا براي اينكه خودتون رو راحت كنيد تعداد مثلا 4 سطح گروه در نظر بگيريد و براش 4 فيلد در جدول در نظر بگيريد و اگر ركورد در سطح اول بود فقط فيلد اول رو پر كنيد، اگر در سطح دوم بود فيلد اول و دوم و همينطور تا آخر

موقع جستجو هم اگر كاربر فقط گروه اول رو وارد كرد تو فيلد اول سرچ مي‌كنيد و اگر بعديها رو وارد كرد اون فيلدها رو هم در جستجو لحاظ مي‌كنيد

البته تو اين روش مشكلاتي هم هست از قبيل تكرار زياد داده ها و تغيير مشكلتر گروهها و نقل و انتقال گروهها و ...، مثلا عنوان گروه در هر ركورد تكرار ميشه و در كل افزايش حجم بانك اطلاعاتي كه ميشه با روشهاي ارتباط جداول پدر و فرزند تا حد خوبي مشكل رو رفع كرد ولي كلا اين روش براي راحتي شماست وگرنه روش اصولي نيست

Mohsen0025
دوشنبه 31 شهریور 1393, 18:25 عصر
سلام و درود بر شما
اگه میشه یه مثال برام بزنید !!!:بوس: حتی الامکان یه پروژه که حداقل بتونم ببینم زیر گروه و .... رو ببینم که چیکار میکنه

يا براي اينكه خودتون رو راحت كنيد تعداد مثلا 4 سطح گروه در نظر بگيريد و براش 4 فيلد در جدول در نظر بگيريد و اگر ركورد در سطح اول بود فقط فيلد اول رو پر كنيد، اگر در سطح دوم بود فيلد اول و دوم و همينطور تا آخر
نه !! من 6 سطر دارم(کل،معین،تفصیلی 1 تا 4) ولی کاربر خودش چندین حساب کل بتونه داشته باشه چندين حساب معین بتونه ایجاد کنه و...

Mohsen0025
شنبه 10 آبان 1393, 20:58 عصر
سلام
اگه میشه به عکسای زیر توجه کنید:
تو عکس شماره 1 اگه تو سلول اول بنویسی 1 اون پایین تو مستقل مينویسه "دریافت و پرداخت" و یا تو همون سلول F10 رو بزنی لیست حساب های مستقل رو برات میاره و تو سلول دوم هم به همین شکل تا.....
تو عکس دوم لست حسابهای کل رو داره ((توسلول اول دریافت و پرداخت و تو سلول دوم لیست حسابهایی که در کل این حساب میان رو گرفته))
عکس سوم و چهارم هم نحوه کامل شدنش هستش!!!!
از بانک SQL استفاده میکنه اما نمیدونم این dbgridه یا VSflx؟؟؟
بعد چطوری کل و مستقل رو از هم جدا میکنه؟؟؟؟
مثلاً اگه تو همون مستقل رو بنویسی و بری تو سلسول بعدی و F10 رو بزنی(عکس2) مانده هر حساب رو نوشته و اگه بری تو تفصیلی و ریز تر بشی مانده هرکدام رو به تفکیک بهت میگه!!!

vbhamed
یک شنبه 11 آبان 1393, 08:49 صبح
سلام
شما همش داري صورت سؤال رو به شكلهاي مختلف مطرح مي‌كني در حاليكه اين چيزي كه شما مي‌خواي يك مورد خيلي عمومي در نرم‌افزارهاي حسابداريه و كاملا مشخصه نحوه كار چطوريه
ولي براي پياده سازي همونطور كه قبلا گفتم بايد روش حل مسئله يا همون الگوريتم رو خوب بدوني و انتظار نداشته باشي كسي اينجا بياد اينكار رو براتون انجام بده و بعد شما چند تا آيتم كه همون حسابهات باشه به پروژه اضافه كني و تمام، بلكه بايد زيرساختها رو خودتون بنويسيد، اگر الان اينجا مشكل داشته باشيد و فرضا هم كسي براتون بنويسه بعدا به مشكلات بسيار بزرگتري برمي‌خوريد

Mohsen0025
یک شنبه 11 آبان 1393, 15:46 عصر
درود بر شما
من انتظار ندارم که کسی برام بنویسه فقط نحوه بانکش که باید چطوری باشه!!!!! نمیدونم که در حساب مستقل که حساب کل،معین و تفصیلی 1 تا 4 در اون جاداره چطور هرکدوم برا خودش جدا هستن و به راحتی مانده هر کدام و یا گزارش از اونا رو میده!!!!بانکش SQL هستش ولی اون بالا شما گفتین اگه قصد نداشته باشین به اشتراک بزارین میتونید از اکسس استفاده کنید! چطوری؟؟:ناراحت: راهنمایی بانک و اینکه این DB کدومه؟؟

vbhamed
یک شنبه 11 آبان 1393, 15:58 عصر
سلام
تو پست شماره 6 و پست 15 روش كار رو توضيح دادم ديگه، بانكش كه مهم نيست چي باشه روش كار يكيه

Mohsen0025
یک شنبه 11 آبان 1393, 16:53 عصر
دمت گرم حامد جان!!!
به قول خودت اشکال نداره بانکش چی باشه به فرض همون اکسس باشه ولی روش ایجادش چطوریه یه مثال برنی ممنون میشم تا منم یه نمو شیر فهم بشم بانکش اینجوری باشه (تصویر پایین) یا نه؟ tabel,tabel باشه؟؟؟؟؟؟؟

vbhamed
دوشنبه 12 آبان 1393, 00:00 صبح
سلام
توي همون جدولي كه ليست رديفهاي داخل سند نوشته شده 6 تا فيلد هم براي كد حسابها بزاريد
البته قبلا هم گفتم اين راه راحته و خيلي اصولي نيست