PDA

View Full Version : ذخيره ي چند داده بطور همزمان ؟



maryamb
دوشنبه 10 تیر 1387, 15:44 عصر
با سلام . من تو برنامم مي خوام يه جدول بذارم مثلا براي فاكتور كه مشتري كه به فرض 5 تا جنس خريده هر 5 تا وارد بشه ، در آخر دكمه ي تائيد رو بزنه و همه ذخيره بشن . و اگه انصراف رو زد چيزي ذخيره نشه
اولا اينكه چطوري مي شه اين كارو كرد؟
ثانيا از چه كنترلي براي اين كار بايد استفاده بشه ؟
ثالثا پايگاه داده اش بايد چطوري طراحي بشه ؟(با يه شماره فاكتور و يه تاريخ ، چند تا جنس مختلف داريم )
ممنون

اوبالیت به بو
دوشنبه 10 تیر 1387, 17:44 عصر
ثانيا از چه كنترلي براي اين كار بايد استفاده بشه ؟

ابزارهاي پايگاه داده در ‌vb كنترلهاي Data و Adodc هستن.


ثالثا پايگاه داده اش بايد چطوري طراحي بشه ؟(با يه شماره فاكتور و يه تاريخ ، چند تا جنس مختلف داريم )

جدول ميسازين، فيلدها رو طراحي ميكنيد، به vb وصل ميشين و برنامه نويسي DSL انجام ميدين.


در آخر دكمه ي تائيد رو بزنه و همه ذخيره بشن . و اگه انصراف رو زد چيزي ذخيره نشه
اولا اينكه چطوري مي شه اين كارو كرد؟

براي ذخيره كردن راهاي مختلفي هست آسون ترين روش:

Adodc1.Recordset.Update
Adodc1.Refresh
اطلاعات بيشتر:

http://barnamenevis.org/forum/showthread.php?t=104724

قسمت پايگاه داده

maryamb
دوشنبه 10 تیر 1387, 18:23 عصر
ممنون از توضيحاتت.ن ولي متوجه منظور من نشديد.اينايي كه گفتيد خيلي مقدماتي بودن.
در واقع اين توضيحي كه دادم تو يه نرم افزار ديده بودم ( نرم افزار معروف هلو )
به اين صورت بود كه براي فاكتور ، تو صفحه يه كنترلي مثل ديتا گريد گذاشته بود با 4ستون كه تو هر فيلد كه بودي اينتر كه مي زدي مي رفت تو فيلد بعدي و اگه تو آخرين فيلد بود ، يكي به رديف هاش اضافه مي شد ، در آخر هم بايد تاييد رو مي زدي وگر نه هيچ كدوم ذخيره نميشدن .
مي خواستم بدونم چطور اين كارو كرده .
بيشتر هم اين قسمتش كه با اينتر خونه به خونه جلو مي ره و اگه آخرين خونه باشه يدونه به رديف اضافه مي شه . بعد هم اينكه همه ي اينا تا زماني كه تاييد رو نزده باشيم ذخيره نمي شن.
چون مثلا اگه از ديتا گريد استفاده كرده باشه اولا بايد خاصيت add new ست شده باشه بعد هم كه همون جا ذخيره مي كنه و با تاييد كار نداره .؟؟؟؟
ضمن اينكه مثلا اگه دو رديف كالا وارد كرده باشيم موقع زدن تاييد چطور هر دو رديف همزمان ذخيره مي شن ؟

فاطمه وطن دوست
دوشنبه 10 تیر 1387, 21:01 عصر
سلام





Private Sub VSFlexGrid1_KeyPressEdit(ByVal Row As Long, ByVal Col As Long, KeyAscii As Integer)

If VSFlexGrid1.Rows - 1 <> Row Then

If KeyAscii = 13 Then VSFlexGrid1.Cell(flexcpBackColor, Row + 1, Col) = vbBlue

End If

End Sub









نمیدونم به دردتون میخوره یا نه فقط میخوام بگم باید بشینین تک تک امتحان کنین

