Giúp kiểm tra lệnh MySQL không chạy (4 người xem)

Liên hệ QC

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

heoxjnh90

Thành viên mới
Tham gia
12/6/11
Bài viết
39
Được thích
3
Hiện mình đang code làm sổ cái kế toán, trong đó có 3 phần với 3 lệnh MySQL như sau:
1. Phát sinh trong kỳ
2. Số dư cuối kỳ
3. Lũy kế từ đầu năm
Trong 3 lệnh trên thì lệnh MySQL của phần 1 thì chạy ok, còn 2 lệnh còn lại thì không sai nhưng nó không chạy (vì nó không hiện dữ liệu nơi em muốn dán). Mình đã kiểm tra hơn 5 ngày nay mà không ra, Nhờ các bạn kiểm tra xem code mình thiếu điều kiện gì nhé. Cảm ơn nhiều.
 
Lần chỉnh sửa cuối:
Hiện mình đang code làm sổ cái kế toán, trong đó có 3 phần với 3 lệnh MySQL như sau:
1. Phát sinh trong kỳ
2. Số dư cuối kỳ
3. Lũy kế từ đầu năm
Trong 3 lệnh trên thì lệnh MySQL của phần 1 thì chạy ok, còn 2 lệnh còn lại thì không sai nhưng nó không chạy (vì nó không hiện dữ liệu nơi em muốn dán). Mình đã kiểm tra hơn 5 ngày nay mà không ra, Nhờ các bạn kiểm tra xem code mình thiếu điều kiện gì nhé. Cảm ơn nhiều.
Nhìn code viết quen quen, bạn search bài thi 65.000 dòng của anh Tuân, trong đó tôi có viết bài tương tự.
 
Em cũng đã tham khảo rất nhiều tài liệu rồi, kiểm tra lại nhiều lần mà vẫn không hiểu được nguyên nhân mới post bài. Sau khi viết code xong Debug báo ok, khi chạy thì Debug báo vàng ngay chỗ code lrs.Open MySQL, cnn, adOpenKeyset, adLockOptimistic chỗ lệnh Mysql thứ 2 (tính số dư đầu kỳ). Em nghỉ nếu thiếu điều kiện nào đó thì Mysql thứ 1 đã không chạy rồi.
 
Em cũng đã tham khảo rất nhiều tài liệu rồi, kiểm tra lại nhiều lần mà vẫn không hiểu được nguyên nhân mới post bài. Sau khi viết code xong Debug báo ok, khi chạy thì Debug báo vàng ngay chỗ code lrs.Open MySQL, cnn, adOpenKeyset, adLockOptimistic chỗ lệnh Mysql thứ 2 (tính số dư đầu kỳ). Em nghỉ nếu thiếu điều kiện nào đó thì Mysql thứ 1 đã không chạy rồi.

Nhìn vào không hiểu chổ nào cả. Bạn làm 1 file chỉ có 1 lệnh đó đưa lên đây xem thử thế nào.
 
Dạ, tức là trong form So_SC phần Cmd_KTK_Click() có 3 lệnh Mysql chính. Trong đó lệnh Mysql thứ 1 dùng để tính số phát sinh trong kỳ (cái này khi click thì chạy ok, dữ liệu chạy đầy đủ); lệnh Mysql thứ 2 là tính số dư đầu kỳ và lệnh Mysql thứ 3 là tính lũy kế từ đầu năm (lệnh 2 và 3 thì nó không chạy); trong đó lệnh Mysql thứ 2 tính số dư đầu kỳ sau khi chạy em muốn nó dán tại ô H4 sheet So Cai để từ đó ô H5 em có đặt công thức để lấy giá trị số dư đầu kỳ của kỳ sau, tương tự phần lũy kế cũng vậy. Sorry nếu hơi rắc rối (em có thể cho em xin nick face để nói chuyện trực tiếp được không ạ?)
 
