Bài tập về ADO căn bản.

Liên hệ QC
em cũng hổng biết sao dán cái anh đưa ở trên vào cửa sổ VBA thấy đỏ lòm à. hic
Chắc VBA đến ngày... :p . Vậy có thể do ghép chuỗi SQL thiếu ". Em dò lại đầu và cuối một chuỗi phải bao bởi ". Em kiểm tra lại code này:

Mã:
Set lrs = Cnn.Execute("SELECT Maso,Tenchitiet,soluong," & _
                        "IIF(soluong >360, 'A', IIF(soluong =360,  'B', 'C' )) " & _
                      "FROM [DATA$]")
 
Chắc VBA đến ngày... :p . Vậy có thể do ghép chuỗi SQL thiếu ". Em dò lại đầu và cuối một chuỗi phải bao bởi ". Em kiểm tra lại code này:

Mã:
Set lrs = Cnn.Execute("SELECT Maso,Tenchitiet,soluong," & _
                        "IIF(soluong >360, 'A', IIF(soluong =360,  'B', 'C' )) " & _
                      "FROM [DATA$]")

À vâng, cám ơn anh. Thì ra đầu và cuối chuỗi phải có dấu nháy kép. Giờ hết đỏ rồi ạ. %#^#$
 
Cái câu hỏi ở bài #415 vừa sai, vừa mập mờ. Quý vị giải được cũng đáng phục nghề kiên nhẫn.
Từ lúc hỏi ở thớt bên kia, tôi đã bảo chủ thớt ghi lại câu cú cho rõ ràng rồi hãy xét tiếp - trước mắt là câu đó bị thiếu dấu cách. Đó là cách debug lỗi thuật ngữ code (xét lỗi chính tả).
Sau khi biết đúng câu rồi thì mới thảy thẳng câu ấy vào hệ thống CSDL mà thử. Đó là cách debug code nếu đã đúng thuật ngữ (xét xem có đúng dữ liệu truy vấn)

Chỉ có cái kỹ thuật debug mà chủ thớt cũng còn chập choạng thì còn đòi thử Access với SQL Server làm chi cho mất thì giờ.
 
em cũng hổng biết sao dán cái anh đưa ở trên vào cửa sổ VBA thấy đỏ lòm à. hic
 
em cũng hổng biết sao dán cái anh đưa ở trên vào cửa sổ VBA thấy đỏ lòm à. hic

Đỏ là do đến ngày ;). Ở những đoạn ngắt dòng, em chỉnh lại bằng cách, xóa dấu _ hiện nay đi và làm lại: Nhấn phím SPACE sau đó SHIFT + _ rôi ENTER nhé.
 
Dạ em chào cả nhà,
Hiện tại em đang muốn làm cái insert VBA excel vào sqlserver 2008r2. em thử chạy trực tiếp trên máy cài sql thì ok. Nhưng sang máy khác thì lỗi
dbnetlib connectionopen (connect()). sql server does not exist or access denied
em thử nhiều cách mà vẫn chưa được mong các bác giúp đỡ.
 
Dạ em chào cả nhà,
Hiện tại em đang muốn làm cái insert VBA excel vào sqlserver 2008r2. em thử chạy trực tiếp trên máy cài sql thì ok. Nhưng sang máy khác thì lỗi
dbnetlib connectionopen (connect()). sql server does not exist or access denied
em thử nhiều cách mà vẫn chưa được mong các bác giúp đỡ.
Bạn đã cấu hình SQL Server cho phép kết nối hay chưa?
 
Bài 1:
Nhằm mục đích luyện tập và nâng cao kiến thức về ADO tôi xin mở topic này. Topic này chỉ dành cho những người mới học, bắt đầu học ADO như tôi tham gia.

Tôi có 2 Workbooks (A.xls và B.xls chung 1 folder): Wb A.xls có 1 sheet là sheet data dùng để chứa dữ liệu, wb B.xls là wb rỗng, trong đó có sheet1.

Xin hỏi là dùng ADO từ WB A.xls để copy toàn bộ dữ liệu của sheet data sang WB B.xls với sheet chứa dữ liệu là data
Anh ơi cho em hỏi. Sao bài 1 Em làm bị lỗi nó báo thế này vậy anh.
upload_2017-12-2_13-21-44.png
 

File đính kèm

  • A.xls
    33.5 KB · Đọc: 3
Kiểm tra lại file B.xls coi có cột STT không nhé
Cám ơn anh. Đọc qua giúp đỡ của anh và Microft em đã cơ bản hiểu được chỗ này. Đây là câu lệnh thêm vào bảng. Vì vậy trong Sheet1 của File B.xls phải có columns heading giống bảng bên này. Sau khi thêm tên cột em đã INSERT thành công. Cám ơn anh HLMT nhiều. Ai bị lỗi giống em có thể tham khảo thêm tại https://support.microsoft.com/EN-US/help/295646
 
ở bài trên tôi code như vậy

Mã:
Sub TEST() ' KHONG CO TIEU DE
Dim Cn As Object
Dim Rst As Object
Dim i As Long
Set Cn = CreateObject("ADODB.connection")
Set Rst = CreateObject("ADODB.recordset")
    Sheet4.Range("a2:Z10000").Clear
    Cn.Provider = "Microsoft.ACE.OLEDB.12.0"
    Cn.Properties("Data Source") = ThisWorkbook.FullName
    Cn.Properties("Extended Properties") = "Excel 12.0;HDR=yes;IMEX=1"
    Cn.Open
    Rst.Open ("select MaKho, TenKho, count(SoPhieu), Sum(SoLuong) as So_Luong,Sum(SoLuong*gia) as SoTien from [data$] where Makho<>'' group by MaKho, TenKho"), Cn
    Sheet4.Range("a2").CopyFromRecordset Rst
    Rst.Close
    Cn.Close