رویدادای مربوط به فلوکس گرید رو . البته اگه با فلوکس گرید کار میکنین.

اگر تو زمان اجرا بخواد یه سطر اضافه کنه خطا میده میگه قبلا فلوکس گرید بیند شده .

majjjj
سه شنبه 11 تیر 1387, 13:08 عصر
شما میتونی چند تا تکس باکس مطابق نیازتون به پروژه اضافه کنی بعد اطلاعات رو درون هر تکس باکس وارد کنی واخرین تکس باکس که رسیدی بهش بگی اگه کلید اینتر فشرده شد حالا اطلاعات رو ذخیره کن

ali_habibi1384
سه شنبه 11 تیر 1387, 14:53 عصر
برای سوال مبتدی شما همون جواب مبتدی آقای obalijoOon کفایت می کرد .
یه جدول مجازی و یک جدول اصلی لازم دارید . درون جدول مجازی اطلاعات فیش الآن رو وارد می کنید وقتی دکمه تائید رو زدید اونها رو برای ذخیره سازی کلی در جدول اصلی ذخیره می کنید.
برای هر فاکتور هم یک شماره در نظر می گیرید که auto number باشه.

حسین علوی
سه شنبه 11 تیر 1387, 15:22 عصر
برای سوال مبتدی شما همون جواب مبتدی آقای obalijoOon کفایت می کرد .
مهندس یک نمونه بزار ببینم چیکاره ای........

maryamb
شنبه 15 تیر 1387, 11:15 صبح
برای سوال مبتدی شما همون جواب مبتدی آقای obalijoOon کفایت می کرد .

جناب سئوال من اصلا هم مبتدی نیست ، شما منظور منو متوجه نشدید.
یه جوری برخورد می کنید انگار خودتون فیلسوف هستید و با یه مشت بی سواد سر کار دارید.
این توضیحاتی که می دید هم من صد بار تو برنامم استفاده کردم .من دارم می گم چطور میشه همزمان مثلا 4 سطر به جدول اضافه کرد . نه چهار فیلد !!!!
یعنی با یه اینتر 4 سطر اضافه بشه .
متوجه شدید ؟

m_vb1386
شنبه 15 تیر 1387, 11:29 صبح
خوب بزارش تو یک حلقه با یک اینتر چهار بار کارتون انجام میشه

maryamb
شنبه 15 تیر 1387, 13:59 عصر
خوب بزارش تو یک حلقه با یک اینتر چهار بار کارتون انجام میشه

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

y.saied
شنبه 15 تیر 1387, 15:01 عصر
من هم خیلی وقت بود که دنبال این مورد بود که فهمیدم اون برنامه هایی رو که می بینی این جوری اطلاعات رو وارد میکنن به ما کلک میزنن ، و من هم همچین کلکی رو سر کاربرام میارم .

وقتی که کاربر اطلاعات رو وارد DataGrid میکنه در واقع اطلاعات جدول مربوط به سند حسابداری ذخیره میشه .

در پایین فرم این جور برنامه ها یک کلید ذخیره یا ثبت موجوده که با زدن این کلید اطلاعات مربوط دیگری که بعنوان سربرگ یا Header میباشد در جدول دیگری ذخیره میشود .

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

samiraamiri
شنبه 15 تیر 1387, 15:42 عصر
با سلام
بهتره از flex grid استفاده کنید.
کد اضافه شدن سطر به آخر

Private Sub FlexData_AfterEdit(ByVal Row As Long, ByVal Col As Long)
VarEdit = True

If Row = flexData.Rows - 1 Then

flexData.Rows = flexData.Rows + 1

End If
End Sub


کد ذخیره اطلاعات بعد از اینتر یا پائین آمدن سطر ها با Arrow key :


Private Sub FlexData_AfterRowColChange(ByVal OldRow As Long, ByVal OldCol As Long, ByVal NewRow As Long, ByVal NewCol As Long)

If OldRow <> NewRow And VarEdit = True Then
'Change Row Save Data