Bạn có thể kiểm tra các việc sau
1. Bạn thử kiểm tra độc lập từng lệnh SQL (có 3 lệnh) xem thế nào? Nếu chạy riêng rẽ mà ok thì có thể sau khi trả recordset về Range thì connection bị mất kết nối, bạn cần kiểm tra State có đang Open không?
2. Kiểu dữ liệu của kết quả. Nếu các trường tính toán là kiểu số thập phân, kết quả tính toán, giá trị của nó có thể vượt quá kiểu dữ liệu mà ADODB quy định, tức là nó không đưa được vào các Field của recordset. Vậy bạn có thể phải dùng hàm ROUND để ép số đơn vị thập phân ở mức phù hợp (ví dụ 2) ( SELECT ROUND(SUM(....),2),....).
 
Lần chỉnh sửa cuối:
Dạ, tức là trong form So_SC phần Cmd_KTK_Click() có 3 lệnh Mysql chính. Trong đó lệnh Mysql thứ 1 dùng để tính số phát sinh trong kỳ (cái này khi click thì chạy ok, dữ liệu chạy đầy đủ); lệnh Mysql thứ 2 là tính số dư đầu kỳ và lệnh Mysql thứ 3 là tính lũy kế từ đầu năm (lệnh 2 và 3 thì nó không chạy); trong đó lệnh Mysql thứ 2 tính số dư đầu kỳ sau khi chạy em muốn nó dán tại ô H4 sheet So Cai để từ đó ô H5 em có đặt công thức để lấy giá trị số dư đầu kỳ của kỳ sau, tương tự phần lũy kế cũng vậy. Sorry nếu hơi rắc rối (em có thể cho em xin nick face để nói chuyện trực tiếp được không ạ?)

Câu lệnh thứ 2 của bạn viết:

[GPECODE=sql]var1 = ""
var1 = var1 & "SELECT ( SUM(Iif(( TKN LIKE '1112%' ), [ST], 0)) - " & vbCrLf
var1 = var1 & " SUM(Iif(( TKC LIKE '1112%' ), [ST], 0)) ) AS SDN, " & vbCrLf
var1 = var1 & " ( SUM(Iif(( TKC LIKE '1112%' ), [ST], 0)) - " & vbCrLf
var1 = var1 & " SUM(Iif(( TKN LIKE '1112%' ), [ST], 0)) ) AS SDC " & vbCrLf
var1 = var1 & "FROM [DL] " & vbCrLf
var1 = var1 & "WHERE ( ( TKN LIKE '1112%' ) " & vbCrLf
var1 = var1 & " OR ( TKC LIKE '1112%' ) ) " & vbCrLf
var1 = var1 & " AND ( LK = '461' ) " & vbCrLf
var1 = var1 & " AND ( NCT < 41275 ) "[/GPECODE]

Câu lệnh thứ 3 bạn viết:

[GPECODE=sql]var1 = ""
var1 = var1 & "SELECT SUM(Iif(( TKN LIKE '1112%' ), [ST], 0)), " & vbCrLf
var1 = var1 & " SUM(Iif(( TKC LIKE '1112%' ), [ST], 0)) " & vbCrLf
var1 = var1 & "FROM [DL] " & vbCrLf
var1 = var1 & "WHERE ( ( TKN LIKE '1112%' ) " & vbCrLf
var1 = var1 & " OR ( TKC LIKE '1112%' ) ) " & vbCrLf
var1 = var1 & " AND ( MK LIKE '461' ) " & vbCrLf
var1 = var1 & " AND ( NCT <= 41305 ) "[/GPECODE]

Có vẻ không ổn, vì đk của bạn đưa ra không thỏa điều kiện với dl của bạn???
 
Em kiểm tra sáng giờ thấy có chỗ nào không thõa đk đâu anh? Nếu code sai sót thì Debug đã báo rồi, hoặc nếu sai thì ít ra CopyFromRecordset sẽ hiện giá trị sai nơi ô em muốn copy (ô H4 sheet So Cai). Em chỉ không hiểu tại sao lệnh lrs.Open MySQL, cnn, adOpenKeyset, adLockOptimistic nó không chạy, không biết có thiếu điều kiện gì nữa không!?
 
Em kiểm tra sáng giờ thấy có chỗ nào không thõa đk đâu anh? Nếu code sai sót thì Debug đã báo rồi, hoặc nếu sai thì ít ra CopyFromRecordset sẽ hiện giá trị sai nơi ô em muốn copy (ô H4 sheet So Cai). Em chỉ không hiểu tại sao lệnh lrs.Open MySQL, cnn, adOpenKeyset, adLockOptimistic nó không chạy, không biết có thiếu điều kiện gì nữa không!?
Tôi tạm chỉnh cho bạn như sau:

