Insert giá biến có kiểu số từ excel vào SQL với VBA
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ềuDim 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ự
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
Bình luận