PDA

View Full Version : مبتدی: کد شمارنده(شماره فاکتور قبلی رو از جدول بخونه و یه واحد بهش اضافه کنه)



Miryam
پنج شنبه 24 شهریور 1390, 12:14 عصر
سلام لطفا جواب بدید
[/VB] یه فرم فروش دارم میخوام با زدن دکمه +
شماره فاکتور قبلی رو از جدول فروش بخونه(اخرین شماره فاکتور ثبت شده) یه واحد بهش اضافه کنه و اون رو درون تکس باکس شماره فاکتور بریزه
این کد نوشتم ولی جواب نمیده:گریه:

PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim strSql AsString
Dim dr As SqlDataReader
Dim cmd AsNew SqlCommand
strSql = "Data source=VIRTUALXP-28481;Initial catalog=Foroshgah;Integrated security=True"
Dim con AsNew SqlConnection(strSql)
strSql = "select * from Tblforosh factor"
con.Close()
con.Open()
cmd.Connection = con
cmd.CommandText = strSql
dr = cmd.ExecuteReader
If dr.Read Then

Txtfactor.Text = dr(

"factor ") + 1

EndIf
EndSub

hooooman
پنج شنبه 24 شهریور 1390, 14:08 عصر
select isnull(max(factor),0)+1 as factorno from forosh
اگر مشكل همزماني داري بايد قبل از گرفتن شماره مورد نظرت جدولت رو LOck كني شماره جديد رو بگيري و بلافاصله تو جدولت ذخيره كني و جدول رو از Lock خارج كني.به همين دليل بايد جدول سريال فاكتور رو جدا كني از جدول فاكتورات.

Miryam
پنج شنبه 24 شهریور 1390, 19:16 عصر
سلام
متوجه نشدم میشه بیشتر توضیح بدید کد و چطوری و کجا باید بنویسم LOCK چکار میکنه

minaforotan
پنج شنبه 24 شهریور 1390, 23:29 عصر
اگه شماره ها به ترتیب زده میشن کافیه بادستور Select max(id_factor)from factorha بزرگترین شماره فاکتور ثبت شده رو به دست بیاری بعد تو یه متغییر بریزی بعد یکی بش اضافه کنی

Miryam
جمعه 25 شهریور 1390, 01:51 صبح
اگه شماره ها به ترتیب زده میشن کافیه بادستور Select max(id_factor)from factorha بزرگترین شماره فاکتور ثبت شده رو به دست بیاری بعد تو یه متغییر بریزی بعد یکی بش اضافه کنی



مرسی ولی بازم جواب نگرفتم حالا چکار کنم :افسرده::گریه:

mobtakercode
جمعه 25 شهریور 1390, 07:37 صبح
به جای استفاده از دستور ExecuteReader باید از دستور ExecuteScalar استفاده کنید به صورت زیر


RecordCount = CInt(cmd.ExecuteScalar())

RecordCount متغیری از نوع int است

Miryam
جمعه 25 شهریور 1390, 18:33 عصر
سلام
من هر جوری کد و می نویسم جواب نمیده نمیتونه آخرین شماره فاکتور پیدا کنه:عصبانی++:
لطفا کمک کنید

minaforotan
جمعه 25 شهریور 1390, 23:04 عصر
ad.SelectCommand.CommandText = "Select max(id)from factor"
ad.SelectCommand.Connection.Open()
lbl_id.Text = ad.SelectCommand.ExecuteScalar.ToString()
ad.SelectCommand.Connection.Close()


m_id=val(lbl_id.text)+1
m_id=متغیر عددی
حالا m_id حاوی کد جدیده که باید تو درج ازش استفاده کنی فقط چون یه متغیر از نوع عددی هست باید به رشته ای تبدیلش کنی و اونوقت درجش کنی

امیدوارم دیگه درس شه :لبخندساده:

Miryam
شنبه 26 شهریور 1390, 19:22 عصر
:گریه: نه بازم درست نشد دیگه دارم نا امید میشم:متعجب:
من یه جدول فروش دارم که شماره فاکتور مستقیم توی این جدول ثبت می کنم
یه تکس باکس فاکتور دارم و یه دکمه(+) گذاشتم کنارش که بازدن اون بتونه آخرین شماره فاکتور ثبت شده در جدول فروش و جستجو کنه و یک واحد بهش اضافه کنه و اون شماره رو توی تکس باکس فاکتور نمایش بده
مشکل من اینه که نمیدونم چطور باید آخرین شماره فاکتور شناسایی کنه اگه امکانش هست کدشو برام بنویسید
با تشکر

Miryam
یک شنبه 27 شهریور 1390, 12:18 عصر
سلام
کسی نیست کمکم کنه مشکل من هنوز حل نشده:گریه:

minaforotan
یک شنبه 27 شهریور 1390, 14:37 عصر
یه برنامه گذاشتم واست. بانک فاکتور رو اتچ کن بعد باهاش کار کن خیلی سادس نیازی به توضیح نداره بازم اگه سوالی داشتی بگو