End Sub
kết quả ra tất cả đều đúng nhưng tổng số phiếu không hợp lý
Tôi muốn tổng số phiếu là đếm những phiếu riêng biệt chứ không phải trùng
ví dụ như mã TL0010 số phiếu lá 23 chứ không phải là 156 . Xin được giúp đỡ xin cảm ơn
Bạn thử đổi câu lệnh truy vấn này xem sao
Rst.Open ("select Makho, TenKho, count(sophieu), sum(so_Luong),sum(So_Tien) from(select DISTINCT maKho, TenKho , SoPhieu, Sum(SoLuong) as So_Luong,Sum(SoLuong*gia) as So_Tien from [data$] where Makho<>'' group by MaKho, TenKho, sophieu) group by makho, tenkho"), Cn
 

File đính kèm

  • Tong hop My Pham_GPE.xlsb
    318.9 KB · Đọc: 14
Nếu là SQL Server thì có thể Count(Distinct SoPhieu)
Nhưng hình như Access không hổ trợ dạng này.
Theo tôi nghĩ có lẽ bạn phải group 2 lần.
select MaKho, TenKho, count(*), Sum(SL) as So_Luong, Sum(ST) as SoTien from
(select MaKho, TenKho, Sum(SoLuong) as SL, Sum(SoLuong*gia) as ST from [data$] where Makho<>'' group by MaKho, TenKho, SoPhieu) As A group by MaKho, TenKho
 
Chào Các Anh
Mình muốn sữa đổi điều kiện trong đoạn code sau:
Thay thế điều kiện
[" & ThisWorkbook.FullName & "].[DK$A1:A4]
Thành điều kiện sau để khi cần bổ sung thêm điều kiện không cần sữa code.
With Sheet2
.Range("A1", .[A1].End(xlDown)).Value
End With

Mã:
Private Sub CommandButton1_Click()
Dim v As String, Cnn As Object, lrs As Object
Application.ScreenUpdating = False
    Set Cnn = CreateObject("ADODB.Connection")
    v = Application.Version
    With Sheet3
     .Range("A2:D5000").ClearContents
    Cnn.Open ("Provider=Microsoft." & IIf(v <> "8.0", "ACE.OLEDB.12.0", "Jet.OLEDB.4.0") & _
    ";Data Source=" & ThisWorkbook.FullName & ";Extended Properties=Excel " & IIf(v <> "8.0", "12.0", "8.0"))
'---------------------------------------------------------------------------------------------------------------
    Set lrs = Cnn.Execute("SELECT STT, TEN, sum(SoLuong), GhiChu " & _
                      "FROM [Data$] " & _
                          " WHERE STT IN (SELECT STT FROM [" & ThisWorkbook.FullName & "].[DK$A1:A4]) " & _
                          "GROUP BY STT,TEN,GhiChu ")
'---------------------------------------------------------------------------------------------------------------
    .Range("A2").CopyFromRecordset lrs
    End With
'---------------------------------------------------------------------------------------------------------------
lrs.Close: Set lrs = Nothing
Cnn.Close: Set Cnn = Nothing
Application.ScreenUpdating = True
End Sub
 

File đính kèm

  • A.xls
    44 KB · Đọc: 5
Em chào cả nhà.
Em nhờ cả nhà hướng dẫn giúp em đoạn code ADO để ghi dữ liệu vào file đóng với cấu trúc file như em đã đính kèm. Em cũng thử sử dụng INNER JOIN và UPDATE như bác Hai Lúa Miền Tây đã viết trước đây nhưng lại bị vướng chỗ SUM và cột update dữ liệu. Em muốn sum dữ liệu từ SHEET MAIN sang SHEET DATA ạ. Làm theo hướng workbook.open thì em làm được rồi nhưng em muốn tìm hiểu xem code Ado thì viết ntn.
Em cám ơn mọi người.
 

File đính kèm

  • DATA.xlsx
    9.1 KB · Đọc: 4
  • MAIN.xlsb
    8 KB · Đọc: 5
Các anh chị cho dhn46 hỏi về lấy dữ liệu file csv:
dhn46 có file 1.csv tại D:\, có file để chứa kết quả Result.Xlsm cùng thư mục D:\
Tại sheet1 file Result, [A1:A10] chứa điều kiện cần lọc tương ứng với cột thứ 1 file 1.csv
Vậy xin hỏi code sử dụng SQL để lấy dữ liệu từ file D:\1.csv tới file D:\Result.xlsm với điều kiện tại D:\Result.xlsm_Sheet1.[A1:A10]
Xin cảm ơn GPE
 
Các anh chị cho dhn46 hỏi về lấy dữ liệu file csv:
dhn46 có file 1.csv tại D:\, có file để chứa kết quả Result.Xlsm cùng thư mục D:\
Tại sheet1 file Result, [A1:A10] chứa điều kiện cần lọc tương ứng với cột thứ 1 file 1.csv
Vậy xin hỏi code sử dụng SQL để lấy dữ liệu từ file D:\1.csv tới file D:\Result.xlsm với điều kiện tại D:\Result.xlsm_Sheet1.[A1:A10]
Xin cảm ơn GPE

Ủa cái này có vấn đề gì khó hả bạn ? mình thấy hình như bạn cũng đâu có yếu khoản SQL ta :)
 
Web KT
Back
Top Bottom