Trang 1 trên tổng số 2 12 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 14 kết quả

Đề tài: Lưu giá trị null vào Access như thế nào?

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    11

    Mặc định Lưu giá trị null vào Access như thế nào?

    trong một form nhập liệu bao gồm: Họ tên, địa chỉ, ngày sinh, cmnd.... chỉ bắt buộc nhập họ tên các phần còn lại có quyền bỏ trống. làm sao để lưu giá trị null vào Access trong trường hợp này ( c#)

  2. #2
    Ngày gia nhập
    12 2009
    Nơi ở
    Hà Nội
    Bài viết
    535

    lúc design CSDL thì bạn đánh dấu vào allow null (mặc định rồi, trừ khóa chính) nên insert textbox rỗng nó tự hiểu là null, ko cần bận tâm, quan trọng chỗ khóa chính thôi

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    11

    nhưng lúc đó viết câu SQL thế nào? mình không rõ chỗ này

  4. #4
    Ngày gia nhập
    12 2009
    Nơi ở
    Hà Nội
    Bài viết
    535

    INSERT INTO TABLENAME
    VALUES('"+txtten.text+"','"+txtdiachi.text+"'..... .)

  5. #5
    Ngày gia nhập
    09 2008
    Bài viết
    11

    uhm thanks bạn nhiều ( nút thanks đâu không thấy).
    mà bạn lưu mọi thứ theo kiểu text hay sao vậy?
    thường mình gán các textbox vào một biến và ngày sinh lưu vào biến kiểu datetime rồi truyền vào hàm lưu đến đây phát sinh vấn đề là kiểu datetime nó không có kiểu null. cho nên không biết lưu làm sao hết.
    đầu tiên là
    datetime ngaysinh= convert.todatetime(txtngaysinh.text);
    sau đó khi add vô thì :
    ngaysinh.toshortstring()
    nếu text box có dữ liệu thì vấn đề giải quyết bình thường. còn trống thì phát sinh lỗi sai kiểu dữ liệu ở phần trên. giải quyết bằng kiểm tra xem nó có trống không, nếu trống thì không lưu gì hết. Nhưng không lưu thì biến ngaysinh lại có giá trị mặc định. Đến đây mình không giải quyết được vấn đề

  6. #6
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Mặc định Lưu giá trị null vào Access như thế nào?

    Như bạn iloveit1208 đã chỉ, lúc lập CSDL bạn chỉ cần đặt trường key và họ tên NOT allow NULL. Các trường còn lại cho allow NULL tuốt.

    Lệnh insert:
    INSERT INTO Bang (HoTen, DiaChi, NgaySinh, CMND, các trường khác)
    VALUES (DuLieuHT, DuLieuDC, DuLieuNS, DuLieuCMND, các dữ liệu khác)

    Thứ tự rất quan trọng, DuLieuHT phải ứng thứ tự với HoTen, DuLieuDC phải ứng thứ tự với DiaChi, vv...

    Trường nào không có dữ liệu thay DuLieu bằng NULL, vd không có ngày sinh:
    INSERT INTO Bang (HoTen, DiaChi, NgaySinh, CMND, các trường khác)
    VALUES (DuLieuHT, DuLieuDC, NULL, DuLieuCMND, các dữ liệu khác)

    Có cách khác để ghi null là loại tên trường ra khỏi danh sách insert. Tuy nhiên cách ghi đầy đủ an toàn và dễ xem, dễ debug về sau hơn.

  7. #7
    Ngày gia nhập
    09 2008
    Bài viết
    11

    Sau một ngày nghiên cứu mình cũng đã làm ra và kết quả y như Bạn VoTichSu đã nói.
    Cách thứ 2 bạn nói hình như là viết nhiều hàm overload đúng không?

  8. #8
    Ngày gia nhập
    04 2010
    Bài viết
    1,534

    Cách thứ hai, không nêu tên trường trong danh sách INSERT, để cho SQL tự động cho trị mặc định (default values) vào

    VD, ghi NULL cho ngày sinh

    1. câu này:
    INSERT INTO Bang (HoTen, DiaChi, NgaySinh, CMND, các trường khác)
    VALUES (DuLieuHT, DuLieuDC, NULL, DuLieuCMND, các dữ liệu khác)

    2. sửa lại thành:
    INSERT INTO Bang (HoTen, DiaChi, CMND, các trường khác)
    VALUES (DuLieuHT, DuLieuDC, DuLieuCMND, các dữ liệu khác)
    -- SQL tự động ghi NULL vào trường NgaySinh

    Trường hợp 2 chỉ dùng được nếu CSDL không mặc định trước (default) trị của trường NgaySinh. Nếu CSDL có mặc định trước thì trị default này sẽ được ghi vào trường. Đó là lý do tại sao tôi nói cách ghi đầy đủ (cách 1) vẫn an toàn hơn.

  9. #9
    Ngày gia nhập
    09 2008
    Bài viết
    11

    Như mình đoán, cách thứ 2 này phải kiểm tra các texbox và phải viết nhiều dòng if. Mình vẫn nghĩ cách 1 tốt hơn nhưng bao gồm cả việc tiện sử dụng.

  10. #10
    Ngày gia nhập
    03 2011
    Bài viết
    40

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    Cách thứ hai, không nêu tên trường trong danh sách INSERT, để cho SQL tự động cho trị mặc định (default values) vào

    VD, ghi NULL cho ngày sinh

    1. câu này:
    INSERT INTO Bang (HoTen, DiaChi, NgaySinh, CMND, các trường khác)
    VALUES (DuLieuHT, DuLieuDC, NULL, DuLieuCMND, các dữ liệu khác)

    2. sửa lại thành:
    INSERT INTO Bang (HoTen, DiaChi, CMND, các trường khác)
    VALUES (DuLieuHT, DuLieuDC, DuLieuCMND, các dữ liệu khác)
    -- SQL tự động ghi NULL vào trường NgaySinh

    Trường hợp 2 chỉ dùng được nếu CSDL không mặc định trước (default) trị của trường NgaySinh. Nếu CSDL có mặc định trước thì trị default này sẽ được ghi vào trường. Đó là lý do tại sao tôi nói cách ghi đầy đủ (cách 1) vẫn an toàn hơn.

    Nếu mà trong 1 Bảng có nhiều trường allow null vậy ta phải dùng if rất nhiều lần: (nếu có 5 trường null phải dùng đến vài chục lần câu IF mới kiểm tra hết điều kiện.) Bạn có thể viết vòng lặp để thay thế dùng IF không? Cám ơn bạn, vì csdl của mình có tới 10 trường có thể null.

Các đề tài tương tự

  1. MS Access với C# Làm thế nào đẻ chèn được các dấu nháy đơn ( ' ) vào access
    Gửi bởi doixanh123 trong diễn đàn Thắc mắc Microsoft SQL Server & Microsoft Access
    Trả lời: 6
    Bài viết cuối: 13-12-2011, 03:53 PM
  2. (p = strtok(NULL, " ")!=NULL có ý nghĩa gì?
    Gửi bởi manhhao19 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 6
    Bài viết cuối: 10-10-2011, 08:03 PM
  3. NULL trong c/c++ có ý nghĩa như thế nào?
    Gửi bởi trungvn222 trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 1
    Bài viết cuối: 09-06-2009, 09:59 AM
  4. Cách kết nối dữ liệu access bằng C# như thế nào?
    Gửi bởi vanan3103 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 3
    Bài viết cuối: 19-05-2009, 11:33 PM

Quyền hạn của bạn

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