Nhập xuất dữ liệu vào SQL Server

Liên hệ QC

Lighting

Thành viên mới
Tham gia
15/3/07
Bài viết
49
Được thích
14
Như trên tiêu để mong các bạn giúp mình viết code nhập dữ liệu trở lại SQL sau khi đã chỉnh sửa bảng
 

File đính kèm

  • Book1.xls
    52.5 KB · Đọc: 94
Theo mình nghĩ, bạn đã viết được code lấy dữ liệu từ SQL Server rồi (bằng câu truy vấn select...), vậy thì để thêm mới hoặc cập nhật lại dữ liệu bạn dùng cách tương tự nhưng thay vào đó bạn dùng câu truy vấn insert into hoặc update là được thôi
 
Upvote 0
Mình cũng mới học VB nên cũng không hiểu lắm, bạn có thể viết cụ thể được không? Code trên cũng là mình góp nhặt được chứ không phải tự làm //**/
 
Upvote 0
Bạn thử file này rồi áp dụng cho mình nhé.
 

File đính kèm

  • Book1.xls
    39 KB · Đọc: 70
Upvote 0
Mình đã thử tìm hiểu cách nhập dữ liệu nhưng mình muốn nhập dữ liệu từ khoảng dữ liệu có sẵn trong cell. Mình đã viết nhưng không chạy được do lỗi:
Run time error ODBC--call failed
trong 2 câu lệnh này mình dùng 1 trong 2 đều sai, hi:
PHP:
'strSQL = "SELECT * INTO [ODBC;Driver={SQL Server};" & "Server=KLOVE;Database=SOLIEUE12;" & "User ID=sa].MBA FROM [khong xoa$A4:Z27]"
strSQL = "SELECT * INTO newMBA FROM E:\Klove\untility\Book1_.xls...[khong xoa$]"

Không biết sai ở đâu mong các bạn chỉ
 

File đính kèm

  • Book1_.xls
    77.5 KB · Đọc: 18
Lần chỉnh sửa cuối:
Upvote 0
Mình chưa hiểu 2 câu lệnh trên là như thế nào nhưng cách làm của mình là như thế này. Bạn lấy file này về chạy thử.
Mình chỉ làm cho nút lệnh get và update, còn lại bạn nghiên cứu thêm.
Cách thử file như sau (chú ý là mình chưa bẩy lỗi). Mở file Excel Click nút lệnh get lấy dữ liệu vào bảng tính, sửa trực tiếp dữ liệu trên bảng tính, chọn vùng muốn cập nhật Click nút update.
 
Upvote 0
À, bạn nhớ là sau khi sửa dữ liệu trên bang tính, bạn phải chọn vùng dữ liệu cập nhật cho đúng (bao gồm đầy đủ các cột và các hàng). Mình up file lên đây, khi nãy quên
 

File đính kèm

  • SQL.xls
    41 KB · Đọc: 90
Upvote 0
Mình đã nghiên cứu file SQL ở trên của bạn nhưng giờ lại có vấn đề:
PHP:
Sub updateData()
    For i = 1 To Selection.Rows.Count
        fID = Selection(i, 1).Value
        fName = "N'" & Selection(i, 2).Value & "'"
        fPass = "N'" & Selection(i, 3).Value & "'"
        fAge = Selection(i, 4).Value
        lenh = "update Name set Name=" & fName & ", Pass=" & fPass & ", Age=" & fAge & " where ID=" & fID
        With ThisWorkbook.rsPubs
            .ActiveConnection = ThisWorkbook.cnPubs
            .Open lenh
        End With
    Next
End Sub
Nếu fpass hay fage là 1 ô trống thì câu lệnh lỗi luôn
Vậy cho mình hỏi có cách nào vẫn cập nhật cho dù là ô trống hay bỏ qua không cập nhật những biến là trống không?
 
