Ai giỏi CSDL thì giúp em với !

Thảo luận trong 'Lập trình & Đồ hoạ' bắt đầu bởi doquyen1989, 31/5/08.

  1. doquyen1989

    doquyen1989 Legend of Zelda

    Tham gia ngày:
    25/3/06
    Bài viết:
    1,163
    Nơi ở:
    Thủ Đức
    Là thế này..em sắp Thi mà không biết làm dạng bài này, làm thì chạy được nhưng khi Insert dữ liệu vào thì nó báo lỗi... em xin gửi bài làm này cho các anh chị xem, ai biết sửa sao chỉ giúp em với, em cám ơn nhiều lắm...

    Cái chỗ NhânViên đó, nó là khóa chính, rồi ở trong nó, có 1 cái khóa ngoại và cũng là chính nó, em làm chạy được nhưng khi insert dữ liệu vào thì nó báo lỗi:
    INSERT statement conflicted with COLUMN FOREIGN KEY SAME TABLE constraint 'FK__nhanvien__Ma_NQL__77BFCB91'. The conflict occurred in database 'tongquat', table 'nhanvien', column 'MaNV'.
    The statement has been terminated.


    ...>< ko biết sửa sao...

    create database tongquat
    ON
    ( NAME = 'doquyen_dat',
    FILENAME = 'd:\baitap_dat.mdf',
    SIZE = 1,
    MAXSIZE = 2,
    FILEGROWTH = 10% )
    LOG ON
    ( NAME = 'doquyen_log',
    FILENAME = 'd:\baitap_log.ldf',
    SIZE = 1MB,
    MAXSIZE = 2MB,
    FILEGROWTH = 20% )
    GO

    use tongquat

    create table nhanvien
    (MaNV char(4) primary key,
    HoNV nvarchar(20),
    TenNV nvarchar(20),
    Phai char(5),
    NgaySinh datetime,
    ChucVu char(5),
    Ma_NQL char(4) foreign key references nhanvien(MaNV)
    )



    Insert NhanVien values('NV01','Nguyễn Tấn','Phát', 'Nam', '02/12/1980','NV','NV02')

    Insert NhanVien values('NV02','Trương Thị Hoàng','Phương', 'Nữ', '03/05/1988','KT','NV05')

    Insert NhanVien values('NV03','Lê Hoài','Phú', 'Nam', '04/05/1983','NV','NV05')

    Insert NhanVien values('NV04','Nguyễn Thanh','Phùng', 'Nam', '07/02/1968','TQ','NV05')

    Insert NhanVien values('NV05','Hồ Thị Thanh','Nga', 'Nữ', '11/02/1960','KT','NV02')





    create table khachhang
    (MaKH nvarchar(10)primary key,
    TenCTy nvarchar(100),
    DiaChi nvarchar(50),
    DienThoai nvarchar(20))

    alter table khachhang alter column tenCty nvarchar(50)

    --drop table khachhang
    Insert khachHang values('FAHASA','Phát Hành Sách Sài Gòn','12 Thuận Kiều F6 Q11','08.7675655')
    Insert KhachHang values('FISC','Dịch Vụ Đầu Tư Nước Ngoài','31 Trương Định P6 Q1','09.6544343')
    Insert KhachHang values('HUNSAN','Hùng Sán','275 Lý Thường Kiệt P15 Q11','07.5454543')
    Insert KhachHang values('SAFICO','Thuỷ Sản Xuất Khẩu','47 Bải Sậy P1 Q3','08.5635467')





    create table hoadon
    (MaHD int primary key,
    LoaiHD nvarchar(10),
    MaKH nvarchar(10)foreign key references khachhang(makh),
    MaNV char(4)foreign key references nhanvien(manv),
    NgayLapHD datetime)
    insert HoaDon values('10145','Xuất','HUNSAN', 'NV02','09/01/06')

    insert HoaDon values('10148','Nhập','FISC', 'NV01','10/01/06')

    insert HoaDon values('10150','Xuất','FAHASA', 'NV04','01/17/06')

    insert HoaDon values('10156','Trả','FISC', 'NV01','01/28/06')

    insert HoaDon values('10157','Trả','FISC', 'NV04','03/27/06')

    insert HoaDon values('10158','Nhập','FAHASA', 'NV02','3/04/06')

    insert HoaDon values('10166','Nhập','HUNSAN', 'NV03','04/13/06')




    create table ChiTietHoaDon
    (MaHD int foreign key references HoaDon(MaHD),
    MaSP int foreign key references SanPham(MaSP),
    SoLuong tinyint,
    primary key(MaHD,MaSP))
    insert ChiTietHoaDon values('10145',1,8)

    insert ChiTietHoaDon values('10145',2,20)

    insert ChiTietHoaDon values('10148',1,35)

    insert ChiTietHoaDon values('10148',2,12)

    insert ChiTietHoaDon values('10148',3,24)

    insert ChiTietHoaDon values('10150',1,9)

    insert ChiTietHoaDon values('10156',1,25)

    insert ChiTietHoaDon values('10156',2,25)

    insert ChiTietHoaDon values('10157',3,35)

    insert ChiTietHoaDon values('10158',1,12)

    insert ChiTietHoaDon values('10158',3,20)




    create table sanpham
    (MaSP int primary key ,
    TenSP nvarchar(20),
    DVT nvarchar(20),
    DonGia int)
    --sua 1 cot trong 1 ban nao do
    alter table sanpham alter column dongia int

    --drop table sanpham
    Insert sanPham values(1,'Rượu','Chai',230)
    Insert SanPham values(2,'Gia Vị','Thùng',20)
    Insert SanPham values(3,'Bánh Kem','Cái',50)
    Insert SanPham values(4,'Đường','Kg',10)
    select *from nhanvien
    select *from sanpham
    select *from chitiethoadon
    select *from hoadon
    select *from khachhang

    /*1. Thêm vào bảng khách hàng một khách hàng mới với các thông tin sau:

    Mã khách hàng: CO.OP

    Tên khách hàng: Sài gòn Co.opMart

    Địa chỉ: 573 Nguyễn Kiệm, Q.Phú Nhuận*/

    insert khachhang values('CO.OP','Sài gòn Co.opMart','573 Nguyễn Kiệm, Q.Phú Nhuận',NULL)

    select *from khachhang

    /*2. Thêm vào bảng nhân viên một nhân viên mới với các thông tin sau:

    Mã nhân viên: NV06

    Họ nhân viên: Lê Hoà

    Tên nhân viên: Lai

    Phái: Lai

    Ngày sinh: 15/10/85

    Chức vụ: GĐ */
    insert nhanvien values('NV06','Lê Hoà','Lai','nam','10/15/85','GD',null)
    select *from nhanvien
    /*3. Cập nhật Ma_NQL là ‘NV06’ cho nhân viên có mã nhân viên ‘NV02’.*/
    update nhanvien
    set ma_nql='NV06'
    where manv='NV02'

    select *from nhanvien
    --4. Liệt kê các khách hàng chưa có số điện thoại.
    select *from khachhang
    where dienthoai is null
    select *from khachhang
    --5. Cho biết chi tiết những hóa đơn lập trong tháng 1 gồm:
    --mã hóa đơn, mã khách, tên hàng, mã nhân viên, ngày lập hoá đơn
    select h.mahd,makh,tensp,manv,ngaylaphd
    from chitiethoadon c,sanpham s,hoadon h
    where h.mahd=c.mahd and s.masp=c.masp and month(ngaylaphd) ='1'

    --14Viết thủ tục Sp_InsertSanPham có tham số dạng input dùng để chèn một mẫu tin vào bảng Sanpham.

    create proc Sp_InsertSanPham @ma int,@ten nvarchar(30), @DVT nvarchar(20),@dg money
    as
    insert dbo.sanpham values(@ma,@ten,@dvt,@dg)

    exec Sp_InsertSanPham 5,'Gao','KG',17000

    exec Sp_InsertSanPham 6,'Duong','KG',10000


    --Viết thủ tục Sp_InsertNV_KH có tham số dùng để chèn một mẫu tin vào bảng NhanVien hoặc KhachHang.
    --Trong dùng 1 tham số @flag kiểu bit để phân biệt 2 bảng trên khi chèn.
    alter proc Sp_InsertNV_KH @ma char(4),@honv nvarchar(20),@ten nvarchar(20),
    @phai char(5),@ngaysinh datetime,@chucvu char(5),@ma_nql char (4),@dc nvarchar(40),@dt char(10),@flag bit
    as

    if (@flag=0)
    insert dbo.nhanvien values (@ma,@honv,@ten,@phai,@ngaysinh,@chucvu,@ma_nql)
    else
    insert khachhang values(@ma,@ten,@dc,@dt)

    exec Sp_InsertNV_KH 'LAI',null,'CTy TNHH Lai',null,null,null,null,'Q1','08255555',1

    exec Sp_InsertNV_KH 'NV09','Nguyen Thi','Lai',null,null,null,null,'Q1','08255555',0


    Cái hình của bài em làm ở file đính kèm... mong các anh chị giúp em
     
  2. GrandMaster[TM]

    GrandMaster[TM] Donkey Kong

    Tham gia ngày:
    22/8/07
    Bài viết:
    494
    Nơi ở:
    VN JP CN US
    Thử Insert với with nocheck xem sao nhỉ :-s.
     
  3. [L]at

    [L]at The Warrior of Light

    Tham gia ngày:
    8/1/06
    Bài viết:
    2,147
    Nơi ở:
    ハノイ
    Ai lại để khóa ngoại lấy dữ liệu khóa chính chung 1 bảng thế .
    Trường Ma_NQL dùng làm gì ?
     
  4. doquyen1989

    doquyen1989 Legend of Zelda

    Tham gia ngày:
    25/3/06
    Bài viết:
    1,163
    Nơi ở:
    Thủ Đức
    Dạ ... đó là mã người quản Lý... vì trong cái đề... bắt làm như thế... em hem có bít làm... kì wá, bị lỗi hoài, chắc cô ra sai đề hay sao ta
     
  5. solntII

    solntII T.E.T.Я.I.S Lão Làng GVN

    Tham gia ngày:
    30/10/06
    Bài viết:
    530
    tui thì thấy là thế này, ông check lại nha
    Khi ông tạo bảng xong và chạy các câu insert dữ liệu vào, thì dòng khóa ngoại tham chiếu là
    Insert NhanVien values('NV01','Nguyễn Tấn','Phát', 'Nam', '02/12/1980','NV','NV02')

    ở đây, dòng đầu tiên của bảng có khóa chính là nv01, trong khi lại tham chiếu đến nv02 là chưa có trong bảng
    Để fix, ông có thề làm như sau, tạm bỏ dữ liệu tham chiw61u khóa ngoại ra đã,

    Insert NhanVien values('NV01','Nguyễn Tấn','Phát', 'Nam', '02/12/1980','NV',NULL)

    Sau đó mới dùng câu lệnh update hay gõ bằng tay vào lại

    Try ... :|
     
  6. doquyen1989

    doquyen1989 Legend of Zelda

    Tham gia ngày:
    25/3/06
    Bài viết:
    1,163
    Nơi ở:
    Thủ Đức
    Ồ Thanks... tui sẽ thử... cám ơn... tối nay có làm được hay hok tui sẽ pm lại...
    Cám ơn... em làm được roài... thanks mọi người... Thanks SoII
     
  7. thaitrung

    thaitrung Legend of Zelda

    Tham gia ngày:
    30/5/06
    Bài viết:
    926
    Nơi ở:
    CastleVania
    hmmm nhìn đoạn Code mà thấy sốt chẳng mạch lạc gì ráo, nhìn rối thiệt , ai mà lại viết như thế ?
     

Chia sẻ trang này