1. Tuyển Mod quản lý diễn đàn. Các thành viên xem chi tiết tại đây

Cho em hỏi chút về mấy câu lệnh SQL với

Chủ đề trong 'Hỏi đáp Tin học' bởi chelsea_fan_fan, 20/09/2006.

  1. 1 người đang xem box này (Thành viên: 0, Khách: 1)
  1. chelsea_fan_fan

    chelsea_fan_fan Thành viên mới

    Tham gia ngày:
    20/04/2006
    Bài viết:
    103
    Đã được thích:
    0
    Cho em hỏi chút về mấy câu lệnh SQL với

    Em có 3 bảng như thế này
    Đây là bảng Class gồm ClassID và ClassName
    [​IMG]
    Đây là bảng Student gồm SID=StudentID,DOB,***,và ClassID

    [​IMG]


    Còn đây là Bảng Student_Class

    [​IMG]

    Các bác cho em hỏi là làm thế nào để có thể Insert vào cả 2 bảng Student và Student_Class cùng một lúc :
    Ví dụ Insert vào bảng Student Name Vũ văn C ,DOB:11/11/1987,***:1 .ClassID :1 thì nó sẽ
    cùng Insert vào bảng Student_Class ID của Vũ văn C là 3 và ClassID là 1 như trên hình vẽ
    Cám ơn các bác rất nhiều .
  2. tottochan81

    tottochan81 Thành viên rất tích cực

    Tham gia ngày:
    05/04/2006
    Bài viết:
    4.099
    Đã được thích:
    15
    Bạn thiết kế CSDL chưa chuẩn rồi, có thể nhìn lại 2 bảng Student và bảng Class-student thì phải bỏ trường ClassID trong bảng student đi.
    Sau đó, khi nhập thì phải dùng 2 câu SQL để nhập vào 2 bảng khác nhau, (chứ không phải là nhập ở một nơi thì nó đồng thời nhập ở một nơi khác. Như vậy là dữ liệu thừa, vì dữ liệu nhập vào thì chỉ cần để ở một nơi. Bạn thấy không, vì bạn thiết kế dữ liệu chưa chuẩn, bị thừa nên bạn mới đi đến một cái thắc mắc như vậy).
    Đối với CSDL chuẩn, khi bạn nhập một học sinh mới thì sẽ nhập qua một form giao diện gồm các ô text để nhập dữ liệu
    Khi đó giả sử trên form có các ô sau để nhập:
    Họ tên, ngày sinh, giới tính, lớp
    Riêng trường lớp, cho người nhập chọn trên một danh sách sổ xuống, danh sách này được gọi từ CSDL (SELECT DISTINCT ClassName FROM CLASS).
    Sau khi người dùng đã nhập đủ 4 thông tin trên, mình thêm một bản ghi vào bảng Student như sau:
    - Mở bảng Student (Rs_student là recordset của bảng này)
    Rs_student.AddNew (Chỉ add 3 giá trị thuộc 3 ô Họ tên, ngày sinh, giới tính)
    - Mở bảng Student_class, add thêm một record gồm 2 trường là IDStudent = với ID của giá trị mới vừa thêm phía trên, ID lớp là giá trị của ID tương ứng với tên lớp mà người nhập đã chọn trong danh sách lớp ở form nhập liệu.
    Chúc bạn thành công.
    Được tottochan81 sửa chữa / chuyển vào 18:26 ngày 20/09/2006
  3. chelsea_fan_fan

    chelsea_fan_fan Thành viên mới

    Tham gia ngày:
    20/04/2006
    Bài viết:
    103
    Đã được thích:
    0
    Cám ơn bạn đã trả lời
    Vàng 1:Mình để classID trong Bảng Student làm FK dùng để reference
    Vàng 2:đây là cái thắc mắc chính của mình .Viết SQL như thế nào để nó lấy cái ID đc từ 2 bảng student và class để insert vào cái bảng Student_Class
    Vàng 3:đúng rùi đây là form của mình [​IMG]
  4. wings

    wings Thành viên rất tích cực

    Tham gia ngày:
    04/07/2002
    Bài viết:
    3.552
    Đã được thích:
    4
    Hi,
    Bàn 'ang hòc ASP dù?ng MsSQL là?m cơ sơ? dưf liẶu (chf́c bàn là? sinh viĂn Aptech?)
    Mì?nh khĂng hiĂ?u ỳ 'Ă? bàn sư? dùng bà?ng Student_Class 'Ă? là?m gì? nưfa?. Nhưng 'ùng như thẮ thì? bàn 'àf vi phàm quy tf́c cù?a chuĂ?n 2: Dưf liẶu thư?a. Vì? trong khi cài Form cù?a bàn, bàn cò thĂ? insert thf?ng và?o trong bà?ng Student luĂn. KhĂng phà?i thĂng qua bà?ng Student_Class 'Ă? lẮy ID cù?a Class là?m gì?.
    Mì?nh nghìf mùc 'ìch bàn là?m ra bà?ng nà?y là? vì? bàn khĂng già?i quyẮt 'ược cài ComboBox "Class" vì? nò chứa tĂn cù?a Class khĂng phà?i ID nĂn khĂng thĂ? Insert và?o Table Student nĂn bàn mới là?m bà?ng phù là? Student_Class chfng?. Cò thĂ? mùc 'ìch cù?a bàn khàc thì? bàn cứ nòi nhè 'Ă? mì?nh giùp chình xàc nhẮt.
    Nhưng mì?nh cùfng 'ưa ra 2 càch cho bàn:
    _ Bàn dù?ng dơn thuĂ?n JavaScript 'Ă? già?i quyẮt viẶc nà?y. Bàn cho 1 TextField khàc nhưng là? TextField "Ă?n". MĂfi lĂ?n ComboBox "Class" 'ược chòn thì? trang sèf refresh lài và? trong lĂ?n refresh lài nà?y thì? bàn lẮy tĂn cù?a ComboBox "Class" 'ược chòn Ắy 'Ă? lẮy ID.
    RĂ?i tư? ID bàn sèf Insert và?o trong Database. Cò?n vĂ? ID của Student thì? bàn dù?ng SQL "Select max(SID)+1 from Student" bàn cùfng cho và?o 1 TextField Ă?n khàc. VẶy là? bàn cò 2ID rĂ?i nhè, insert dĂf dà?ng và?o trong bà?ng Student_Class rĂ?i.
    _ Dù?ng cĂu lẶnh SQL (dà?i, tiẮn trì?nh trang web sèf chậm và? khĂng hiẶu quà?, và? khĂng thực tiĂfn,dĂf bì hack bf?ng SQL Injection):
    INSERT INTO Student_Class VALUES(''+SELECT SID FROM Stusent WHERE FirstName=''+txtName.values()+''+'',''.....''); (tương tự với bà?ng kia);
    ThĂn
    WINGS
    *Bàn cò thĂ? liĂn làc trực tiẮp với mì?nh và? cho mì?nh cài Data cù thĂ? mì?nh sèf giùp kỳf hơn nhè.
  5. chelsea_fan_fan

    chelsea_fan_fan Thành viên mới

    Tham gia ngày:
    20/04/2006
    Bài viết:
    103
    Đã được thích:
    0
    VĂng 1 :HĂ hĂ ko ạ .Em m>i tập tẹo tự lĂm chơi thui ạ .MĂ cĂi trĂn lĂ SQL server chứ ko phải mySQL ạ
    VĂng 2:sorry 'Ăy m>i lĂ form ạ
    [​IMG]
    Em lĂm cĂi bảng Student_Class lĂ vĂ cĂ thf cĂ 1 SV học nhiều l>p (sau nĂy cĂ thf thay Class =Language -1 SV cĂ nhiều ngoại ngữ)
    VĂng 3:em ko bĂt lĂm cĂi 'Ă
    VĂng 4:em cĂ viết cĂu l?nh thế nĂy
    insert into student_class values ((select max(SID)from Student)),3)
    ----------------------------------------
    Nhưng nĂ bĂo l-i:"Subqueries are not allowed in this context. Only scalar expressions are allowed." em ko hifu cĂu scalar expression lĂ ntn
    VĂng 5: BĂc cĂ thf gửi cho em vĂo 'Ăy thĂ t't quĂ : chelseafanfan@gmail.com
    CĂm ơn bĂc .

Chia sẻ trang này