Truy vấn dữ liệu access (2 người xem)

Liên hệ QC

Người dùng đang xem chủ đề này

redevinte

Thành viên chính thức
Tham gia
27/10/10
Bài viết
65
Được thích
15
Xin được mọi người giúp đỡ. Mình gửi kèm theo file dữ liệu mẫu. Đề như sau:
Trong table "No" có trường "Code", dữ liệu của trường "code" có dạng như sau:
IW-00001
IW-00002
IW-00003
OW-00001
OW-00002
...
Mình muốn truy vấn để tìm record có ký tự "IW" hoặc "OW" đứng ở đầu thì phần đuôi đang có giá trị lớn nhất là bao nhiêu thì làm thế nào (Kết qua khi truy cập với record có "IW" đứng ở đầu trong ví dụ trên là 3, với "OW" là 2)
 

File đính kèm

Bạn dùng truy vấn sau
Mã:
SELECT Max(Val(Right([No].Code,6))) AS Max
FROM [No]
WHERE [No].Code Like "[COLOR=#ff0000][B]IW[/B][/COLOR]*"
Phần đỏ đỏ bạn thay bằng "OW" để lấy giá trị OW
 
Có bạn nào dùng VB6 xem giúp mình với, báo lỗi như sau:
Untitled.jpg
 

File đính kèm

Có bạn nào dùng VB6 xem giúp mình với, báo lỗi như sau:
View attachment 121513
Có 3 vấn đề như sau:
  1. Không nên đặt tên trường là tên đặc biệt ví dụ ở bài của bạn có trường tên là Max.
  2. Lấy tên cột là Code, mà trong đoạn truy vấn không có chọn cột Code thì có đâu mà chọn?
  3. Điều kiện truy vấn khi so sánh ở Access là dấu sao (*) nhưng ở ADO thì phải là phần trăm (%)
Tôi tạm chỉnh lại như sau:

[GPECODE=sql]Private Sub Form_Load()
Connect
Set rs = New ADODB.Recordset
strSQL = "SELECT Val(Right(
Mã:
,6)), [Code] " & _
             "From [tblNo] " & _
             "Where [Code] Like 'IW%' " & _
             "Order By Val(Right([Code],6)) Desc"
    rs.Open strSQL, cn, 3, 3
    Text1.Text = rs.Fields("Code")
    
End Sub[/GPECODE]
 
Lần chỉnh sửa cuối:
Gửi các bạn xem giúp với:
Mình làm với access thì không vấn đề gì (Các bạn xem mấy querry trong file access), nhưng trong VB thì mình mắc lỗi.
 

File đính kèm

File đính kèm

Cảm ơn bạn nhiều lắm, mình mày mò tự học, mới lên mắc nhiều chỗ. Nếu chỉ muốn lấy phần số ở phía sau thì mình làm như thế này đúng rồi chứ bạn.
Thử sửa lại như sau:

[GPECODE=sql]Private Sub Form_Load()
Connect
Set rs = New ADODB.Recordset
strSQL = "SELECT Max(Right([POCode],6)) as LaySo " & _
"From [tblNo] " & _
"Where [POCode] Like 'IW%' "
rs.Open strSQL, cn, 3, 3
Text1.Text = rs.Fields("LaySo")

End Sub

[/GPECODE]
 
Cái rs.Open strSQL, cn, 3, 3 tác dụng gì vậy bạn?
CursorTypENum và CursorLocationENum. Tương ứng như sau: 1. CursorType = CursorTypENum (adOpenUnspecified=-1, adOpenForwardOnly=0, adOpenKeyset=1, adOpenDynamic=2, adOpenStatic=3) 2. CursorLocation = CursorLocationENum (adUseNone=1, adUseServer=2, adUseClient=3). Dùng nó khác biệt thế nào bạn tìm hiểu nhé, mình cũng đang tự học thôi.
 
Xin được mọi người giúp câu SQL tính hàng tồn. Miêu tả đề như ở trong file excel, dữ liệu trong file access.
 

File đính kèm

Xin được mọi người giúp câu SQL tính hàng tồn. Miêu tả đề như ở trong file excel, dữ liệu trong file access.

Bạn thử Query như sau:

SELECT Hang.Hang, Hang.DienGiai, Nhap.Nhap, Xuat.Xuat, [Nhap]-[Xuat] AS Ton
FROM (Hang LEFT JOIN (SELECT NhapXuat.Hang, Sum(IIf(Left([Phieu],2)="NK",[Soluong],0)) AS Nhap
FROM NhapXuat
GROUP BY NhapXuat.Hang
HAVING (((Sum(IIf(Left([Phieu],2)="NK",[Soluong],0)))>0))) AS Nhap ON Hang.Hang = Nhap.Hang) LEFT JOIN (SELECT NhapXuat.Hang, Sum(IIf(Left([Phieu],2)="XK",[Soluong],0)) AS Xuat
FROM NhapXuat
GROUP BY NhapXuat.Hang
HAVING (((Sum(IIf(Left([Phieu],2)="XK",[Soluong],0)))>0))
) AS Xuat ON Hang.Hang = Xuat.Hang;
 
