Đánh giá chủ đề:
  • 0 Votes - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Có cách nào thêm ký tự vào trường AutoNumber không nhỉ
#1
Tôi hỏi vậy vì tôi có 2 đơn vị ở 2 nơi khác nhau có sử dụng một phần mềm, cuối tháng, cuối ngày phải chuyển dữ liệu về cơ quan cấp trên để tổng hợp. Dữ liệu gồm nhiều bảng trong đó có hai bảng nối với nhau bằng một khóa chính HDID (Khóa chính này tôi đặt trường là Autonumber) nên khi copy 2 dữ liệu từ 2 đơn vị về nhập tổng hợp sẽ bị trùng một số HDID của nhau (Đơn vị 1 cũng có HDID = 1,2,3 ... đơn vị 2 cũng có tương tự) -> Dữ liệu tổng hợp sẽ bị sai
Tôi muốn : với đơn vị 1 HDID sẽ tự nhảy autonuber nhưng sẽ thêm là DV101,DV102,... Đơn vị 2 sẽ nhảy thành DV201,DV202 ... để khi nhập vào bảng tổng nó sẽ phân biệt HDID của từng đơn vị.
Có bác nào có kinh nghiệm trong việc xử lý tương tự cho tôi chút ý kiến, xin chân thành cảm ơn
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#2
Nếu tạo thêm cột phụ ở mỗi bảng ví dụ: HDID2 và dùng update query để có giá trị là: "DV1" & [HDID] rồi dùng cột này để tổng hợp dữ liệu 2 bảng, bạn thấy có chạy đc ko?
Chữ ký của ongke0711 If you BORN poor, it's not your mistake. But if you DIE poor, It's your mistake!
ღღღღღTài sản của ongke0711 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#3
Trường Auto Number không thể thay đổi, xin chắc chắn là vậy.

Mình có ý kiến thế này, nếu có gì sai sót các bạn đóng góp thêm:

* Theo anh levandang trinh bày anh có tổng cộng 3 máy: em xin tạm gọi là Máy 1 ( máy tổng hợp), Máy 2 và 3 là các file dữ liệu gửi lên cho anh.

1. Trên máy 1 anh sẽ có 1 table tổng hợp ( xin gọi là tblTonghop) , nhưng tuyệt đối không sử dụng định dạng AutoNumber kiểu text là được.

2. Tạo Query Append từ 2 table trên máy 2-3, ở đây viết hàm chèn thêm tên như anh mong muốn vào cột kiểu Text để Update và tblTonghop. ( Nếu rành viết VBA thì viết codde luôn).
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#4
Đúng như Maidinhdan nói, ý định của anh là như thế nhưng nếu Update bảng như vậy thì chỉ được 1 bảng chính còn bảng nhánh nó sẽ không hiểu cái HDID mới để nó theo.
Ví dụ : Anh có 2 bảng Hoadon và Chitiethoadon được nối với nhau bằng HDID như sau : 

Bảng Hoadon có các trường HDID,Diengiai,Ghichu
Bảng Chitiethoadon có các trường : ID( khóa chính) , HDID,MSTK,Noco,Sotien
Như vậy lúc Update như em nói thì bảng tổng hợp chỉ được bảng hóa đơn còn bảng chi tiết hóa đơn sẽ không theo được
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn
#5
Bạn có thể sử dụng cách thêm tham số tạo một trường phối hợp với trường Autonumber như cách bạn ongke0711 cững được. Nhưng cũng có một cách để giải quyết triệt để cho sự thống nhất mã cho trường HDID của 2 CSDL của bạn vừa đáp ứng cách sắp xếp theo thứ tự, vừa bảo đảm thuộc tính Required là bạn dùng hàm Now()
Bạn đưa vào event AfterUpdate của một control nào đó trên form nhập liệu (ví dụ text1) khi HDID chưa có giá trị thì sẽ tạo ra giá trị = Format(Now(), "yyyyymmddhhmmss").
Code như sau:

Mã:
Private Sub text1_AfterUpdate()
    If Len(HDID.Value & "A") = 1 Then
        HDID.Value = Format(Now(), "yyyyymmddhhmmss")
    End If
