 |
|
ไม่เข้าใจ Code ครับ คือผมไปเอาของคนอื่นมาใช้นะครับ แต่ว่าไม่เข้าใจว่ามันหมายความว่ายังไงอะครับ |
|
 |
|
|
 |
 |
|
ขออธิบายการทำงานของ function AutoGenerateRun() แบบมึนๆ นะ
- 1. Query ข้อมูลจากฐานข้อมูล ให้เลือกค่าที่มากที่สุดของ sid จาก supplier มาหนึ่งค่า แล้วเอาค่าที่ได้ป้อนใส่ตัวแปรที่ชื่อว่า tmpID
- 2. ด้วยเหตุที่ว่า tmpID มันไม่เก็บแต่ตัวเลขอย่างเดียว มันดันมีตัวอักษรติดว่าติด 2 ตัว ดังนั้นถ้าเราต้องการ index ที่มากกว่าที่สุด เราจำเป็นต้องตัดตัวอักษรเหล่านั้นออกไปให้เหลือแต่ตัวเลขอย่างเดียว
- 3. การทำให้เหลือแต่ตัวเลขอย่างเดียว ก็เลยต้องใช้ function StringFromRight(tmpID, 2) มาช่วย โดยฟังก์ชั่นนี้จะทำการ ตัดตัวอักษรทางขวาไปจำนวน 2 ตัว ทำให้เหลือเพียงตัวเลข 3 ตัว
- 4. นำอักษรตัวเลขที่ได้แปลงเป็น int เก็บไว้ที่ตัวแปร LastID
- 5. เอา LastID ไปบวก 1 แล้วแปลงกลับเป็น string ด้วย format "SP000" สมมติ LastID = 006 มันจะได้ "SP006" ออกไป แล้วเอาไปแสดงที่ txts_id
|
 |
 |
 |
 |
Date :
2009-12-31 00:08:42 |
By :
tungman |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ดึง sid ล่าสุดมาจาก database ครับ
sqlTmp = "SELECT TOP 1 sid FROM supplier "
sqlTmp &= " ORDER BY sid DESC"
แปลงเป็น String เก็บที่ tmpID สมมุต sid = SP007 นะครับ
tmpID = CStr(drTmp.Item("sid"))
ส่งไปตัดคำว่า SP ออกด้วย Function StringFromRight จะเหลือ 007 แล้วแปลงเป็นตัวเลข เก็บที่ LastID
LastID = CInt(StringFromRight(tmpID, 2))
นำ 007 +1 ก็จะได้ 008 แล้วแปลงเป็นตัวอักษรโดยใส่ Fomat เป็น SP ข้างหน้าก็จะได้ SP008 ครับ แล้วแสดงที่ Text
LastID = LastID + 1
txts_id.Text = LastID.ToString("SP000")
สำหรับ Function StringFromRight นะครับ
จากที่ส่งมา StringFromRight(tmpID, 2) สมมุติ tmpID เป็น SP007
strTmp = SP007
strTmp.Length = 4 นับจาก S เริ่มที่ 0
strLength = 2
Public Function StringFromRight(ByVal strTmp As String, ByVal strLength As Integer) As String
If (strLength > 0 And strTmp.Length >= strLength) Then
Return strTmp.Substring(strTmp.Length - strLength, strLength) // 4-2,2 จะได้ Substring(2,2) ครับ
Else
Return strTmp
End If
End Function
ค่าที่ได้จะเหลือเฉพาะ 007 ครับ
ประมาณนี้ผิดพลาดประการใดขออภัยด้วยครับ
|
 |
 |
 |
 |
Date :
2009-12-31 14:30:00 |
By :
KohDev |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ทำไมชื่อผมมันไม่ชึ้นหว่า
|
 |
 |
 |
 |
Date :
2009-12-31 14:35:32 |
By :
KohDev |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
ขอบคุณพี่ๆ มากครับ
แต่จากที่ผมได้รองแล้วโค๊ดชุดนี้ มันจะเพิ่ม sid ขึ้นได้ก็ต่อเมื่อเรากำหนด sid ใน DB เป็น char 5 อะครับ ถ้าผมกำหนด เป็น 10 มันก็จาไปยอม + ขึ้น 1 ให้
แล้วก็ยังงงๆ กับ function StringFromRight รบกวน อธิบายละเอียดกว่านี้หน่อยได้ไหมครับ คือผมดูแล้วยังไม่เข้าใจอะครับ ว่าอย่าง strTmp.Substring ที่ได้เป็น (2,2) แล้วเอาไปทำอะไร Return ค่ากลับไปเป็นยังไงอะครับ
|
 |
 |
 |
 |
Date :
2010-01-01 10:44:57 |
By :
Nameless |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
 |
|
|
 |
 |
|
strTmp.Substring ที่ได้เป็น (3,2) เป็นการตัดคำใน strTmp ครับ
อ้อโทษทีครับขอแก้ไข มึนปีใหม่นิดหน่อยครับ 
สำหรับ Function StringFromRight นะครับ strTmp.Length = 5 ครับไม่ใช่ 4
จากที่ส่งมา StringFromRight(tmpID, 2) สมมุติ tmpID เป็น SP007
strTmp = SP007
strTmp.Length = 5 จำนวนตัวอักษร เลยต้องประกาศเป็น 5 ครับ
strLength = 2
Public Function StringFromRight(ByVal strTmp As String, ByVal strLength As Integer) As String
If (strLength > 0 And strTmp.Length >= strLength) Then
Return strTmp.Substring(strTmp.Length - strLength, strLength) // 5-2,2 จะได้ Substring(3,2) ครับ
Else
Return strTmp
End If
End Function
ค่าที่ได้จะเหลือเฉพาะ 07 ครับ
Return กลับไป
LastID = CInt(StringFromRight(tmpID, 2))
LastID ก็เท่ากับ 07 ครับ
strTmp.Substring ที่ได้เป็น (3,2) สมุติค่าใน strTmp = SP007 3 ก็จะเป็น Index แรกที่จะตัดครับ นับตำแหน่งแรกเป็น 0 ,2 คือจำนวนที่ต้องการตัดครับ สรุปคือตัดทางขวามาสองตัวอ่ะครับ ถ้าเป็นผมๆจะตัดมา 3 ตัวเลยคือ 007 ครับ ผมจะส่งเป็น LastID = CInt(StringFromRight(tmpID, 3))
ตัวอย่างศึกษาครับ
Code (C#)
using System;
class Program
{
static void Main()
{
string input = "OneTwoThree";
// Get first three characters
string sub = input.Substring(0, 3);
Console.WriteLine("Substring: {0}", sub);
}
}
=== Output of the program ===
Substring: One
นับตัวอักษรตัวแรกเป็นตำแหน่งที่ 0 ครับ
|
 |
 |
 |
 |
Date :
2010-01-02 11:24:13 |
By :
KohDev |
|
 |
 |
 |
 |
|
|
 |
 |
|
 |
 |
|
|