[GPECODE=sql]'Tinh so du dau
MySQL = ""
MySQL = MySQL & "SELECT ( SUM(Iif(( TKN LIKE '1111%' ), [ST], 0)) - " & vbCrLf
MySQL = MySQL & " SUM(Iif(( TKC LIKE '1111%' ), [ST], 0)) ) AS SDN, " & vbCrLf
MySQL = MySQL & " ( SUM(Iif(( TKC LIKE '1111%' ), [ST], 0)) - " & vbCrLf
MySQL = MySQL & " SUM(Iif(( TKN LIKE '1111%' ), [ST], 0)) ) AS SDC " & vbCrLf
MySQL = MySQL & "FROM DL " & vbCrLf
MySQL = MySQL & "WHERE ( ( ( DL.[TKN] ) LIKE '1111%' ) " & vbCrLf
MySQL = MySQL & " AND ( ( DL.LK ) LIKE '463%' ) " & vbCrLf
MySQL = MySQL & " AND ( ( DL.NCT ) <# 1 / 1 / 2013# ) ) " & vbCrLf
MySQL = MySQL & " OR (( ( DL.[TKC] ) LIKE '1111%' ))"[/GPECODE]

[GPECODE=sql]'Tinh luy ke
MySQL = ""
MySQL = MySQL & "SELECT SUM(( Iif(( [TKN] LIKE '1111%' ), [ST], 0) )), " & vbCrLf
MySQL = MySQL & " SUM(( Iif(( [TKC] LIKE '1111%' ), [ST], 0) )) " & vbCrLf
MySQL = MySQL & "FROM DL " & vbCrLf
MySQL = MySQL & "WHERE (( ( [TKN] ) LIKE '1111%' )) " & vbCrLf
MySQL = MySQL & " OR ( ( ( [TKC] ) LIKE '1111%' ) " & vbCrLf
MySQL = MySQL & " AND ( ( [LK] ) LIKE '463' ) " & vbCrLf
MySQL = MySQL & " AND ( ( [NCT] ) <=# 1 / 31 / 2013# ) )"[/GPECODE]

Lưu ý: Về cái chuổi để đưa đk lọc bạn tự cho vào ở trên nhé.
 
Cám ơn các anh đã giúp đỡ em trong bài này, em đã nhờ cao thủ VBA giúp và lệnh lrs.Open MySQL, Cnn, adOpenKeyset, adLockOptimistic phần tính số dư đầu kỳ đã chạy, mặc dù các code và lệnh không thay đổi. Cuối cùng là nó thiếu điều kiện gì để lệnh lrs.Open MySQL, Cnn, adOpenKeyset, adLockOptimistic có thể chạy được vậy các anh?
 
Em kiểm tra trong lệnh lrs.Open MySQL, Cnn, adOpenKeyset, adLockOptimistic (nơi Debug báo lỗi màu vàng) thì nguyên nhân phần công thức trên không chạy là operation is not allowed when the object is closed (em tạm hiểu là lệnh không chạy khi đối tượng đã đóng). Các anh có biết khắc phục chỗ nào để có thể mở ra cho nó kết nối cơ sở dữ liệu tiếp tục được không ạ!? Vì cao thủ giúp em trước đó không biết làm cách nào cho nó chạy mà code không hề thay đổi.
 
Ngày nào cũng vào chờ chực theo dõi bài, mong ai đó chỉ bảo để có thể nâng cao kiến thức, nhưng ngày qua ngày vẫn là vậy. Không biết mình mong chờ điều gì.
 
Ngày nào cũng vào chờ chực theo dõi bài, mong ai đó chỉ bảo để có thể nâng cao kiến thức, nhưng ngày qua ngày vẫn là vậy. Không biết mình mong chờ điều gì.

Bài viết trước của tôi hình như bạn không đọc và cũng không trả lời lại tôi là thế nào. Tôi cũng đã định dành thời gian tìm lỗi cùng bạn nhưng vì bạn không có ý kiến gì nên tôi cũng đành gác lại.
 
