Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Xử lý table tonkho bị lỗi: Syntax error converting datetime from character string?

  1. #1
    Ngày gia nhập
    12 2010
    Bài viết
    85

    Mặc định Xử lý table tonkho bị lỗi: Syntax error converting datetime from character string?

    Mình có bảng tồn kho được tạo như sau:
    create table tonkho
    (
    mahang char(10),
    ngayton datetime,
    tondk float,
    nhap float,
    xuat float,
    tonck float
    primary key (mahang,ngayton)
    )
    - Mình muốn khi chèn dữ liệu vào bảng tồn kho tonkho như sau:
    + Nếu cùng mã hàng và cùng ngày tồn thì số lượng nhập (xuất) = soluongnhap (xuat) cũ + soluongnhap (xuat) mới (cái này mình đã viết trong c# cho truy xuất vào csdl) -->tonck = tondk + nhap - xuat (trigger trong sql tự động)
    + Nếu cùng mã hàng, khác ngày tồn (cùng ngày tồn-khác mã, khác mã-khác ngày tồn) thì: tondk = tonck (trước nó - tức là lấy tonck cùng mã nhưng ngày tồn gần nhất)
    ví dụ:
    mt,1/1/2001,0,100,90,10
    mt,1/2/2001,10,50,55,5
    mt,2/2/2001,5,100,55,50
    .................................................

    bp,3/2/2002,0,10,0,10
    bp,3/3/2002,10,20,15,15
    bp,1/1/2010,15,5,10,10
    .................................................. .

    1. Khi mình tạo trigger cho tonck = tondk + nhap - xuat như sau:
    create trigger tk_tonkho on tonkho
    for insert,update
    as
    update tonkho set tonck = tondk + nhap - xuat
    where mahang + ngayton in (select mahang + ngayton from inserted)
    --> sau khi tạo xong mình thực hiện lệnh sau để chèn vào so luong nhap.
    insert into tonkho (mahang,ngayton,nhap) values ('1','08/08/2001',100)
    và nó xuất hiện lỗi sau:
    Server: Msg 241, Level 16, State 1, Procedure tk_tonkho, Line 4
    Syntax error converting datetime from character string.
    Mình không hiểu nguyên nhân sinh ra lỗi này? Vì kiểu datetime mình khai báo đúng mà?

    2. Các bạn chỉ mình hướng để tạo trigger cho trường hợp: tondk = tonck (trước nó), mình không có hướng làm vấn đề này (mình định dùng hàm max(ngayton) để lấy ra tonck mà k được).

    Nếu bạn nào có hướng giải quyết 2 vấn đề trên thì góp ý mình nhe! Thân.
    Đã được chỉnh sửa lần cuối bởi sonsonsonson : 28-08-2011 lúc 04:25 PM.
    Học hỏi - học hỏi - học hỏi tới cùng
    --> Học hỏi đến khi nào ra vấn đề thì học hỏi vấn đề khác
    và học hỏi - học hỏi - học hỏi đến
    .

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

    Bảo nó in ra dòng như sau:

    select getdate()

    Nhìn dạng nó in ra, nhập này theo đúng dạng như vậy (cắt bỏ phần giờ phút giây)

    vd
    in ra
    2011-08-28 11:40:50
    thì biết là nó dùng dạng yyyy-mm-dd, như vậy nhập
    '2001-08-08'

    Muốn tạo trigger phải hiểu rất rõ về thiết kế và yêu cầu của CSDL, tài liệu bạn cho không đủ để chỉ dẫn.

  3. #3
    Ngày gia nhập
    12 2010
    Bài viết
    85

    Yêu cầu trigger của bài toán là tondk = tonck (trước nó)
    ví dụ:
    - ngày 21 tháng 1 năm 2000 tồn cuối kỳ của "máy tính" là: 100
    - ngày 22 tháng 1 năm 2000 (nếu có nhập hoặc xuất "máy tính") tồn đầu kỳ của "máy tính" là: 100 (còn tồn cuối kỳ thì: tonck = tondk + nhap - xuat). Giả sử lúc này tồn cuối kỳ là: 120.
    - ngày 23 tháng 1 năm 2000 (không có nhập hoặc xuất "máy tính") thì thôi.
    ..............
    - ngày 23 tháng 2 năm 2000 (nếu có nhập hoặc xuất "máy tính") tồn đầu kỳ của "máy tính" là: 120.

    Cứ thế: tồn đầu kỳ = tồn cuối kỳ trước đó.
    Học hỏi - học hỏi - học hỏi tới cùng
    --> Học hỏi đến khi nào ra vấn đề thì học hỏi vấn đề khác
    và học hỏi - học hỏi - học hỏi đến
    .

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

    Code:
    insert into tonkho (mahang,ngayton,nhap,tondk) 
       select mahang, '20010808', 100, tonck
           from tonkho where mahang = '1' and ngayton =
              (select max(ngayton) from tonkho where mahang = '1' and ngayton < '20010808')
    
    -- câu lệnh phụ trong dòng cuối cùng dùng để tìm dòng có ngày gần nhất
    -- lưu ý là ở đây, bạn có thể sửa code để tính luôn tonck mà không cần phải trigger
    Lưu ý: Code này sẽ không insert dòng nào cả nếu trước đó trong bảng tonkho bạn chưa có mặt hàng này.

    tb
    Bạn hỏi thì tôi chỉ dẫn chứ theo đúng lý thuyết thì CSDL của bạn đã được thiết kế sai nguyên tắc của CSDL Liên Hệ. Và ít nhất là có một trường (tonck) làm cho bảng của bạn sái luật chuẩn bậc 3. (đáng lẽ nên dùng view hoăc calculated field)

  5. #5
    Ngày gia nhập
    12 2010
    Bài viết
    85

    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    [code]
    Bạn hỏi thì tôi chỉ dẫn chứ theo đúng lý thuyết thì CSDL của bạn đã được thiết kế sai nguyên tắc của CSDL Liên Hệ. Và ít nhất là có một trường (tonck) làm cho bảng của bạn sái luật chuẩn bậc 3. (đáng lẽ nên dùng view hoăc calculated field)
    Thật ra thì trường tonck là mình tự thêm để khi tính tondk cho de (chỉ cần lấy số liệu của tonck truoc nó) khỏi phải tính toán. Thank bạn rất nhiều.


    Trích dẫn Nguyên bản được gửi bởi VoTichSu Xem bài viết
    [code]
    insert into tonkho (mahang,ngayton,nhap,tondk)
    select mahang, '20010808', 100, tonck
    from tonkho where mahang = '1' and ngayton =
    (select max(ngayton) from tonkho where mahang = '1' and ngayton < '20010808')(đáng lẽ nên dùng view hoăc calculated field)
    Mà bạn ơi cho mình hỏi: theo đúng cú pháp của lệnh insert thì: insert into "tên bảng" ("các trường - nếu không insert hết bảng") values ("giá trị"). Sau mình k thấy values nào của bạn vậy? Như vậy sau nó chèn vào bảng được?
    Đã được chỉnh sửa lần cuối bởi sonsonsonson : 29-08-2011 lúc 12:55 PM.
    Học hỏi - học hỏi - học hỏi tới cùng
    --> Học hỏi đến khi nào ra vấn đề thì học hỏi vấn đề khác
    và học hỏi - học hỏi - học hỏi đến
    .

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

    Mặc định Xử lý table tonkho bị lỗi: Syntax error converting datetime from character string?

    Trích dẫn Nguyên bản được gửi bởi sonsonsonson Xem bài viết
    ....
    Mà bạn ơi cho mình hỏi: theo đúng cú pháp của lệnh insert thì: insert into "tên bảng" ("các trường - nếu không insert hết bảng") values ("giá trị"). Sau mình k thấy values nào của bạn vậy? Như vậy sau nó chèn vào bảng được?
    Tìm sách giáo khoa nghiên cứu lại lệnh insert.

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

  1. Database Lỗi conversion failed when converting datetime from character string
    Gửi bởi ngocchung11b5 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 12
    Bài viết cuối: 11-12-2014, 05:00 PM
  2. conversion failed when converting character string to smalldatetime data type
    Gửi bởi shinichi_kude trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 23-05-2013, 09:55 AM
  3. Database Lỗi Conversion failed when converting datetime from character string trong câu Insert
    Gửi bởi KaitoKid trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 02-05-2012, 06:33 PM
  4. Lập trình C++ sử dụng string trong C++. Lỗi C2146: syntax error : missing ';' before identifier tại string string_rep()const;?
    Gửi bởi levanvuonglvv trong diễn đàn Thắc mắc lập trình C/C++/C++0x
    Trả lời: 3
    Bài viết cuối: 15-09-2011, 10:28 PM
  5. ADO.NET Insert Datetime: Conversion failed when converting date and/or time from character string
    Gửi bởi hao100 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 13-03-2011, 12:13 AM

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