Upvote 0
Chào Lighting.
Do sơ sót của mình thôi. Trong câu lệnh các field Name, Pass có Type là Nvarchar, còn ID và Age có Type là int.
lenh = "update Name set Name=" & fName & ", Pass=" & fPass & ", Age=" & fAge & " where ID=" & fID,
sẽ gây ra lỗi khi các ô lấy giá trị int là trống.
Do đó nếu bạn làm cho các ô này có giá trị là zero thì sẽ không còn lỗi nữa (nghĩa là thay vì xóa trống bạn cho ô có giá trị bằng 0).
Để làm điều này bạn có thể làm nhiều cách, hoặc bằng Excel, hoặc code (nếu giá trị int không hợp lệ thì bằng 0).
Thêm nữa, bạn cũng phải chú ý đến Primary Key (field ID).
 
Lần chỉnh sửa cuối:
Upvote 0
Trước tiên mình cám ơn bạn vì sự nhiệt tình của bạn từ đầu đến giờ!
Mình cũng đã thêm ' ' vào trước
PHP:
", Pass=" & fPass & ", age=
=>
PHP:
", Pass=' " & fPass & " ', age=
để câu lệnh không lỗi nhưng dữ liệu lúc đó là 0 trong khi thực tế nó là Empty (giống với ý tưởng của bạn)
Tuy nhiên, trường hợp của mình thì empty khác với 0 nên không được! Bạn có cách nào không?
 
Upvote 0
À, nếu Excel xử lý như vậy thì ta xử bằng code cũng được mà, ví dụ nhe:
If Selection(i, 4).Value <> "" Then
fAge = Selection(i, 4).Value
Else
fAge = 0
End If
 
Upvote 0
À, nếu Excel xử lý như vậy thì ta xử bằng code cũng được mà, ví dụ nhe:
If Selection(i, 4).Value <> "" Then
fAge = Selection(i, 4).Value
Else
fAge = 0
End If
Ý của bạn là nếu empty thì thay bằng 0 nhưng của mình nếu empty thì vẫn là empty không thể thay bằng 0 bạn ạ!
 
Upvote 0
Hi, mình đã tìm ra cách không cập nhật những ô là empty rồi:
PHP:
Sub updateData()
    Set cnPubs = New ADODB.Connection
    Set rsPubs = New ADODB.Recordset
    cnPubs.Open connstr
    For i = 1 To Selection.Rows.Count
        fID = Selection(i, 1).Value
        fName = "N'" & Selection(i, 2).Value & "'"
        fPass = "N'" & Selection(i, 3).Value & "'"
        fAge = Selection(i, 4).Value
'kiem tra fAge co Empty khong
        fAge = IIf(Len(fAge) = Empty, "", ", age=" & fAge)   
        lenh = "update Name set Name=" & fName & ", Pass=" & fPass & " " & fAge & " where ID=" & fID
        With rsPubs
            .ActiveConnection = cnPubs
            .Open lenh
        End With
    Next
End Sub
 
Lần chỉnh sửa cuối:
Upvote 0
Mình nghĩ chỗ này bạn phải xử lý khác rồi. Do Age có kiểu là int và trong SQL bạn cho phép null nên sẽ có 3 trường hợp:
- Age = 0
- Age <> 0
- Age = null
Nếu Age cần đến 3 trạng thái như trên thì bạn cần phải như vầy:
Sub updateData()
For i = 1 To Selection.Rows.Count
fID = Selection(i, 1).Value
fName = "N'" & Selection(i, 2).Value & "'"
fPass = "N'" & Selection(i, 3).Value & "'"
If Len(Selection(i, 4).Value) = 0 Then
fAge = "null"
ElseIf Selection(i, 4).Value = 0 Then
fAge = 0
Else
fAge = Selection(i, 4).Value
End If
lenh = "update Name set Name=" & fName & ", Pass=" & fPass & " " & ", Age=" & fAge & " where ID=" & fID
MsgBox (lenh)
With ThisWorkbook.rsPubs
.ActiveConnection = ThisWorkbook.cnPubs
.Open lenh
End With
Next
End Sub
 
Upvote 0
Hay wa' mình không ngờ đến cái "null" này, trước mình cứ nghĩ dùng NULL này.
Cám ơn bạn nha!
 
Upvote 0
Web KT
Back
Top Bottom