Hiển thị kết quả từ 1 đến 7 / 7
  1. #1
    Tham gia
    13-09-2008
    Bài viết
    27
    Like
    0
    Thanked 0 Times in 0 Posts

    phát sinh mã số tự động

    các anh cho hỏi 1 vấn đề:
    - tôi có 1 bảng csdl khachhang gồm: makh, tenkhachhang, diachi
    - cột makh là số từ 1,2,3....
    - khi nhập vào khách hàng chỉ nhập tenkhachahng và diachi, khi lưu vào csdl thì makh sẽ lấy max makh công thêm 1.
    - lần sao khi mở form khachhang lên để nhập khách hàng mới thì textbox makh sẽ tự động load lên makh để mình khỏi nhập vô.
    anh nao biết chỉ giùm. tôi làm trên c#2005, csdl là sql2000
    Quote Quote

  2. #2
    Tham gia
    23-02-2009
    Bài viết
    66
    Like
    0
    Thanked 0 Times in 0 Posts
    nguy hiểm. nếu app của bạn là thuộc dạng multi-user application bạn có nghĩ đến trường hợp xấu nhất ko

    người A mở form -> max = 6 (ví dụ vậy)

    ngươi B mở form -> max = 6 (như thằng A)

    khi lưu thi sao nhỉ, nếu bạn đem cái mã khách đó mà insert vào db thì sẽ bị báo primary key duplicate

    trường hợp bạn dùng identity cho cột mãkh thì khi insert vô bạn ko cần chỉ định id. Nhưng khi form load thì bên A và B ID đều = 7, khi lưu xong thì 1 thằng 7 , 1 thàng id=8. Sẽ làm khách hàng thắc mắc đấy

    Tốt nhât là khi form load khoan display id, Sau khi nó insert hãy select @@identity để trả lại mãkh vừa nhập vào

  3. #3
    Tham gia
    30-10-2007
    Location
    Hà Nội
    Bài viết
    382
    Like
    0
    Thanked 14 Times in 14 Posts

    Thông tin ...

    Nếu mà mã khách hàng của bạn là kiểu nguyên thì tốt nhất bạn lên để Identity cho nó cũng được, và đã Identity rồi thì mình không cần load nó vô Textbox nữa, xong theo mình, mã khách hàng không nên để kiểu nguyên, mà bạn có thể để trường Identity đó như là một trường khóa chính, còn mã khách hàng thì kiểu nvarchar chẳng hạn, khi mà nhập vào thì nó sẽ kiểm tra xem đã tồn tại cái mã kh đó hay chưa, nếu okie thì sẽ insert vô Database, nếu sai thì chịu khó sửa đi....

  4. #4
    Tham gia
    24-07-2007
    Bài viết
    66
    Like
    3
    Thanked 0 Times in 0 Posts
    Makh thì có thể cho tự nhập và nên dùng trường chữ.ví dụ như CongTy001,CongTy002.
    Muốn làm như thế thì bạn :chạy vào database kiểm tra cái đuôi left(makh,3) để tìm ra số lớn nhất.rồi + cho nó 1 đơn vị.tiếp theo là nối chuỗi đó vào thành CongTy003.
    Public Function TaoPhieu(ByVal TenPhieu As String, ByVal TenTruong As String, ByVal TenBang As String) As String
    Dim db = New Connect
    Dim text As String = ""
    Dim sql As String = ((("select isnull( Max(convert(int,Right(" & TenTruong & ",len(") + TenTruong & ")-3))),0) as SoLonNhat From ") + TenBang & " Where Upper(left(") + TenTruong & ",3))='" + TenPhieu & "'"

    Dim ojb As SqlDataReader = Nothing

    db.MyCheck(ojb, sql)
    If ojb.Read() Then
    'chuyen SoLonNhat tu ojb sang int, roi +1
    Dim sotang As Integer = Convert.ToInt32(ojb("SoLonNhat"))
    sotang = sotang + 1
    text = Convert.ToString(sotang)
    Dim dai As Integer = text.Length
    Dim so As Integer = 3 - dai
    For i As Integer = 1 To so
    text = "0" & text
    Next
    text = TenPhieu + text
    ojb.Close()
    End If
    Return text
    End Function
    Website: ngoquocdat,com

  5. #5
    Tham gia
    13-09-2008
    Bài viết
    27
    Like
    0
    Thanked 0 Times in 0 Posts
    cám ơn các bạn đã đóng góp, tôi học học được rất nhiều, anh em nào có ý kiến xin đóng góp để mọi người cùng học hỏi

  6. #6
    Tham gia
    09-02-2009
    Bài viết
    216
    Like
    3
    Thanked 8 Times in 7 Posts
    mấy bác nhiệt tình quá

  7. #7
    Tham gia
    20-02-2009
    Location
    Ninh Bình
    Bài viết
    567
    Like
    0
    Thanked 34 Times in 31 Posts

    Ý tưởng mới !

    Bạn có thể dùng AUTO_INCREAMENT cho cái cột makh của bạn như sau:

    CREATE TABLE
    (
    makh INT NOT NULL AUTO_INCREASEMENT,
    ...
    )

    thì cột makh sẽ tự động tăng lên một mỗi khi bạn tạo một record mới.

    Nhưng đây cũng là một con dao hai lưỡi, nếu bạn dùng makh làm khóa để kết hợp (link) với một bảng khác.

    Tại sao là một con dao hai lưỡi? Hãy suy nghĩ đến khi bạn phải sửa chữa một bảng có AUTO_INCREASEMENT. Thành thử ra, hãy vô cùng cẩn thận trong việc dùng AUTO_INCREASEMENT.


    Quote Được gửi bởi minhhlang View Post
    các anh cho hỏi 1 vấn đề:
    - tôi có 1 bảng csdl khachhang gồm: makh, tenkhachhang, diachi
    - cột makh là số từ 1,2,3....
    - khi nhập vào khách hàng chỉ nhập tenkhachahng và diachi, khi lưu vào csdl thì makh sẽ lấy max makh công thêm 1.
    - lần sao khi mở form khachhang lên để nhập khách hàng mới thì textbox makh sẽ tự động load lên makh để mình khỏi nhập vô.
    anh nao biết chỉ giùm. tôi làm trên c#2005, csdl là sql2000

Bookmarks

Quy định

  • Bạn không thể tạo chủ đề mới
  • Bạn không thể trả lời bài viết
  • Bạn không thể gửi file đính kèm
  • Bạn không thể sửa bài viết của mình
  •