 |
|
VB.NET อยากถามเรื่อง Substring และ Automunber หน่อยอ่ะค่ะ เช่น 0001/2554 แล้วจะให้มัน +1 |
|
 |
|
|
 |
 |
|
Substring มันนับจากทางซ้าย หนูก็ให้เป็น Substring(3)คือ ตน. ที่3 ซึ่งก็คือ ตรงเลข 1 แต่ทำไมมันถึงได้ ERROR อ่ะคะ
รบกวนผู้รู้ช่วยไขข้อข้องใจหน่อยนะคะ หนูความรู้ยังน้อย ประสบการณ์ยังไม่ค่อยชำนาญอ่ะค่ะ ขอบคุณม๊ากๆ ค่าาาาา
|
 |
 |
 |
 |
Date :
2011-05-31 13:13:41 |
By :
แค่เด็กตัวเล๊กๆคนนึง |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอนนี้เหลือติดตรงที่ว่า หนูจะทำยังไงให้ 0001 เป็น int อ่ะคะ เพราะมัน +1 ไม่ได้อ่ะค่ะ
|
 |
 |
 |
 |
Date :
2011-05-31 14:07:12 |
By :
แค่เด็กตัวเล๊กๆคนนึง |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำยังไงดีค๊า....ให้มันเป็น 0002 0003 และเรื่อย ๆ T^T
|
 |
 |
 |
 |
