Here are the heavy lifting SQL bits for a MoneyLink -like Transactions query from a Money file converted to .MDB via Jackcess/Jackcess Encrypt/Sunshiine Money Export. I have not tried to split the code for DAO/ADODB, so both codebases are shown here. I developed the queries in DAO/ADE in Access and use a tool and some data there to generate a code fragment, from which this is an edited extract, that I paste into the VB VisualStudio code. Note that this includes Transactions support beyond what MoneyLink does, including dumps of Class1/Class2, Flags, TaxYear, and the top transaction including Memo from split transactions. There may be some other inclusions beyond MoneyLink that I'm forgetting just now. If you stripped out, say, the DAO pieces here, and created Access stored Queries in a .MDB file dumped from the toolchain noted above, you could see how this produces a recordset with Money data that looks a lot like the Excel output of MoneyLink.
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
'
' code auto-generated from Access
'
' for: codegen("SqlDefs","GetSql")
'
' source: mmd development support.accdb
' last generated: 20240323 08:34
'
'<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
' SQL used in queries/subqueries for each query class, generated in
' inverse dependency order; i.e., most prerequisite subquery last
...
ElseIf qryClass = MmdQcls.Transaction Then
strName = "Transactions"
#If dbAPI = "DAO" Then
strSql = "PARAMETERS paramAcct Text ( 255 ), paramDtFrom DateTime, paramDtTo DateTime, paramBankCash Bit, paramIncludeParents Bit;" & vbNewLine
#ElseIf dbAPI = "ADODB" Then
strSql = "CREATE PROCEDURE Transactions (paramAcct Text ( 255 ), paramDtFrom DateTime, paramDtTo DateTime, paramBankCash Bit, paramIncludeParents Bit) AS " & vbNewLine
#End If
strSql &= "SELECT IIf(Len([TRN].[szid])>0,LTrim(Right([TRN].[szId],Len([TRN].[szId])-1)),Null) AS [Number], TRN.dt AS dtDate, ACCT.szFull AS Account, PAY.szFull AS Payee, IIf([TRN].[mFiStmtId] Is Null And [TRN_parent].[mfiStmtId] Is Null And [Trn_xfermFiStmtId].[mFiStmtId] Is Null,[TRN].[cs],3) AS CState, IIf([TRN].[ps]=1 Or [TRN].[ps]=5 Or [TRN].[ps]=6,[TRN].[ps],IIf((([grftt]\(2^19)) Mod 2)=1,7,IIf([Trn_InvDetails].[act]=1,8,IIf(Not [Trn_InvDetails].[act] Is Null,9,Null)))) AS SpecialTrans, ACCT_link.szFull AS LinkAccount, Trn_InvDetails.szFull AS Investment, IIf([TRN_parent].[PS]=1,[TRN].[ps],Null) AS PayTab, CRNC.szIsoCode AS CurrIsoCode, TRN.amt AS Amt, Cat.t1 AS Category, Cat.t2 AS Subcategory, Cls1.t1 AS Class1, Cls1.t2 AS Subclass1, Cls2.t1 AS Class2, Cls2.t2 AS Subclass2, TRN.mMemo AS [Memo], Trn_xbagTaxYears.TaxYear AS TaxYear, Not [Trn_xbagFlags].[lHtrn]" & vbNewLine
strSql &= "Is Null AS IsFlagged, Trn_xbagFlags.flagtext AS FlagText, Trn_xbagFlags.followup AS FollowUp, Trn_xbagAttachments.attachment AS URI, (([TRN].[grftt]\(2^8)) Mod 2)=1 AS IsVoid, [TRN].[grftt]\(2^5) Mod 2=1 AS IsParent, [TRN].[grftt]\(2^6) Mod 2=1 AS IsChild, IIf(Not [TRN].[hacctLink] Is Null And [ACCT_link].[at]=5,IIf([ACCT_link].[hacctRel] Is Null,False,[TRN].[hacct]=[ACCT_link].[hacctRel]),Null) AS LinkAcctIsAcctInvAcct, CRNC.lcid, Trn_InvDetails.sct AS id_sct, Trn_InvDetails.t1 AS id_Category, Trn_InvDetails.t2 AS id_Subcategory, Trn_InvDetails.act AS id_act, Trn_InvDetails.dPrice AS id_price, IIf([Trn_InvDetails].[htrnInvDetails] Is Null,Null,[Trn_InvDetails].[IsSplitPrice]) AS id_IsSplitPrice, Trn_InvDetails.szIsoCode AS id_CurrIsoCode, Trn_InvDetails.lcid AS id_lcid, Trn_InvDetails.qty AS id_qty" & vbNewLine
strSql &= "FROM (((((((((((((TRN LEFT JOIN ACCT ON TRN.hacct = ACCT.hacct) LEFT JOIN PAY ON TRN.lHpay = PAY.hpay) INNER JOIN CRNC ON TRN.lHcrncUser = CRNC.hcrnc) LEFT JOIN ACCT AS ACCT_link ON TRN.hacctLink = ACCT_link.hacct) LEFT JOIN Trn_CatCls AS Cls1 ON TRN.lHcls1 = Cls1.hcat) LEFT JOIN Trn_CatCls AS Cls2 ON TRN.lHcls2 = Cls2.hcat) LEFT JOIN Trn_CatCls AS Cat ON TRN.hcat = Cat.hcat) LEFT JOIN Trn_xbagTaxYears ON TRN.htrn = Trn_xbagTaxYears.lHtrn) LEFT JOIN Trn_xbagAttachments ON TRN.htrn = Trn_xbagAttachments.lHtrn) LEFT JOIN Trn_xbagFlags ON TRN.htrn = Trn_xbagFlags.lHtrn) LEFT JOIN TRN_SPLIT ON TRN.htrn = TRN_SPLIT.htrn) LEFT JOIN (SELECT htrn, ps, mFiStmtId FROM TRN) AS Trn_parent ON TRN_SPLIT.htrnParent = Trn_parent.htrn) LEFT JOIN Trn_InvDetails ON TRN.htrn = Trn_InvDetails.htrnInvDetails) LEFT JOIN Trn_xfermFiStmtId ON TRN.htrn = Trn_xfermFiStmtId.htrnFrom" & vbNewLine
strSql &= "WHERE (((TRN.dt)>=[paramDtFrom]) AND (([TRN].[grftt]\2^14 Mod 2+[TRN].[grftt]\2^17 Mod 2+[TRN].[grftt]\2^18 Mod 2+[TRN].[grftt]\2^21 Mod 2)=0) AND ((IIf([TRN].[grftt]\(2^5) Mod 2,IIf([paramIncludeParents],True,False),True))=True) AND ((IIf([paramDtTo]<=#12/31/2200# And [TRN].[dt]<=[paramDtTo],True,IIf([paramDtTo]>#12/31/2200#,True,False)))=True) AND ((IIf([paramAcct]='*',True,IIf([ACCT].[szFull] Like [paramAcct] And (([paramBankCash] And [ACCT].[ast]=0) Or (Not [paramBankCash] And [ACCT].[ast]=2)),True,False)))=True) AND (([TRN].[hacct] Is Null Or [ACCT].[ast]=0 Or [ACCT].[ast]=2)=True))" & vbNewLine
strSql &= "ORDER BY TRN.dt, Right([TRN].[szId],10), IIf([paramIncludeParents],IIf([TRN_SPLIT].[htrnParent] Is Null,[TRN].[htrn],[TRN_SPLIT].[htrnParent]),[TRN].[htrn]), IIf([TRN_parent].[PS]=1,Choose([TRN].[ps]+1,0,Null,4,1,2),Null), IIf([paramIncludeParents],IIf([TRN].[grftt]\(2^5) Mod 2,-1,[TRN_SPLIT].[iSplit]),Null);" & vbNewLine
lst.Add(New SqlDef(strName, strSql))
Else
Debug.Fail("enexpected qryClass requested")
SharedState.AppLog.LogBug("enexpected qryClass requested")
End If
...
If qryClass = MmdQcls.Transaction Then
strName = "Trn_xbagAttachments"
#If dbAPI = "DAO" Then
strSql = "SELECT XBAG.lHobj AS lHtrn, XBAG.szMemo AS attachment" & vbNewLine
#ElseIf dbAPI = "ADODB" Then
strSql = "CREATE PROCEDURE Trn_xbagAttachments AS SELECT XBAG.lHobj AS lHtrn, XBAG.szMemo AS attachment" & vbNewLine
#End If
strSql &= "FROM XBAG" & vbNewLine
strSql &= "WHERE (((XBAG.bt)=13) AND ((XBAG.tbl)=-4036));" & vbNewLine
lst.Add(New SqlDef(strName, strSql))
End If
If qryClass = MmdQcls.Transaction Then
strName = "Trn_xbagFlags"
#If dbAPI = "DAO" Then
strSql = "SELECT XBAG.lHobj AS lHtrn, XBAG.szMemo AS flagtext, IIf([dtFollowup]<#12/30/9999#,[dtfollowup],Null) AS followup" & vbNewLine
#ElseIf dbAPI = "ADODB" Then
strSql = "CREATE PROCEDURE Trn_xbagFlags AS SELECT XBAG.lHobj AS lHtrn, XBAG.szMemo AS flagtext, IIf([dtFollowup]<#12/30/9999#,[dtfollowup],Null) AS followup" & vbNewLine
#End If
strSql &= "FROM XBAG" & vbNewLine
strSql &= "WHERE (((XBAG.bt)=0) AND ((XBAG.tbl)=-4036));" & vbNewLine
lst.Add(New SqlDef(strName, strSql))
End If
If qryClass = MmdQcls.Transaction Then
strName = "Trn_xbagTaxYears"
#If dbAPI = "DAO" Then
strSql = "SELECT XBAG.lHobj AS lHtrn, XBAG.grf AS TaxYear" & vbNewLine
#ElseIf dbAPI = "ADODB" Then
strSql = "CREATE PROCEDURE Trn_xbagTaxYears AS SELECT XBAG.lHobj AS lHtrn, XBAG.grf AS TaxYear" & vbNewLine
#End If
strSql &= "FROM XBAG" & vbNewLine
strSql &= "WHERE (((XBAG.bt)=11) AND ((XBAG.tbl)=-4036));" & vbNewLine
lst.Add(New SqlDef(strName, strSql))
End If
If qryClass = MmdQcls.InvTransaction Or qryClass = MmdQcls.Transaction Then
strName = "Trn_xfermFiStmtId"
#If dbAPI = "DAO" Then
strSql = "SELECT TRN_XFER.htrnFrom, IIf(Not [Trn_parent].[mFiStmtId] Is Null,[TRN_parent].[mFiStmtId],[TRN].[mFiStmtId]) AS mFiStmtId" & vbNewLine
#ElseIf dbAPI = "ADODB" Then
strSql = "CREATE PROCEDURE Trn_xfermFiStmtId AS SELECT TRN_XFER.htrnFrom, IIf(Not [Trn_parent].[mFiStmtId] Is Null,[TRN_parent].[mFiStmtId],[TRN].[mFiStmtId]) AS mFiStmtId" & vbNewLine
#End If
strSql &= "FROM ((TRN_XFER INNER JOIN TRN ON TRN_XFER.htrnLink = TRN.htrn) LEFT JOIN TRN_SPLIT ON TRN.htrn = TRN_SPLIT.htrn) LEFT JOIN TRN AS Trn_Parent ON TRN_SPLIT.htrnParent = Trn_Parent.htrn" & vbNewLine
strSql &= "WHERE ((Not (IIf(Not [Trn_parent].[mFiStmtId] Is Null,[TRN_parent].[mFiStmtId],[TRN].[mFiStmtId])) Is Null));" & vbNewLine
lst.Add(New SqlDef(strName, strSql))
End If
...
If qryClass = MmdQcls.Bill Or qryClass = MmdQcls.Transaction Then
strName = "Trn_InvDetails"
#If dbAPI = "DAO" Then
strSql = "SELECT IIf([TRN_XFER].[htrnFrom] Is Null,[TRN_XFER_1].[htrnFrom],[TRN_XFER].[htrnLink]) AS htrnInvDetails, TRN.act, SEC.sct, SEC.szFull, Trn_CatCls.t1, Trn_CatCls.t2, TRN_INV.dPrice, IIf(CLng([SEC].[dtSplit])=2958524,False,[TRN].[dt]<[SEC].[dtSplit]) AS IsSplitPrice, CRNC.szIsoCode, CRNC.lcid, TRN_INV.qty" & vbNewLine
#ElseIf dbAPI = "ADODB" Then
strSql = "CREATE PROCEDURE Trn_InvDetails AS SELECT IIf([TRN_XFER].[htrnFrom] Is Null,[TRN_XFER_1].[htrnFrom],[TRN_XFER].[htrnLink]) AS htrnInvDetails, TRN.act, SEC.sct, SEC.szFull, Trn_CatCls.t1, Trn_CatCls.t2, TRN_INV.dPrice, IIf(CLng([SEC].[dtSplit])=2958524,False,[TRN].[dt]<[SEC].[dtSplit]) AS IsSplitPrice, CRNC.szIsoCode, CRNC.lcid, TRN_INV.qty" & vbNewLine
#End If
strSql &= "FROM (((((TRN LEFT JOIN TRN_INV ON TRN.htrn = TRN_INV.htrn) INNER JOIN SEC ON TRN.hsec = SEC.hsec) LEFT JOIN Trn_CatCls ON TRN.hcat = Trn_CatCls.hcat) INNER JOIN CRNC ON SEC.hcrnc = CRNC.hcrnc) LEFT JOIN TRN_XFER ON TRN.htrn = TRN_XFER.htrnFrom) LEFT JOIN TRN_XFER AS TRN_XFER_1 ON TRN.htrn = TRN_XFER_1.htrnLink" & vbNewLine
strSql &= "WHERE ((Not (IIf([TRN_XFER].[htrnFrom] Is Null,[TRN_XFER_1].[htrnFrom],[TRN_XFER].[htrnLink])) Is Null));" & vbNewLine
lst.Add(New SqlDef(strName, strSql))
End If
...
If qryClass = MmdQcls.Bill Or qryClass = MmdQcls.InvTransaction Or qryClass = MmdQcls.Transaction Then
strName = "Trn_CatCls"
#If dbAPI = "DAO" Then
strSql = "SELECT CAT.hcat, IIf(([CAT].[hct]=0 And [CAT].[nLevel]=2) Or ([CAT].[hct]<>0 And [CAT].[nLevel]=1),[CAT_parent].[szFull],IIf(Not ([CAT].[hct]=0 And [CAT].[nLevel]=0),[CAT].[szFull],Null)) AS t1, IIf(([CAT].[hct]=0 And [CAT].[nLevel]=2) Or ([CAT].[hct]<>0 And [CAT].[nLevel]=1),[CAT].[szFull],Null) AS t2" & vbNewLine
#ElseIf dbAPI = "ADODB" Then
strSql = "CREATE PROCEDURE Trn_CatCls AS SELECT CAT.hcat, IIf(([CAT].[hct]=0 And [CAT].[nLevel]=2) Or ([CAT].[hct]<>0 And [CAT].[nLevel]=1),[CAT_parent].[szFull],IIf(Not ([CAT].[hct]=0 And [CAT].[nLevel]=0),[CAT].[szFull],Null)) AS t1, IIf(([CAT].[hct]=0 And [CAT].[nLevel]=2) Or ([CAT].[hct]<>0 And [CAT].[nLevel]=1),[CAT].[szFull],Null) AS t2" & vbNewLine
#End If
strSql &= "FROM CAT LEFT JOIN CAT AS CAT_parent ON CAT.hcatParent = CAT_parent.hcat;" & vbNewLine
lst.Add(New SqlDef(strName, strSql))
End If
...
'>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>