Đăng ký học Excel chuyên đề công thức dò tìm và tham chiếu (tối 29 và 31/8) - TPHCM

Đăng ký học VBA và ADO - 3 chủ nhật 10, 17 và 24/9 - TPHCM

Đố vui về ADO, DAO.

Thảo luận trong 'Cơ sở dữ liệu' bắt đầu bởi Hai Lúa Miền Tây, 7 Tháng năm 2013.

  1. Hai Lúa Miền Tây

    Hai Lúa Miền Tây Thành viên gạo cội Staff Member Super Moderator

    Phi thử test là thay màu đỏ thành Excel 8.0 coi nó chạy đc không nhé
     
  2. phihndhsp

    phihndhsp Thành viên gắn bó

    Dạ không anh ơi, sửa thành 8.0 thì nó báo lỗi không đúng format
    Cái này là 12.0 là đúng rồi, nhưng em không biết là tại sao nó lỗi
    Picture1.jpg
     
    Lần chỉnh sửa cuối: 14 Tháng tư 2017
  3. AutoReply

    AutoReply Thành viên hoạt động

    Tạo mã tự tăng có tiền tố ?

    Mời các anh chị tham gia 1 câu hỏi nhỏ sau đây:
    Tôi có 1 bảng cần Insert dữ liệu vào cột [Ma]
    Nguyên tắc Insert :
    tham số truyền vào lấy từ cột [Nhom]
    hàm sẽ có dạng
    Mã:
    public sub Insert (nhom as string)
    ............................................
    end sub
    
    [​IMG]

    lấy ví dụ khi ta gọi
    Mã:
    Insert "A"
    kết quả sẽ chèn vào cột [Ma] giá trị là "A004"

    khi ta gọi
    Mã:
    Insert "B"
    Kết quả sẽ chèn vào cột [Ma] giá trị là "B003"

    khi ta gọi
    Mã:
    Insert "C"
    Kết quả sẽ chèn vào cột [Ma] giá trị là "C001"
    Chỉ sử dụng chuỗi truy vấn , không liên quan gì đến các hàm VBA đâu nha.
    xin mời các anh chị. --=0--=0
     

    Các file đính kèm:

  4. VetMini

    VetMini Thành viên gạo cội

    Dùng LIKE để lọc (WHERE) các dòng bắt đầu bằng 'A' hoặc 'B', ... (mã muón tìm)
    Dùng MAX để lấy trị lớn nhất
    Dùng RIGHT JOIN với 0 để phòng trường hợp chưa có mã (chả có dòng nào)
    Dùng phép tách chuỗi để lấy phần số (dùng IIF để mặc định là 0 nếu NULL)
    Cộng 1

    Bài này cũng giống như hỏi cách đi từ SG đến Nam vang bằng đường bay qua biển. Gần thì bay chuyến Phú quốc, xa thì đến Băng Cốc
     
  5. AutoReply

    AutoReply Thành viên hoạt động

    anh ơi địa danh Nam vang nằm ở đâu vậy ? chắc không nằm trong nước Việt Nam rồi +-+-+-++-+-+-+
    và ý nghĩ của câu này là gì ? em ngu muội không hiểu ra được .
     
  6. VetMini

    VetMini Thành viên gạo cội

    Nếu không nghe từ cam Nam vang bao giờ thì chắc là dân ở khoảng Bình định trở lên.
    Đối với người SG, Nam vang nó xa theo không gian thì ít mà xa về thời gian thì nhiều. Cũng như Vọng các vậy.
     
  7. AutoReply

    AutoReply Thành viên hoạt động

    trước hết thì làm xong bài trên cái đã
    Mã:
    "insert into [Sheet1$B3:B] (f1) " & _
    " select '" & nhom & "' & right('000' & (0 & right(max(f1),3)) + 1, 3) " & _
    " from [Sheet1$B3:B] where f1 like '" & nhom & "%'"
    
    em ở sát Sì Gòn, nhưng mà tuổi còn trẻ quá, không biết mấy địa danh đó. Nếu vui lòng anh có thể kể đôi điều thú vị về những chuyện anh nói ở trên không ?
    Nói theo kiểu ông bà hay nói là : anh ăn muối chắc nhiều hơn em ăn cơm. Bởi vậy người trẻ thích nghe chuyện của các bậc tiền bối . --=0--=0
     
  8. VetMini

    VetMini Thành viên gạo cội

    'A' và 'B' thì được nhưng kể từ 'C' code sẽ bị vấn đề vì query chả truy ra được dòng nào.

    Có 2 cách làm:
    1. Join nó với một cái gì đó để luôn luôn có ít nhất 1 dòng
    2. Dùng hàm NZ hoặc iif(IsNull(Max( ...) để đặt mã khởi đầu
     
  9. VetMini

    VetMini Thành viên gạo cội

    Đính chính cho bài #286 và #288:

    Cách Join với một cái gì đó không dùng được ở đây (hàm MAX). Tôi nhầm với hàm COUNT.
     
  10. AutoReply

    AutoReply Thành viên hoạt động

    sẽ bị vấn đề thật ư ? em trẻ tuổi chứ không nông cạn anh ạ --=0--=0
    Nếu nhìn kỹ sẽ thấy 2 lệnh sau đây khác xa nhau về mặt ý nghĩa
    Mã:
    '000' & right(max(f1),3) + 1
    

    Mã:
    '000' & [COLOR=#ff0000][SIZE=3][B](0 &[/B][/SIZE][/COLOR] right(max(f1),3)[B][SIZE=3][COLOR=#ff0000])[/COLOR][/SIZE][/B] + 1
    
    lệnh thứ nhất sẽ trả về chuỗi '000' khi hàm Max trả về NULL
    Tuy dùng cỗ máy Access để xử lý dữ liệu nhưng ADO trên Excel có những luật riêng, điển hình là ở đây
    lệnh '&' nối chuỗi được phép diễn ra giữa kí tự 0 và trị NULL
    dẫn đến việc hàm max trả về NULL thì kết quả của đoạn code thứ 2 sẽ trả về '0001'
    và có vẻ như Excel không có hàm NZ
    Em ra bài này vì tình cờ có người nhờ tạo mã theo luật tương tự, nhưng sử dụng trên SQL Server.
    Tất nhiên đối với SQL Server không thể nối chuỗi khi 1 trong 2 hạng tử là NULL, mà phải sử dụng thêm hàm ISNULL
     
  11. VetMini

    VetMini Thành viên gạo cội

    ờ đúng rồi, tôi lại quên nữa, Access không trọng về kiểu lắm cho nên khi cần sẽ tự động ép kiểu null thành "".

    NZ được thêm vào trong Access 2007. Microsoft làm thế sau khi họ thêm hàm Coalesce vào T-SQL 2005 để làm gọn trường hợp IfNull, bà con la lên đòi hàm tương tự cho Access.
    (hình như những tay chuyên nghiệp T-SQL nói là Coalesce chạy chậm. Thực tế thì hàm này chỉ mục đích giúp cho câu gọn hơn, vì SQL tiêu chuẩn không có hàm IIF, phải dùng CASE)
     
  12. NGOCTOAN

    NGOCTOAN Thành viên chính thức

    Bạn Phi thay chỗ .36 màu đỏ =.120 xem có được không nhé.
     
  13. kieu manh

    kieu manh Chưa Cạo Phải Gội

    1/Sao mình đọc từ bài 1 tới bài cuối mà ko thấy ai xài DAO lấy dữ liệu File đóng nhỉ ...thấy mấy bài DAO toàn lấy Tên Sheet ....còn lại là toàn ADO

    2/ Phải chăng sử DAO lấy dữ liệu File đóng tốc độ chậm hơn ADO hay gì gì đó mà thấy ít bạn xài ???

    3/ Tại sao thấy trên mạng thấy họ hay sử dụng DAO để lấy và ghi dữ liệu từ Excel vào Access nhỉ ...phải chăng sử dụng DAO trong trường hợp này viết code nó đơn giản hơn , dễ hơn mà ko phức tạp và khai báo lằng nhằng như ADO ???

    4/ Thấy trên Internet hắn nói sử dụng ADO khi lấy và ghi dữ liệu qua mạng [ LAN & Internet] cho tốc độ nhanh hơn DAO ...ko biết hắn nói vậy có đúng ko ???

    Vài điều thắc mắc chưa hiểu lắm ....Mong các Bạn Hiểu sâu hơn chuyên hơn chỉ dùm ...xin cảm ơn
     
  14. VetMini

    VetMini Thành viên gạo cội

    1/Sao mình đọc từ bài 1 tới bài cuối mà ko thấy ai xài DAO lấy dữ liệu File đóng nhỉ ...thấy mấy bài DAO toàn lấy Tên Sheet ....còn lại là toàn ADO

    Vì DAO cũ rồi. Xài ADO hợp thời trang hơn.
    Đây là nói thời trang. Việc cái nào tốt hơn là việc khác.
    Có một vài công việc mad DAO làm được mà ADO (+ADOX) không làm được, và ngược lại. Tuy nhiên, những công việc ấy không quan trọng lắm đối với nhu cầu của các bạn ở đây, cho nên có thể tạm coi như cả hai đều như nhau.

    2/ Phải chăng sử DAO lấy dữ liệu File đóng tốc độ chậm hơn ADO hay gì gì đó mà thấy ít bạn xài ???

    Khong hẳn đúng lắm. Cỗ máy ACE hay JET đều làm việc với ADO và DAO như nhau. Chỉ khi cần nối với các CSDL khác như SQL Server, mySQL mới cho thấy ADO làm việc dễ hơn.
    (đây là tạm hiểu cái "file đóng" mà bạn muốn nói là xls, txt, csv. Chứ mdb thì là chuyện khác)

    3/ Tại sao thấy trên mạng thấy họ hay sử dụng DAO để lấy và ghi dữ liệu từ Excel vào Access nhỉ ...phải chăng sử dụng DAO trong trường hợp này viết code nó đơn giản hơn , dễ hơn mà ko phức tạp và khai báo lằng nhằng như ADO ???

    DAO là căn bản của Access. Code có từ đời thủa rồi.
    Chuyện khai báo lằng nhằng là vấn đề chủ quan. Vì các bạn quen xài tới đâu code tới đó cho nên mới xảy ra chuyện lằng nhằng. Nhừng ngừoi dùng nhiều có các hàm thư viện, lúc cần thì import cả module, chả lằng nhằng chút nào.
    Ngược lại, nếu gọi Stored Procedure thì cách nạp tham số của ADO dễ hơn.

    4/ Thấy trên Internet hắn nói sử dụng ADO khi lấy và ghi dữ liệu qua mạng [ LAN & Internet] cho tốc độ nhanh hơn DAO ...ko biết hắn nói vậy có đúng ko ???

    Có thể. Vì DAO chủ yếu cho máy chính. Lấy dữ liệu qua mạng là kỹ thuật Client-Server, sở trường của ADO. Tuy nhiên, dữ liệu chuyển qua mạng còn nhiều yếu tố khác, khó khẳng định 100% nếu khong rõ cấu trúc từng trường hợp.
     
  15. phuongtrannhat1409

    phuongtrannhat1409 Thành viên mới

    Bạn @quanluu1989 giúp tiếp giùm mình hoàn thiện file giá thành ở #228 với, code trước bạn giúp mình tổng hợp xuất NVL từ file giá thành nhưng có một vấn đề là có những NVL định mức = 0 (một số thành phẩm trong bảng định mức không sử dụng loại NVL này nên số lượng SX = 0) nhưng vẫn được liệt kê trong bảng tổng hợp, có cách nào bỏ những dòng này bằng ADO luôn không, cám ơn bạn nhiều
     
  16. dephetnoi

    dephetnoi Thành viên mới

    Nếu insert trên B.xls từ file A.xls đóng thì cú pháp của cấu insert thế naofaf bác?
     
  17. AutoReply

    AutoReply Thành viên hoạt động

    Chào các bạn trẽ.
    Cuối tuần mời các bạn giải trí với bài tập đơn giản như sau:
    Tôi có bảng dữ liệu Nhật ký điểm danh các học sinh của 1 lớp. Nhờ các bạn giúp thống kê tính toán xem các học sinh đã nghỉ những ngày nào bằng code ADO, hoặc bất cứ công cụ nào có thể cho ra được kết quả.
    Cảm ơn các bạn --=0--=0

    [​IMG]
     

    Các file đính kèm:

  18. Hai Lúa Miền Tây

    Hai Lúa Miền Tây Thành viên gạo cội Staff Member Super Moderator

    Thử như sau, bạn test hộ nhé:

     
    quanluu1989AutoReply thích bài viết này.
  19. quanluu1989

    quanluu1989 Thành viên gắn bó

    Không biết có truờng hợp 4 bạn cùng nghỉ không anh nhỉ?
     
    xì tin thích bài này.
  20. xì tin

    xì tin Thành viên chính thức

    Ngày đó có thể xem là ngày nghỉ lễ, hoặc dẫn nhau ra quán nhậu hết :D
     

Chia sẻ trang này