Date :
2011-05-31 14:43:28 |
By :
แค่เด็กตัวเล๊กๆคนนึง |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
Private Sub Tranfer_id()
connection()
Dim sql As String
Dim ids As String
Dim countID As Integer
sb = New StringBuilder
sb.Append("Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR")
Sql = sb.ToString
da = New SqlDataAdapter(Sql, conn)
ds = New DataSet
da.Fill(ds, "STAFF_TR")
If IsDBNull(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")) Then
id = CStr("0001/" & Now.Year + 543)
Else
ids = ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")
ids = ids +1
countID = Len(ids )
If countID = 4 Then
id = ids & Now.Year + 543
ElseIf countID = 3 Then
id = "0" & ids & Now.Year + 543
ElseIf countID = 2 Then
id = "00" & ids & Now.Year + 543
ElseIf countID = 1 Then
id = "000" & ids & Now.Year + 543
End If
End If
conn.Close()
End Sub
|
 |
 |
 |
 |
Date :
2011-05-31 15:13:30 |
By :
makyui01 |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
การใช้ฟิล์ด ลักษณะ NNNN/YYYY เป็นอ้างอิง
NNNN คือลำดับใน 1 ปี เมื่อขึ้นปีใหม่ ให้เริ่มนับ 1 ใหม่
YYYY คือปี
จะยุ่งยากเมื่อมีอ้างอิง 2 ปีปนกันอยู่ (คุณคงจะไม่ทำโปรแกรมเพื่อใช้งานแค่ปีเดียวหรอกนะ)
เช่นถ้า ข้อมูล Transfer_ID เป็นดังนี้
0001/2554
0002/2554
0003/2554
0004/2554
0001/2555
การใช้ Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR
จะได้ค่า เป็น 0004/2554 ซึ่งความเป็นจริง เราต้องการ 0001/2555
แน่นอนว่า มี SQL Command เพื่อเอา 0001/2555 ออกมา แต่ผมไม่ค่อยชอบเลขอ้างอิงแบบนี้ จึงไม่อยากแนะนำให้ใช้
ทางที่ดี ใช้ Index แบบ YY-NNNN จะดีกว่า
|
ประวัติการแก้ไข 2011-05-31 18:15:16
 |
 |
 |
 |
Date :
2011-05-31 18:07:32 |
By :
watcharop |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
หรือถ้าหากอยากได้แบบ NNNN/YYYY จริงๆ
ก็ต้องควรจะสร้าง Column TransferYear เป็น Integer เก็บเลขปีพศ. ขึ้นมาอีกหนึ่ง Column
เวลาหาอ้างอิงล่าสุด ก็ใช้ SQL Command
Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR WHERE TransferYear=YEAR(GETDATE())+543
|
 |
 |
 |
 |
Date :
2011-05-31 18:13:51 |
By :
watcharop |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณ คำโตๆเลยนะคะ สำหรับความรู้จากคุณทั้ง 2
แล้วทีนี้หนูก็เลยแอพพลายซะเลยอ่ะค่ะ
ซึ่งก็ได้เรื่องว่า
Code (VB.NET)
Private Sub Tranfer_id()
connection()
Dim sql As String
sb = New StringBuilder
sb.Append("Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR")
Sql = sb.ToString
da = New SqlDataAdapter(Sql, conn)
ds = New DataSet
da.Fill(ds, "STAFF_TR")
If IsDBNull(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")) Then
id = CStr(Now.Year + 543).Substring(2) & "-" & "0000"
Else
ids = ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")
ids = ids + 1
countID = Len(ids)
If countID = 4 Then
id = (Now.Year + 543).Substring(2) & "-" & ids
ElseIf countID = 3 Then
id = (Now.Year + 543).Substring(2) & "-" & "0" & ids
ElseIf countID = 2 Then
id = (Now.Year + 543).Substring(2) & "-" & "00" & ids
ElseIf countID = 1 Then
id = (Now.Year + 543).Substring(2) & "-" & "000" & ids
End If
End If
conn.Close()
End Sub
มันERROR ตอนเข้า Loop CountID อ่ะค่ะ ต้องทำยังไงถึงจะสามารถ substring ให้มันเป็น YY-NNNN ได้อ่ะคะ
|
 |
 |
 |
 |
Date :
2011-05-31 19:16:15 |
By :
แค่เด็กตัวเล๊กๆคนนึง |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มีตัวอย่างอยู่เยอะล่ะใน WebBoard นี้
แต่จำไม่ได้
เดี๋ยว Mr.Win คงมาช่วยบอก
|
 |
 |
 |
 |
Date :
2011-06-01 08:37:27 |
By :
watcharop |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
หนูแก้ใหม่เป็น
Code (VB.NET)
Private Sub Tranfer_id()
connection()
Dim sql As String
sb = New StringBuilder
sb.Append("Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR")
sql = sb.ToString
da = New SqlDataAdapter(sql, conn)
ds = New DataSet
da.Fill(ds, "STAFF_TR")
If IsDBNull(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")) Then
'id = CStr(Now.Year) + 543 & "-" & "0000"
id = CStr(Now.Year + 543).Substring(2) & "-" & "0001"
'id = CStr(1)
Else
'id = CStr(CInt(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID").ToString.Substring(3)) + 1)
ids = ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")
ids = ids + 1
countID = Len(ids)
If countID = 4 Then
id = Mid((Now.Year + 543), 2) & "-" & ids
'id = (Now.Year + 543).Substring(2) & "-" & ids
ElseIf countID = 3 Then
'id = (Now.Year + 543).Substring(2) & "-" & "0" & ids
id = Mid((Now.Year + 543), 2) & "-" & "0" & ids
ElseIf countID = 2 Then
id = Mid((Now.Year + 543), 2) & "-" & "00" & ids
' id = (Now.Year + 543).Substring(2) & "-" & "00" & ids
ElseIf countID = 1 Then
id = Mid((Now.Year + 543), 2) & "-" & "000" & ids
'id = (Now.Year + 543).Substring(2) & "-" & "000" & ids
End If
End If
conn.Close()
End Sub
แต่มัน ERROR ตรง ids = ids + 1 อ่ะค่ะว่า .Conversion from string "54-0001" to type 'Double' is not valid.. อ่ะค่ะ
ต้องทำอย่างไรต่ออ่าคะ ตอนนี้หนูงงไปหมดแย้วว ช่วยด้วยค่าาา
|
 |
 |
 |
 |
Date :
2011-06-01 11:03:55 |
By :
แค่เด็กตัวเล๊กๆคนนึง |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Code (VB.NET)
Private Sub Tranfer_id()
connection()
Dim sql As String
sb = New StringBuilder
sb.Append("Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR")
sql = sb.ToString
da = New SqlDataAdapter(sql, conn)
ds = New DataSet
da.Fill(ds, "STAFF_TR")
If IsDBNull(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")) Then
'id = CStr(Now.Year) + 543 & "-" & "0000"
id = CStr(Now.Year + 543).Substring(2) & "-" & "0001"
'id = CStr(1)
Else
Dim stRef1 As String = (Now.Year+543-2500).ToString("00") & "-"
Dim stNextID As String = stRef1 & "0001"
ids = ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")
If ids.IndexOf(stRef1)>=0 Then
Dim n As Integer = Convert.ToInt32(ids.SubString(stRef1.Length))+1
stNextID = stRef1 & n.ToString("0000")
End If
MessageBox.Show("NextID: " & stNextID)
End If
conn.Close()
End Sub
|
 |
 |
 |
 |
Date :
2011-06-01 13:20:36 |
By :
watcharop |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณมากๆค่ะ ตอนนี้ทำสำเร็จแล้วนะคะ ^____^ :)
เลยเอา code มาแปะไว้เผื่อใครอยากได้รูปแบบAutoNumber แบบ YY-NNNN ค่ะ
Code (VB.NET)
Private Sub Tranfer_id()
connection()
Dim sql As String
sb = New StringBuilder
sb.Append("Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR")
sql = sb.ToString
da = New SqlDataAdapter(sql, conn)
ds = New DataSet
da.Fill(ds, "STAFF_TR")
If IsDBNull(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")) Then
id = CStr(Now.Year + 543).Substring(2) & "-" & "0001"
Else
'id = CStr(CInt(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID").ToString.Substring(3)) + 1)
ids = (CInt(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID").Substring(3)))
ids = ids + 1
countID = Len(ids)
If countID = 4 Then
id = CStr(Now.Year + 543).Substring(2) & "-" & ids
'id = (Now.Year + 543).Substring(2) & "-" & ids
ElseIf countID = 3 Then
'id = (Now.Year + 543).Substring(2) & "-" & "0" & ids
id = CStr(Now.Year + 543).Substring(2) & "-" & "0" & ids
ElseIf countID = 2 Then
id = CStr(Now.Year + 543).Substring(2) & "-" & "00" & ids
' id = (Now.Year + 543).Substring(2) & "-" & "00" & ids
ElseIf countID = 1 Then
id = CStr(Now.Year + 543).Substring(2) & "-" & "000" & ids
'id = (Now.Year + 543).Substring(2) & "-" & "000" & ids
End If
End If
conn.Close()
End Sub
|
 |
 |
 |
 |
Date :
2011-06-01 14:47:39 |
By :
แค่เด็กตัวเล๊กๆคนนึง |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มีประโยชน์แน่นอนครับ 
|
 |
 |
 |
 |
Date :
2011-06-01 14:53:20 |
By :
webmaster |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
มาอ่านเจอกระทูนี้เห็นคล้ายๆกันแต่เป็นการที่ AutoID อะคับ
ประมาณว่า ID001 พอมีคน regis เพิ่มให้เป็น ID002 ID003 เรื่อยๆอะคับประมาณนี้ต้อง code แบบไหนหรอคับผมเพิ่งหัด code อะคับ
รบกวนหน่อยคับ
|
 |
 |
 |
 |
Date :
2011-06-17 10:35:01 |
By :
Rookie |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ตอบความคิดเห็นที่ : 15 เขียนโดย : Rookie เมื่อวันที่ 2011-06-17 10:35:01
รายละเอียดของการตอบ ::
id
ID001
ID002
ID003
อันดับแรกให้คุณ select เอาค่า id ที่มากที่สุดมาก่อนครับ เช่น MAX(SUBSTRING(id,3,3)) ก็จะได้เลข 003
หลังจากตรงนี้ก็นำค่าที่ได้ไปเก็บไว้ในตัวแปลครับ
Dim Cut As String = "003"
Cut += CInt(1)
If Cut.Length = 1 Then
Cut = "ID00" + Cut
ElseIf Cut.Length = 2 Then
Cut = "ID0" + Cut
ElseIf Cut.Length = 3 Then
Cut = "ID" + Cut
End If
มาถึงตรงนี้แล้วค่า Cut จะเป็น 004 ครับ
ประมาณนี้
|
 |
 |
 |
 |
Date :
2011-06-22 12:03:36 |
By :
sodamax |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณครับ i Love ThaiCreate.Com
|
 |
 |
 |
 |
Date :
2011-06-24 10:48:01 |
By :
คุณศุภกร |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อยาก ได้โค้ด Run ตัวเลข อัตโนมัติ ที่ เขียน ด้วย ภาษา VB.Net
เช่น รหัสลูกค้า C0001 รหัสต่อ ไป รัน เป็น C0002 เหมือนคุณ Dearเหมือนกันเลย
|
 |
 |
 |
 |
Date :
2011-08-31 20:18:46 |
By :
์ีNUM |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
Private Sub Tranfer_id()
connection()
Dim sql As String
sb = New StringBuilder
sb.Append("Select MAX(Tranfer_ID) AS Tranfer_ID From STAFF_TR")
sql = sb.ToString
da = New SqlDataAdapter(sql, conn)
ds = New DataSet
da.Fill(ds, "STAFF_TR")
If IsDBNull(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID")) Then
id = "ID" & "001"
Else
id = CStr(CInt(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID").ToString.Substring(3)) + 1)
ids = (CInt(ds.Tables("STAFF_TR").Rows(0)("Tranfer_ID").Substring(3)))
ids = ids + 1
id = "ID" & ids.PadLeft(3, '0')
End If
conn.Close()
End Sub
ลองเอาไปประยุกต์ดูครับ
|
 |
 |
 |
 |
Date :
2011-09-01 09:32:20 |
By :
่ำVC#.Net |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ผมเขียนโปรแกรมปุ่ม เพิ่มข้อมูลลูกค้าด้วยภาษา c# และอยากให้รันแบบนี้ครับ E5500000 (ตรง 55 เป็น พ.ศ นะครับ) ช่วยทีนะครับบ _/\_
Code (C#)
private void eadd_Click(object sender, EventArgs e)
{
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
string strCon = @"Provider=Microsoft.ACE.Oledb.12.0;Data Source=C:\project_one\medicine.accdb";
conn.ConnectionString = strCon;
conn.Open();
string sql;
StringBuilder sb = new StringBuilder();
sb.Append("select mid(max(emp_id),4,6) from emps");
sql = sb.ToString();
OleDbDataAdapter empDA = new OleDbDataAdapter(sql,conn);
DataSet empDS = new DataSet();
empDA.Fill(empDS, "emp");
DataTable tbl_emp = new DataTable();
DataRow tblR_emp = tbl_emp.NewRow();
//convert.toint32(dbnull.value)
if (DBNull.Value == null)
{
string id;
id=(DateTime.Now.Year+543).ToString()+"00001";
}
else
{
string stRef1 = "E"+(DateTime.Now.Year + 543 - 2500).ToString();
string NextId = stRef1 + "00001";
string ids;
ids=empDS.Tables["emps"].Rows[0]["emp_id"].ToString();
if (ids.IndexOf(stRef1) >= 0)
{
int n=Convert.ToInt32(ids.Substring(stRef1.Length))+1;
NextId = stRef1 + n.ToString("00000");
textBox1.Text = NextId;
}//end if ids
textBox1.Text = NextId;
}//end if
}
|
 |
 |
 |
 |
Date :
2012-02-11 22:40:48 |
By :
ผู้ไม่รู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ช่วยทีนะครับ จะขอบพระคุณเป็นอย่างสูง
|
 |
 |
 |
 |
Date :
2012-02-12 14:40:49 |
By :
ผู้ไม่รู้ |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
อยากได้ปีวันเพิ่ม 1 ปี อัตโนมัติอ่ะค้ะ โดยปีเป็น รูปแบบ เช่น 2554 แล้วจะบวกเพิ่มตอนบันทึกอ่ะค่ะให้ เป็น 2555(ปีเก็บเป็นเท็กบ็อกอ่ะค่ะ มือใหม่เริ่มเขียนน่ะค่ะ ช่วยหน่อยนะคะๆๆ)
|
 |
 |
 |
 |
Date :
2012-02-15 17:50:42 |
By :
lula |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
บทความนี้เลยครับ =>
.NET สร้าง Auto ID Number ใช้สำหรับ Order ID หรือ Member ID รหัสลำดับต่างๆ โดยมีอักษร (VB.Net, C#)
|
 |
 |
 |
 |
Date :
2017-02-21 10:39:45 |
By :
mr.win |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|