Reputation:
I am new to Vb . I am trying to make a project on railway reservation system . I want to generate random ticket number and save it to the ms.access 2007 file . So far , everything is quite working properly but the problem I am having is that when I run the program and book two tickets one after another (without stop debugging ) , it generates two different random ticket numbers and saves them to the ms.access file but when I book one ticket and then stop debugging and after that debug again and book another ticket , it generates the same ticket number as it generated for the first ticket which I booked when I debug for the first time . Could you help me how should I fix this issue ? Thank you ! This is my code
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim value As Integer = CInt(Int((47563 * Rnd()) + 1))
Dim str As String
str = "insert into Table2 ([P_Name], [Age], [Phone], [Train_Name], [Seat_No],[Berth],[Tnumber]) values (?, ?, ?, ?, ?,?,?)"
Dim cmd As OleDbCommand = New OleDbCommand(str, Conn)
cmd.Parameters.Add(New OleDbParameter("P_Name", CType(TextBox1.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Age", CType(TextBox2.Text, Integer)))
cmd.Parameters.Add(New OleDbParameter("Phone", CType(TextBox3.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Train_Name", CType(TextBox4.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Seat_No", CType(TextBox5.Text, Integer)))
cmd.Parameters.Add(New OleDbParameter("Berth", CType(TextBox6.Text, String)))
cmd.Parameters.Add(New OleDbParameter("Tnumber", CType(value, Integer)))
Try
cmd.ExecuteNonQuery()
cmd.Dispose()
Conn.Close()
TextBox1.Clear()
TextBox2.Clear()
TextBox3.Clear()
TextBox4.Clear()
TextBox5.Clear()
TextBox6.Clear()
MsgBox("Ticket Booked Successfully !!! ")
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
Upvotes: 0
Views: 118
Reputation: 44
You can use GUID or Date format for Unuqie Number.
For example: Now : 2015/03/14 13:10:52 your unique number may be 20150314131052.
Upvotes: 0
Reputation: 33738
Instead of the Rnd()
function, instantiate a Random
object and use that.
Dim random As Random = New Random
Dim ticketNumber As Int32 = random.Next(1, 47563)
Note though that this is an absolute TERRIBLE way to generate a ticket number. You will ALWAYS get ticket number collisions if you use random numbers.
Alternative methods would be to use the system date/time (to the millisecond) to generate unique ticket numbers.
Or use a Guid.
Or an AutoNumber (IDENTITY) column in your database.
Or any other method that gives you a non-repeating sequence of numbers / characters.
Upvotes: 2