Theo như bạn HLMT đã nói, với dữ liệu như thế và câu lệnh truy cập như thế thì sẽ chả ra một record nào cả.
Bạn kiểm tra bằng cách nào vậy?

tb. code của bạn đặt tên biến là MySQL trông nó rợn người quá. MySQL là tên hê thống CSDL của Oracle. Thoạt đầu nhìn thấy cái tiêu đề này, mấy người yếu bóng vía như tôi ngỡ là đồ cao cấp nên không dám vào. Mãi về sau tình cờ trông thấy cái tên biến mới biết.
 
Bài viết trước của tôi hình như bạn không đọc và cũng không trả lời lại tôi là thế nào. Tôi cũng đã định dành thời gian tìm lỗi cùng bạn nhưng vì bạn không có ý kiến gì nên tôi cũng đành gác lại.
Cảm ơn bạn, thật ra mình có đọc và thực hành theo sự hướng dẫn của bạn nhưng kết quả không đổi nên mình không biết phải phản hồi như thế nào.
 
Theo như bạn HLMT đã nói, với dữ liệu như thế và câu lệnh truy cập như thế thì sẽ chả ra một record nào cả.
Bạn kiểm tra bằng cách nào vậy?

tb. code của bạn đặt tên biến là MySQL trông nó rợn người quá. MySQL là tên hê thống CSDL của Oracle. Thoạt đầu nhìn thấy cái tiêu đề này, mấy người yếu bóng vía như tôi ngỡ là đồ cao cấp nên không dám vào. Mãi về sau tình cờ trông thấy cái tên biến mới biết.
Anh HLMT cũng đặt 1 câu nghi vấn thôi chứ không dám khẳng định và người giúp mình đã làm cho nó chạy với code không đổi. Còn cái tên biến Mysql thì xin lỗi mình không biết gọi nó là gì nên đặt tiêu đề như vậy thôi, cảm ơn bạn đã nhắc nhở.
 
Cảm ơn bạn, thật ra mình có đọc và thực hành theo sự hướng dẫn của bạn nhưng kết quả không đổi nên mình không biết phải phản hồi như thế nào.

Thì phản hồi là: "kết quả thế này thế này", chứ sao lại không biết phản hồi?
Lờ đi thì ai biết được.

Anh HLMT cũng đặt 1 câu nghi vấn thôi chứ không dám khẳng định và người giúp mình đã làm cho nó chạy với code không đổi. Còn cái tên biến Mysql thì xin lỗi mình không biết gọi nó là gì nên đặt tiêu đề như vậy thôi, cảm ơn bạn đã nhắc nhở.

Thế sao bạn không hỏi thêm người "đã làm cho nó chạy" là họ có làm gì không, nếu có thì làm gì?
 
Mình không biết nói sao cho bạn hiểu, người giúp mình rất bận. Mới đầu mình có hỏi nhưng mãi mới trả lời, mà hỏi nhiều quá thì gây phiền phức mình cũng ngại, chứ nếu nhiệt tình thì mình đâu có phải post bài và ngồi chờ từng ngày như thế này.
 
Mình không biết nói sao cho bạn hiểu, người giúp mình rất bận. Mới đầu mình có hỏi nhưng mãi mới trả lời, mà hỏi nhiều quá thì gây phiền phức mình cũng ngại, chứ nếu nhiệt tình thì mình đâu có phải post bài và ngồi chờ từng ngày như thế này.

Úi trời, người giúp bạn cho nó chạy là xem như thắc mắc của bạn đã xong. Hãy dò code ban đầu của bạn + với code mà "người đã làm cho nó chạy" xem koi khác chổ nào thì là chổ đó. Nói cho bạn biết luôn, muốn giúp cũng không biết giúp cái gì nữa trong khi bạn đã có đáp án.
 
Ok, nó chạy nhưng lý do là gì và đó là điều mình muốn biết, mình không hề phàn nàn ai điều gì vì mình là người cần giúp. Nhưng thật là ích kỷ khi chỉ bảo ai đó cần học hỏi mà phải cạnh khóe họ như thể ban ơn. Nếu mọi người đã nói vậy thì mình xin phép close topic tại đây và xin cảm ơn các bạn đã giúp!
 
Web KT

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

Back
Top Bottom