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

Chia sẻ bởi:hands
★★★★★
Quảng cáo

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

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

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 //**/

Bạn thử file này rồi áp dụng cho mình nhé.

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:
'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:KloveuntilityBook1_.xls…[khong xoa$]"

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

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.
À, 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

Mình đã nghiên cứu file SQL ở trên của bạn nhưng giờ lại có vấn đề:

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?

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).

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 ", Pass=" & fPass & ", age= => ", 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?

À, 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 ạ!
Hi, mình đã tìm ra cách không cập nhật những ô là empty rồi:

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

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

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!

Ứng dụng AI và Chat GPT trong Quản trị nhân sự
Khóa học SprinGO phù hợp

Ứng dụng AI và Chat GPT trong Quản trị nhân sự

Học xong khóa này, học viên có thể: Hiểu đúng bản chất AI, các nhóm AI phổ biến và cách AI “hoạt động” ở...

Xem khóa học
★★★★★ 5 ★ 1 👤 0 ▥ 0
Quảng cáo

Bạn nên đọc

Leave a Reply

Your email address will not be published. Required fields are marked *

Quảng cáo

Cũ vẫn chất

Xem thêm