در این بخش می تونید چک کنید که آیا همه ستون های سطر قبلی که باید ذخیره بشه وارد شده یا نه بعد کد ذخیره اطلاعات تون رو بنویسید
در آخر هم برای اینکه بفهمید آیا رکورد اضافه می شه یا اصلاح pk رکورد مورد نظر رو با استفاده از کد زیر بگیرید و در ستون اول سطر ذخیره کنید پس باید یه کدی هم اولش بنویسید که ببینه اگه pk داشت باید اصلاح بشه و الا باید insert بشه

Set rstidentity = cnnMain.Execute("select @@identity")
flexData.TextMatrix(OldRow, 1) = rstidentity.Fields(0).value
]

امیدوارم به دردتون بخوره موفق باشید

حسین علوی
یک شنبه 16 تیر 1387, 00:43 صبح
سلام
این نمونه رو ببینید ((پوشه رو در درایو D کپی کنید))

maryamb
یک شنبه 16 تیر 1387, 11:18 صبح
اگه نگرفتی بگو تا برنامه ای که با این روش نوشتم برات بفرستم
من هم تو برنامم تقریبا این کار رو که گفتید می کنم ، یعنی اطلاعات سربرگ فاکتور رو تو. جدول دیگه ای ذخیره می کنم و کالاهای فاکتور رو تو یه جدول دیگه و این دو جدول به هم لینک هستن .
ولی آخه ابن جوری که شما می گید کالاها ذخیره می شن . من می خوام کالاها هم ذخیره نشن . فقط وارد بشن و بعد با زدن دکمه ی تایید ذخیره شن و اگه طرف انصراف رو زد داده ای ذخیره نشده باشه .
حالا من کد های دوستان رو امتحان می کنم . ببینم به جواب می رسم.
ممنون از همگی

Mbt925
یک شنبه 16 تیر 1387, 12:18 عصر
راه حل مشکل شما خیلی ساده است : نگه داری اطلاعات با کنترل هایی که برای این کار تعبیه شدن و انجام عملیات برروی همه ی اونا.

مثلا اطلاعاتی که کاربر وارد می کنه رو در یه کنترل FlexGrid قرار بدید و بعد از اتمام کار تمام سطرهای این کنترل رو وارد پایگاه داده ای کنید.
کار با کنترل های اینچنین هم که خیلی سادست.

y.saied
یک شنبه 16 تیر 1387, 12:20 عصر
و اگه طرف انصراف رو زد داده ای ذخیره نشده باشه .
.................................................. ...........................................

اگه کاربر انصراف رو زد داده هایی که ذخیره شده همه از جدول مربوطه حذف بشن . (قرار نیست هر کاری رو که می کنیم کاربر بفهمه)

اوبالیت به بو
یک شنبه 16 تیر 1387, 20:11 عصر
اگه کاربر انصراف رو زد داده هایی که ذخیره شده همه از جدول مربوطه حذف بشن .
انصراف نه Delete

(قرار نیست هر کاری رو که می کنیم کاربر بفهمه)
hmmm

samiraamiri
دوشنبه 17 تیر 1387, 14:02 عصر
و اگه طرف انصراف رو زد داده ای ذخیره نشده باشه .
.................................................. ...........................................

اگه کاربر انصراف رو زد داده هایی که ذخیره شده همه از جدول مربوطه حذف بشن . (قرار نیست هر کاری رو که می کنیم کاربر بفهمه)

فکر نمی کنید حذف اضافه توی بانک بار اضافی به سیستم تحمیل کنه ؟
وقتی flex شما bind نباشه هیچی تو بانک ذخیره نمی شه بعد اگه خواستید اونو ذخیره کنید . می تونید برای دکمه delete کد بنویسید که از سطر های flex حذف کنه (خیلی راحت بدونه اینکه تو بانک ذخیره بشه ) من نمی دونم چرا وقتی می شه خیلی راحت به نتیجه رسید لقمه رو می چرخونیم دور سرمون؟