Miryam
دوشنبه 28 شهریور 1390, 14:05 عصر
سلام مرسی یه دنیا ممنون:قلب:
من این کدو نوشتم ولی یه مشکلی داره تازمانی که شماره فاکتور کوچکتر از عدد 9 میتونه بین اعداد (1...9) جستجو کنه و max پیدا کنه ولی از 9 به بعد نمیتونه maxشناسایی کنه و هر بار عدد9 به عنوان max برمیگردونه در حالی که من عدد 10 رو هم ثبت کردم داد
حالا باید چکار کنم.
PrivateSub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

s = Val(Txtid_factor.Text) + 1

ad.InsertCommand.Connection.Open()

ad.InsertCommand.Connection.Close()

EndSub






PrivateSub FrmForosh_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
cn.ConnectionString = "Data Source=VIRTUALXP-28481;Initial catalog=Foroshgah;Integrated security=True"
ad.SelectCommand = New SqlCommand
ad.SelectCommand.Connection = cn
ad.InsertCommand = New SqlCommand
ad.InsertCommand.Connection = cn
'**************** *************
ad.SelectCommand.CommandText = "Select max(id_factor)from tblforosh "
ad.SelectCommand.Connection.Open()
Txtid_factor.Text = ad.SelectCommand.ExecuteScalar.ToString()
ad.SelectCommand.Connection.Close()
EndSub

minaforotan
سه شنبه 29 شهریور 1390, 00:25 صبح
خوب واسه من که این مشکل وجود نداره بیا بعد از این که فاکتور رو ثبت کردی یعنی تو دکمه ی ثبت فاکتورت بعد از کد درج اون کدا که بعد از ستاره ها تو فرم لودت نوشتی و دوباره بنویس

sadeghlinux
سه شنبه 29 شهریور 1390, 01:08 صبح
سلام

Dim cm As New SqlCommand("SELECT max(id) FROM tbl_CN", con)
Dim dr As SqlDataReader = cm.ExecuteReader
If dr.Read Then
If IsDBNull(dr(0)) Then
id.Text = 1
Else
id.Text = dr(0) + 1
End If
End If
dr.Close()

متغیر Con رو هم میتونی تو همین فرم مقدار دهی کنی یا اینکه تو یه ماژول تابع زیر رو وارد کنی

Function setconnection(ByRef con As SqlConnection) As Boolean
Try
con = New SqlConnection("Data Source=(local);Initial Catalog=DataBaseName;Integrated Security=True")
con.Open()
Return True
Catch ex As Exception
MsgBox("!! ارتباط با دیتابیس با شکست مواجه شد", MsgBoxStyle.Critical, "اخطار")
Return False
End Try
End Function

Miryam
سه شنبه 29 شهریور 1390, 16:51 عصر
خوب واسه من که این مشکل وجود نداره بیا بعد از این که فاکتور رو ثبت کردی یعنی تو دکمه ی ثبت فاکتورت بعد از کد درج اون کدا که بعد از ستاره ها تو فرم لودت نوشتی و دوباره بنویس
سلام این راه هم امتحان کردم ولی باز فقط تا عدد 9 میتونه max شناسایی کنه راستی من شماره فاکتور توی بانک از نوع nvarchar تعریف کردم ممکنه مشکل از این باشه

Miryam
سه شنبه 29 شهریور 1390, 16:53 عصر
سلام

Dim cm As New SqlCommand("SELECT max(id) FROM tbl_CN", con)
Dim dr As SqlDataReader = cm.ExecuteReader
If dr.Read Then
If IsDBNull(dr(0)) Then
id.Text = 1
Else
id.Text = dr(0) + 1
End If
End If
dr.Close()

متغیر Con رو هم میتونی تو همین فرم مقدار دهی کنی یا اینکه تو یه ماژول تابع زیر رو وارد کنی

Function setconnection(ByRef con As SqlConnection) As Boolean
Try
con = New SqlConnection("Data Source=(local);Initial Catalog=DataBaseName;Integrated Security=True")
con.Open()
Return True
Catch ex As Exception
MsgBox("!! ارتباط با دیتابیس با شکست مواجه شد", MsgBoxStyle.Critical, "اخطار")
Return False
End Try
End Function
سلام
لطفا بیشتر توضیح بدین من نمی دونم این کد کجا باید بنویسم می خوام با زدن دکمه + این عملیات انجام بشه
با تشکر

ebraham
چهارشنبه 30 شهریور 1390, 22:40 عصر
ساده ترين راه اينه كه يه دستور سلكت بنويسي :(cmd=new sqlcommand("select max(id) from tablename",sqlcon)
cmd.executescalar+1
به همين راحتي
بعدش بايد محتواي دستور دوم را هر جا كه خواستي بريزي

minaforotan
چهارشنبه 30 شهریور 1390, 23:47 عصر
راستی من شماره فاکتور توی بانک از نوع nvarchar تعریف کردم ممکنه مشکل از این باشه

خوب اره دیگه نوعت باید عددی باشه int بزار اخه کاراکتر رو که نمیتونه با عدد جمع کنه اون بانکو که واست ضمیمه کردم مگه نگا نکردی؟