Having become incredibly rusty I was given some SQL to turn into a Macro and have made the below which unlike its original SQL doesn't produce any result.
The VBA is a rehash of most of my old tricks learned ages ago and it runs, yet produces no result, yet running the original SQL, with the same CRN involved, gets over a hundred rows of results.
What am I not seeing?
Sub Balance()
Dim DB_CONNECTION As ADODB.Connection
Dim DB_RECORDSET As ADODB.Recordset
Dim CRN As Variant
Dim ANSWER As String
Dim SQL_STRING As String
Application.DisplayStatusBar = False
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.ScreenUpdating = True
Application.ScreenUpdating = False
Application.DisplayAlerts = False
ActiveSheet.Name = "Data"
Set DB_CONNECTION = New ADODB.Connection
Set DB_RECORDSET = New ADODB.Recordset
DB_CONNECTION.ConnectionString = "Driver={Oracle in OraClient18Home1_32bit}; Dbq=XXXXX; Uid=USER; Pwd=XXXXXXXX;QTO=F;"
DB_CONNECTION.Open
Sheets("Data").Activate
Range("A5").Select
CRN = ActiveCell.Value
SQL_STRING = ""
SQL_STRING = SQL_STRING + "SELECT * "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "(SELECT DISTINCT tran.bill_no AS ""IINV/BILL#"", tran.date_posted AS ""DATE POSTED"", "
SQL_STRING = SQL_STRING + "DECODE(tran.trans_type, '60', 'BILLING_CHARGES', '50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80', "
SQL_STRING = SQL_STRING + " 'WRITE_OFF', 'OTHER') AS ""TRANSACTION TYPE"", "
SQL_STRING = SQL_STRING + "CASE WHEN tran.batch LIKE ( 'EF%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'ef%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tran.batch = 'CB%' THEN 'BPAY' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'CQ%' ) THEN 'CHEQUE' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'ECS%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'ecs%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'bp%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tran.batch LIKE ( 'BP%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "END AS ""PAYMENT TYPE"", "
SQL_STRING = SQL_STRING + "SUM(tran.trans_value) AS debit, 0 AS credit "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "bcsttran tran "
SQL_STRING = SQL_STRING + "WHERE tran.u##cust_ref = 'CRN' "
SQL_STRING = SQL_STRING + "Group BY tran.bill_no, tran.date_posted, "
SQL_STRING = SQL_STRING + "tran.u##cust_ref,tran.trans_type,tran.batch) tbl1 "
SQL_STRING = SQL_STRING + "WHERE "
SQL_STRING = SQL_STRING + " tbl1.debit > 0 Union ALL "
SQL_STRING = SQL_STRING + "SELECT tbl2.bill_no,tbl2.date_billed,tbl2.bill_type, "
SQL_STRING = SQL_STRING + "CASE WHEN tbl2.batch LIKE ( 'EF%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ef%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'CQ%' ) THEN 'CHEQUE' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ef%' ) THEN 'EFT_PAYMENT' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'CB%' ) THEN 'BPAY' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ECS%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'ecs%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'bp%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "WHEN tbl2.batch LIKE ( 'BP%' ) THEN 'AUSTRALIA_POST' "
SQL_STRING = SQL_STRING + "END AS ""Payment Type"", "
SQL_STRING = SQL_STRING + "tbl2.debit, abs(tbl2.credit) AS credit "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "( SELECT DISTINCT tran.u##cust_ref,tran.bill_no, "
SQL_STRING = SQL_STRING + "DECODE(tran.trans_type, '60', 'BILLING_CHARGES', "
SQL_STRING = SQL_STRING + "'50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80', "
SQL_STRING = SQL_STRING + "'WRITE_OFF', 'OTHER') AS bill_type, "
SQL_STRING = SQL_STRING + "tran.date_posted AS date_billed, "
SQL_STRING = SQL_STRING + "0 AS debit, "
SQL_STRING = SQL_STRING + "SUM(tran.trans_value) AS credit, tran.batch "
SQL_STRING = SQL_STRING + "FROM "
SQL_STRING = SQL_STRING + "bcsttran tran "
SQL_STRING = SQL_STRING + "WHERE "
SQL_STRING = SQL_STRING + "tran.u##cust_ref = 'CRN' "
SQL_STRING = SQL_STRING + "Group BY tran.u##cust_ref, tran.bill_no, "
SQL_STRING = SQL_STRING + "tran.date_posted,tran.batch, "
SQL_STRING = SQL_STRING + "tran.trans_type,tran.u##trans_code) tbl2 "
SQL_STRING = SQL_STRING + "WHERE "
SQL_STRING = SQL_STRING + "tbl2.credit < 0 "
SQL_STRING = SQL_STRING + "Order BY 2 DESC, 3 DESC "
DB_RECORDSET.Open SQL_STRING, DB_CONNECTION
Sheets("Balances").Select
Sheets("Balances").Range("A1").CopyFromRecordset DB_RECORDSET
DB_RECORDSET.Close
End Sub
Original Query is
SELECT
*
FROM
(
SELECT DISTINCT
tran.bill_no AS "IINV/BILL#",
tran.date_posted AS "DATE POSTED",
DECODE(tran.trans_type, '60', 'BILLING_CHARGES', '50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80',
'WRITE_OFF', 'OTHER') AS "TRANSACTION TYPE",
CASE
WHEN tran.batch LIKE ( 'EF%' ) THEN
'EFT_PAYMENT'
WHEN tran.batch LIKE ( 'ef%' ) THEN
'EFT_PAYMENT'
WHEN tran.batch = 'CB%' THEN
'BPAY'
WHEN tran.batch LIKE ( 'CQ%' ) THEN
'CHEQUE'
WHEN tran.batch LIKE ( 'ECS%' ) THEN
'AUSTRALIA_POST'
WHEN tran.batch LIKE ( 'ecs%' ) THEN
'AUSTRALIA_POST'
WHEN tran.batch LIKE ( 'bp%' ) THEN
'AUSTRALIA_POST'
WHEN tran.batch LIKE ( 'BP%' ) THEN
'AUSTRALIA_POST'
END AS "PAYMENT TYPE",
SUM(tran.trans_value) AS debit,
0 AS credit
FROM
bcsttran tran
WHERE
tran.u##cust_ref = '10423949'
GROUP BY
tran.bill_no,
tran.date_posted,
tran.u##cust_ref,
tran.trans_type,
tran.batch
) tbl1
WHERE
tbl1.debit > 0
UNION ALL
SELECT
tbl2.bill_no,
tbl2.date_billed,
tbl2.bill_type,
CASE
WHEN tbl2.batch LIKE ( 'EF%' ) THEN
'EFT_PAYMENT'
WHEN tbl2.batch LIKE ( 'ef%' ) THEN
'EFT_PAYMENT'
WHEN tbl2.batch LIKE ( 'CQ%' ) THEN
'CHEQUE'
WHEN tbl2.batch LIKE ( 'ef%' ) THEN
'EFT_PAYMENT'
WHEN tbl2.batch LIKE ( 'CB%' ) THEN
'BPAY'
WHEN tbl2.batch LIKE ( 'ECS%' ) THEN
'AUSTRALIA_POST'
WHEN tbl2.batch LIKE ( 'ecs%' ) THEN
'AUSTRALIA_POST'
WHEN tbl2.batch LIKE ( 'bp%' ) THEN
'AUSTRALIA_POST'
WHEN tbl2.batch LIKE ( 'BP%' ) THEN
'AUSTRALIA_POST'
END AS "Payment Type",
tbl2.debit,
abs(tbl2.credit) AS credit
FROM
(
SELECT DISTINCT
tran.u##cust_ref,
tran.bill_no,
DECODE(tran.trans_type, '60', 'BILLING_CHARGES', '50', 'ADJUSTMENT/INTEREST', '10', 'RECEIPTS', '40', 'REFUND', '80',
'WRITE_OFF', 'OTHER') AS bill_type,
tran.date_posted AS date_billed,
0 AS debit,
SUM(tran.trans_value) AS credit,
tran.batch
FROM
bcsttran tran
WHERE
tran.u##cust_ref = '10423949'
GROUP BY
tran.u##cust_ref,
tran.bill_no,
tran.date_posted,
tran.batch,
tran.trans_type,
tran.u##trans_code
) tbl2
WHERE
tbl2.credit < 0
ORDER BY
2 DESC,
3 DESC
The formatting of the Query is basically consistent with another Query I have converted into a Macro but given it uses the Case Statements I am not sure if there is an issue with how VBA handles it