End Sub

 
Phải sử dụng điều kiện Len(HDID .Value & "A") = 1 để mã HDID chỉ tạo một lần
Với code như thế này nó sẽ tạo mã cho HDID ngay thời điểm giá trị text1 khởi tạo xong tính đến giây. Ngay cả bạn khi bạn nhập dữ liệu ở 2 chỗ khác nhau cũng khó lòng bị trùng. Nhưng để chắc chắn không vi phạm thuộc tính Required bạn có thể thêm vào một tham số nữa cho chắc ăn Ví dụ:
Thêm vào: Đơn vị 1: DV1, đơn vị 2: DV2
Nếu bạn muốn sắp xếp thứ tự theo đơn vị.
Code đơn vị 1
 

Mã:
Private Sub text1_AfterUpdate()
    If Len(HDID.Value & "A") = 1 Then
        HDID.Value = "DV1" & Format(Now(), "yyyyymmddhhmmss")
    End If
End Sub

 
Code đơn vị 2
 

Mã:
Private Sub text1_AfterUpdate()
    If Len(HDID.Value & "A") = 1 Then
        HDID.Value = "DV2" & Format(Now(), "yyyyymmddhhmmss")
    End If
End Sub

 
Nếu bạn muốn sắp xếp thứ tự theo thời gian.
Code đơn vị 1
 

Mã:
Private Sub text1_AfterUpdate()
    If Len(HDID.Value & "A") = 1 Then
        HDID.Value = Format(Now(), "yyyyymmddhhmmss") & "DV1"
    End If
End Sub

 
Code đơn vị 2
 

Mã:
Private Sub text1_AfterUpdate()
    If Len(HDID.Value & "A") = 1 Then
        HDID.Value = Format(Now(), "yyyyymmddhhmmss") & "DV2"
    End If
End Sub

 
Với cách này bạn không cần phải kèm thêm Field ID rườm rà thêm.
Chúc bạn thành công
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn maidinhdan , Noname
#6
Thì anh viết code cho anh Lớn thì viết cho anh Nhỏ luôn chứ.

Nhưng theo em thì, xử lý như vậy rất phức tạp anh ah.

Em nghĩ anh nên thiết kế CLDS ở tất cả các máy lại ở trường AutoNuber thành Text, như vậy dễ quản lý nhất

Và cái trường này anh phải viết 1 code riêng để tự động thêm số thứ tự và nhận diện là máy số mấy đã nhập vào CLDL của mình.

Ví dụ:
+ Máy số 1 nhập thì và có cú pháp là: M01_STT
+ Máy số 2 nhập thì và có cú pháp là: M02_STT
.........................

Với STT là số thứ tự hay cái gì đó mà anh muốn.
Còn M01, M02 dùng thủ tục đăng nhập khai báo User để lấy nạp vào.

Khi anh làm được điều này thì dễ dàng hơn những gì ta bàn luận phía trên và kho sai sót cũng như chỉnh sửa sau này.
Chữ ký của maidinhdan * Để được hỗ trợ tốt nhất, nhấn vào link dưới đây để xem.
1. [Hướng dẫn] Kiểu file gửi lên để được giúp đỡ
2. [Hướng dẫn] Nội quy diễn đàn
3. [Hướng dẫn] Cách Đưa file và hình vào diễn đàn
4.[Hướng dẫn] Để xây dựng một ứng dụng hoàn hảo và lời cảm tạ
5. Cần tìm Demo hay ứng dụng sử dụng thanh tìm kiếm phía trên cùng, bên phải của diễn đàn.
* Nếu muốn cảm ơn, hãy nhấn nút thank, không cần viết thêm bài nào nửa.



ღღღღღTài sản của maidinhdan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#7
Hỗ trợ thêm bạn ledangvan trong trường hợp đã có dữ liệu và không thể chuyển HDID sang trường text được
Đầu tiên bạn tạo một trường Idtam (tạm) bằng query
Tạo mã cho trường tạm này:
Nếu trên record có trường dữ liệu ngày [ngay]
Idtam= Val(1 & Format([ngay], "yyyyymmdd") & Right("000000" & HDID.Value , 6)) – lúc này trường HDID còn là trường Auto Number. (số 1 đầu tiên là đơn vị 1, nếu đơn vị 2 là số 2, tùy theo cách sắp xếp bạn có thể để số này ở đầu hay cuối)
 
