Lỗi khi xuất dữ liệu từ sql sang sheet của excel
Chào các bạn.
Mình có sử dụng đoạn code ở dưới để xuất dữ liệu từ sql sang sheet của excel nhưng khi xuất thì tại trường là dữ liệu kiểu số có giá trị đúng là: 4.998.000.000đ; nhưng khi xuất ra excel thì kết quả là: 4.998.000.128đ;
Rất mong các bạn xem giúp.
Mình xin cảm ơn!'Khai bao cho ket noi voi CSDL SQL Public cnn As New ADODB.Connection Public rs As ADODB.recordset Const connstr = "Driver=SQL Server;SERVER=240786-WS128169994;UID=sa;PWD=1234fgt56a@00000;DATABASE=QLTS000" Sub tim_kiem(malcp) 'vo hieu hoa Application.ScreenUpdating = False Application.EnableEvents = False Dim fld As ADODB.Field Sheet6.Cells.Clear cnn.Open connstr Set rs = New ADODB.recordset rs.Open "SELECT * FROM th_lnlr14_glst12 where plgno = '" & malcp & "'", cnn 'dien tieu de r = 1 c = 1 For Each fld In rs.Fields Sheet6.Cells(r, c).Value = fld.Name c = c + 1 Next 'xuat du lieu ra sheet temp On Error Resume Next r = r + 1 Do While Not rs.EOF c = 1 For Each fld In rs.Fields Sheet6.Cells(r, c) = fld c = c + 1 Next rs.MoveNext Loop On Error GoTo 0 rs.Close cnn.Close Set rs = Nothing Set cnn = Nothing 'Tu dong can chinh cot Sheet6.Cells.EntireColumn.AutoFit 'xoa du lieu Sheet4.Cells(2, 2).Select 'tai khoan Sheet4.Cells(3, 2).Value = "" 'dien phong giao dich Sheet4.Cells(4, 2).Value = "" 'dien ma chu so huu Sheet4.Cells(5, 2).Value = "" 'dien ten chu so huu Sheet4.Cells(6, 2).Value = "" 'ma khach hang vay Sheet4.Cells(7, 2).Value = "" 'ten khach hang vay Sheet4.Cells(8, 2).Value = "" 'loai tien Sheet4.Cells(9, 2).Value = "" 'gia tri tai san Sheet4.Cells(10, 2).Value = "" 'dien so sezi Sheet4.Cells(11, 2).Value = "" 'dien ghi chu Sheet4.Cells(12, 2).Value = "" 'xuat du lieu thoa man dieu khien For i = 2 To r If Trim(Sheet6.Cells(i, 1).Value) = malcp Then 'dien tai khoan Sheet4.Cells(3, 2).Value = Sheet6.Cells(i, 3) 'dien phong giao dich Sheet4.Cells(4, 2).Value = Sheet6.Cells(i, 4) 'dien ma chu so huu Sheet4.Cells(5, 2).Value = Sheet6.Cells(i, 8) 'dien ten chu so huu Sheet4.Cells(6, 2).Value = Sheet6.Cells(i, 9) 'ma khach hang vay Sheet4.Cells(7, 2).Value = Sheet6.Cells(i, 6) 'ten khach hang vay Sheet4.Cells(8, 2).Value = Sheet6.Cells(i, 7) 'loai tien Sheet4.Cells(9, 2).Value = Sheet6.Cells(i, 5) 'gia tri tai san Sheet4.Cells(10, 2).Value = Sheet6.Cells(i, 15) 'dien so sezi Sheet4.Cells(11, 2).Value = Sheet6.Cells(i, 13) 'dien ghi chu Sheet4.Cells(12, 2).Value = Trim(Sheet6.Cells(i, 10)) & ", " & Trim(Sheet6.Cells(i, 11)) Exit Sub End If Next i '================================================== Application.ScreenUpdating = True Application.EnableEvents = True Application.Calculation = xlCalculationAutomatic End Sub
1. Vào SSMS chạy thử câu lệnh, và xuất ra csv xem kết quả là gì.
2. kiểu dữ liệu của trường số ấy trên SQL Server là gì?
(Mình mới tìm hiểu)
1. Bạn hướng dẫn với.
2. Kiểu dữ liệu của trường ấy là kiểu real.
3. cảm ơn ban
Vào SSMS gõ câu này
SELECT * FROM th_lnlr14_glst12 where [cái trường gì đó] = 4998000000
xem nó ra cái gì.
Nếu nó ra đúng các dòng bạn nghĩ thì trong quá trình import vào Excel có vấn đề. Lúc đó mới cần chỉnh sửa.
Nếu nó khong ra đúng các dòng ấy thì do giá trị thật trong SQL Server là 4998000128 (hoặc con số gần như vậy)
đã hiểu ý bạn.
Mình đã vào trực tiếp CSDL và dùng câu lệnh như bạn thì ra đũng kết quả 4998000000.
vậy mong bạn giúp
1. Dữ liệu sai ở sheet4 hay sheet6 hay cả hai?
2. Code của bạn Exit sub trước khi nó chạy đến các dòng cuối để chỉnh sửa Appication trở về trạng thái ban đầu. (cần sửa Exit Sub thành Exit For)
3. cái chỗ 'xoa du lieu sửa thành
Range(Sheet4.Cells(2,2),Sheet4.Cells(12,2)).ClearContents
1. Mình muốn xuất ra sheet6 trước sau đó đến sheet4.
2. Đã sửa.
3. Minh để ý là đối với những bản ghi có giá trị lớn từ 1 tỷ trở nên thì bị lỗi như vậy
mình không sửa được vì thông báo những ô này đã gộp
Dữ liệu Real không chính xác 100%. Tõi nghĩ có nhiều khả năng cái trường kia trong th_lnlr14_glst12 là một calculated field. Khi lấy ra, nó tự động đièu chỉnh số lẻ.
Tôi nhớ mang máng là dữ liệu Real trong SQL Server chỉ bảo đảm đến 7 chữ số. Qua hàng tỷ thì 3 chữ số cuối cùng không còn bảo đảm nữa. Lúc bạn làm việc trên SSMS thì nó tự động điều chỉnh số lẻ. Nhưng khi export thì nó thảy cho ADO tự xử.
Nếu có thể, bạn nên sửa dữ liệu bên SQL Server là Float(53), hay Decimal(16).
cảm ơn bạn nhé
Mình chuyến sang Decimal(16) thì OK luôn.a mình nhìn thấy mật khẩu sít tâm ạt min rồi nha. :D:D
Ba cái mớ này gặp sí cồ in giét sông là bỏ mạng ngay.
Tôi đâu có khuyến khích để VBA truy cập dữ liệu từ nơi khác, và nhất là lại dùng ADODB để truy cập từ CSDL chính.
www.giaiphapexcel.com/diendan/threads/l%E1%BB%97i-khi-xu%E1%BA%A5t-d%E1%BB%AF-li%E1%BB%87u-t%E1%BB%AB-sql-sang-sheet-c%E1%BB%A7a-excel.128441/
Khóa học Power PI – Ứng dung trong Nhân sự
TỔNG QUAN KHÓA HỌC: POWER BI CHO NGÀNH NHÂN SỰ Khóa học Power BI cho Nhân sự được thiết kế dành riêng cho các...
Xem khóa học
Theo lý thuyết thì có thể dùng lệnh truy vấn schema để lấy tên trường, cho vào một chuỗi csv, và lập câu SQL động.
Nhưng dân CSDL LH chân chính không ai làm vậy cả. Bởi vì ở dạng lý tưởng CSDL LH thì thứ tự của dòng và cột là vô nghĩa. Tiêu chuẩn SQL định rằng câu lênh insert phải dùng cái name list để đối chiếu với cai value list.