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

Liên hệ QC

taikhoanchoigame992000

Thành viên mới
Tham gia
6/6/20
Bài viết
10
Được thích
5
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)
 
Đã trả lời nhưng thấy 2 bài nên rút lại.
 
Upvote 0
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. Cảm ơn 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.
 
Upvote 0
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)
 
Lần chỉnh sửa cuối:
Upvote 0
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
Mã:
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
 
Upvote 0
Chịu ... giải thích chi tiết chút thì hiểu chứ vậy thì cũng xin về Nhì :p :D
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"
 
Upvote 0
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:
 
Upvote 0
Sorry các bác, mình lại theo thói quen nên quên thực ra là SQL Server.
Thanks các bác đã phản hồi.
 
Upvote 0
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. Cảm ơn 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)
Bác xài SMILE phỏng? :D
 
Upvote 0
Web KT

Bài viết mới nhất

Back
Top Bottom