Nếu trên record không có trường dữ liệu ngày
Idtam= Val(1 & Right("00000000000000" & HDID.Value , 14))
 
Sau đó chuyển HDID từ Auto Number  sang Number rồi update từ trường Idtam sang trường HDID
 
Lúc này trong code tạo mã không thể sử dụng HD1 hay HD2 mà thay vào là số 1 hay số 2
 
"DV1" & Format(Now(), "yyyyymmddhhmmss") --> Val(1 & Format(Now(), "yyyyymmddhhmmss"))
"DV2" & Format(Now(), "yyyyymmddhhmmss") --> Val(2 & Format(Now(), "yyyyymmddhhmmss"))
Format(Now(), "yyyyymmddhhmmss") & "DV1" --> Val(Format(Now(), "yyyyymmddhhmmss") & 1)
Format(Now(), "yyyyymmddhhmmss") & "DV2" --> Val(Format(Now(), "yyyyymmddhhmmss") & 2)
 
Tùy theo vị trí của các số 1, 2 ở đầu hoặc cuối bạn sẽ biết record đó của đơn vị nào.
Cũng có những trường hợp báo lỗi không chịu chạy query update. Mở chế độ Datasheet View copy nguyên cột Idtam dán đè lên cột HDID, thường thì sẽ được. Trường hợp do bị trùng hoặc lý do nào đó nó sẽ tạo table Paste Errors, xem lỗi gì để xử lý
Do do 2 table được relationship thì table cha đổi mã thì table con sẽ thay đổi theo. Khỏi phải xử lý table con nha Đàn  007
Chữ ký của tranthanhan1962 Kết quả cuối cùng của một đời người, không phải bạn có được bao nhiêu tiền bạc, tài sản. Mà bạn còn bao nhiêu người bạn  thumbs up
ღღღღღTài sản của tranthanhan1962 (View All Items) ღღღღღ
Reply
Những người đã cảm ơn Noname
#8
Hì, cảm ơn các bác, em nghĩ phối hợp cách của bác Tranthanhhan1962 và Maidinhdan chắc là OK . Tức là em sẽ tạo thành trường không phải là Ato nữa mà là dạng text sau đó dùng cái hàm Now () của bác Tranthanhhan1962 kèm để khăc phục việc trùng số, em sẽ thử xem nếu OK em sẽ post bài  015
Chữ ký của ledangvan Xin chào, mình là ledangvan, Tham gia http://thuthuataccess.com/forum từ ngày 22-08 -11.
ღღღღღTài sản của ledangvan (View All Items) ღღღღღ
Reply
Những người đã cảm ơn


Có thể liên quan đến chủ đề
Chủ đề: Tác giả Trả lời: Xem: Bài mới nhất
  Lỗi không tạo file mới bằng định dạng .mdb feeling 4 87 29-11-16, 04:22 PM
Bài mới nhất: feeling
  [Hỏi] Cách loại bỏ icon Filter trên Datasheet Form có nguồn là Query. toancvp 2 102 19-10-16, 08:53 PM
Bài mới nhất: toancvp
  cách sửa lỗi cant find project or library trungminh 4 232 01-10-16, 03:37 PM
Bài mới nhất: maidinhdan
  [Help] Nhờ tạo form lưu hóa đơn nhập, hóa đơn xuất, hàng nhập hàng xuất không cần tính tồn laxx_xxal 1 132 22-09-16, 02:35 PM
Bài mới nhất: Nguyen Hoang Diep
  [Lỗi] Không chạy được VBA Code hungthanmx 3 219 04-09-16, 03:48 PM
Bài mới nhất: Nguyen Hoang Diep

Chuyển nhanh:


User(s) browsing this thread: 1 Guest(s)
Diễn Đàn Thơ Văn Thi Ẩm Lâu|Nhà Hàng Sông Thơ