Thật sự phục bạn. Mình mới chỉ làm được những Query đơn giản. Bạn có thể hướng dẫn một chút về cách để phân tích để làm được chứ?
Nếu chưa quen thì bạn có thể tách ra từng phần để làm.
Cách 1:
  1. Tạo Query Tổng hợp Nhập.
  2. Tạo Query Tổng hợp Xuất.
  3. Join 2 Query đó vào bảng Hàng.
  4. Thực hiện phép tính.
Cách 2: Nếu quen rồi thì có thể dùng 1 Query như tôi làm ở trên.
 

File đính kèm

Thật sự phục bạn. Mình mới chỉ làm được những Query đơn giản. Bạn có thể hướng dẫn một chút về cách để phân tích để làm được chứ?

"Nịnh" vừa vừa cho dể nghe chút bạn ơi.
Có quá nhiêu hạn chế ở cái query trên. Dân chuyên nghiệp không ai viết như thế.
 
"Nịnh" vừa vừa cho dể nghe chút bạn ơi.
Có quá nhiêu hạn chế ở cái query trên. Dân chuyên nghiệp không ai viết như thế.
Mình tự học và cũng không biết mấy, như cũng đã nói ở trên, những câu truy vấn đơn giản trong bảng thì mình viết được còn những câu nối các bảng với nhau mình thấy rối tung. Rất mong được các bạn chỉ dẫn phương pháp để phân tích và thực hiện thế nào cho tốt.
 
Lần chỉnh sửa cuối:
Nếu có thêm trường ngày trong bảng "nhapxuat". Xin chỉ giúp cách tính tồn đầu, nhập, xuất, tồn cuối trong khoảng thời gian từ 03/01/2014 đến 05/01/2014.
 

File đính kèm

Nếu có thêm trường ngày trong bảng "nhapxuat". Xin chỉ giúp cách tính tồn đầu, nhập, xuất, tồn cuối trong khoảng thời gian từ 03/01/2014 đến 05/01/2014.

Bạn test thử với đoạn Query sau:

SELECT NhapXuat.Hang, Hang.DienGiai, Sum(IIf([Ngay]<#1/3/2014# And Left([Phieu],2)="NK",[Soluong],0)-IIf([Ngay]<#1/3/2014# And Left([Phieu],2)="XK",[Soluong],0)) AS TonDau, Sum(IIf([Ngay] Between #1/3/2014# And #1/5/2014# And Left([Phieu],2)="NK",[Soluong],0)) AS Nhap, Sum(IIf(Left([Phieu],2)="XK" And [Ngay] Between #1/3/2014# And #1/5/2014#,[Soluong],0)) AS Xuat, [TonDau]+[Nhap]-[Xuat] AS TonCuoi
FROM NhapXuat INNER JOIN Hang ON NhapXuat.Hang = Hang.Hang
GROUP BY NhapXuat.Hang, Hang.DienGiai;

Lưu ý trường Ngay phải thiết lập kiểu dữ liệu là Date/Time nhé.
 
Bạn test thử với đoạn Query sau:



Lưu ý trường Ngay phải thiết lập kiểu dữ liệu là Date/Time nhé.
Có thể liệt kê cả các hàng không có phát sinh xuất nhập trong thời gian đó được không bạn? (Liệt kê cả hàng D, hàng C)
(Code không vấn đề nhé bạn, do mình chưa suy nghĩ kỹ khi test)
 
Lần chỉnh sửa cuối:
Có thể liệt kê cả các hàng không có phát sinh xuất nhập trong thời gian đó được không bạn? (Liệt kê cả hàng D, hàng C)
(Code không vấn đề nhé bạn, do mình chưa suy nghĩ kỹ khi test)

Vậy thì bạn test với Query sau:

SELECT Hang.Hang, Hang.DienGiai, Sum(IIf([Ngay]<#1/3/2014# And Left([Phieu],2)="NK",[Soluong],0)-IIf([Ngay]<#1/3/2014# And Left([Phieu],2)="XK",[Soluong],0)) AS TonDau, Sum(IIf([Ngay] Between #1/3/2014# And #1/5/2014# And Left([Phieu],2)="NK",[Soluong],0)) AS Nhap, Sum(IIf(Left([Phieu],2)="XK" And [Ngay] Between #1/3/2014# And #1/5/2014#,[Soluong],0)) AS Xuat, [TonDau]+[Nhap]-[Xuat] AS TonCuoi
FROM NhapXuat RIGHT JOIN Hang ON NhapXuat.Hang = Hang.Hang
GROUP BY Hang.Hang, Hang.DienGiai;
 
Web KT

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

Back
Top Bottom