Insert giá biến có kiểu số từ excel vào SQL với VBA

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

Nhờ các bác giúp lúc mình Insert dữ liệu từ excel vào SQL với VBA thì trường giá trị số không biết code như thế nào. Code mình viết như sau nhưng ở trường TrnDb không biết code như thế nào.
Các bác có thể chỉ giúp. Thanks nhiều

Dim TrnDb as Double
conn.Execute "insert into dbo.AAA ( sNo, TrnDesc,TrnDb,TrnRef,TrnXRef) " & _
" values ('" & sNo & "','" & TrnDesc & "', TrnDb , '" & TrnRef & "','" & TrnXRef & "')"

Trường TrnDb trong SQL là kiểu numeric (18,2)

Phải xác định kiểu dữ liệu cho từng cột trước rồi mới đưa dữ liệu phù hợp vào. Đối với dữ liệu là số thì không có dấu nháy đơn bao quanh, còn đối với kiểu text thì phải bao quanh bằng dấu nháy đơn.

Người Việt có tật nói tắt từ ngữ ngoại một cách phi lý. Tụi Anh gọi cách nói chập choạng này là Vietlist (cũng như chúng gọi cách nói tiếng Anh của người Tàu là Chinglist)

SQL Server thì nói là SQL Server, gọi tắt là SQL đâu có được. SQL là ngôn ngữ chuẩn. SQL Server dùng cái gọi là T-SQL hay Transact-SQL.

Theo T-SQL thì nó tự biết cast số vào dạng Decimal/Numeric nếu cần.
Trường hợp cần xác định cách làm tròn thì mới phải dùng hàm Cast (hoặc Convert)

& "', " & TrnDb & ", '" &

Viết câu SQL string có tham số thì người ta viết trọn câu rồi dùng Replace thế các tham vào. Viết câu & và ' tùm lum khó đọc mà thể nào cũng có lúc trật.

strSQL = "Select * From ABC Where x = '<triX>' And y = <triY>" ' x là chuỗi, y là số
strSQL = Replace(Replace(SQL, "<triX>", varX), "<triY>", varY)

Mạnh đang xài hàm sau thấy kiểu dữ liệu số hay txt thì nó cũng xử hết … còn tại sao Xin thua
Xài DAO chứ ko phải ADO he

Public Function GetValue(ByVal sValue As String) As String
    GetValue = "'" & sValue & "'"
End Function

Public Sub InsertTableName(ByVal AccPath As String, ByVal TableName As String, DArr())
    Rem Ap dung cho TableName co 1 Cot duy nhat Ko co Cot So TT Or Primary Key (ID)
    Rem Ghi Du lieu Tu Mang Vao TableName Database Access
    Dim Db As Object, x As Long
    Set Db = MyDAO(AccPath)                                                 ''Tao ket noi voi Database
    Db.Execute ("DELETE * FROM " & TableName)                               ''Xoa du lieu table Cu Neu Co
    For x = 1 To UBound(DArr)                                               ''Duyet Mang du Lieu
        If DArr(x, 1) <> "" Then                                            ''Neu co du lieu thi lay
            Db.Execute "INSERT INTO " & TableName _
                & " VALUES(" & "'" & DArr(x, 1) & "'" & ")"                 ''Chen du lieu Moi len TableName
        End If
    Next x
    Db.Close: Set Db = Nothing                                              ''Giai Phong Bien
End Sub

Mạnh đang xài hàm sau thấy kiểu dữ liệu số hay txt thì nó cũng xử hết … còn tại sao Xin thua
Xài DAO chứ ko phải ADO he

Code của bạn dùng Access SQL chứ không hẳn là T-SQL
Mỗi phần mềm quản lý CSDL có mọt phiên bản SQL của riêng nó, tuy đại khái thì tuân thủ luật SQL chuẩn nhưng vẫn có những biến hoá không phù hợp với nhau. Điển hình:
Access dùng phiên bản Access. Không có hàm Cast, muốn đổi kiểu thì dùng hàm C<var>: CStr, CInt, CLng…
SQL Server dùng phiên bản T-SQL. Muốn đổi kiểu thì dùng hàm Cast
Oracle dùng phiên bản SQL-Plus. Cũng dùng hàm Cast

Trong code DAO của bạn ở bài trước, Access tự động ép kiểu String thành số để ghi vào CSDL. Phương cách này gọi là "implicit casting" hoặc "type coercion"

Việc mình truyền chuỗi mà không báo lỗi thì sql server có cơ chế tự convert, nó tuân theo thứ tự như sau:
docs.microsoft.com/en-us/sql/t-sql/data-types/data-type-precedence-transact-sql?view=sql-server-ver15

www.giaiphapexcel.com/diendan/threads/insert-gi%C3%A1-bi%E1%BA%BFn-c%C3%B3-ki%E1%BB%83u-s%E1%BB%91-t%E1%BB%AB-excel-v%C3%A0o-sql-v%E1%BB%9Bi-vba.150225/

Ứ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

Bình luận

Quảng cáo

Cũ vẫn chất

Xem thêm