home *** CD-ROM | disk | FTP | other *** search
/ Planet Source Code Jumbo …e CD Visual Basic 1 to 7 / 4_2005-2006.ISO / data / Zips / BlackVault1889675192005.psc / clsSQL.cls < prev    next >
Text File  |  2005-05-19  |  36KB  |  849 lines

  1. VERSION 1.0 CLASS
  2. BEGIN
  3.   MultiUse = -1  'True
  4.   Persistable = 0  'NotPersistable
  5.   DataBindingBehavior = 0  'vbNone
  6.   DataSourceBehavior  = 0  'vbNone
  7.   MTSTransactionMode  = 0  'NotAnMTSObject
  8. END
  9. Attribute VB_Name = "clsSQL"
  10. Attribute VB_GlobalNameSpace = False
  11. Attribute VB_Creatable = True
  12. Attribute VB_PredeclaredId = False
  13. Attribute VB_Exposed = False
  14. Option Explicit
  15.  
  16. Public Function PraseSQL(SQL As String, WasERROR As Boolean, ERROR As String, Optional CTable As String) As String
  17. Select Case Left(Trim(UCase(SQL)), 6)
  18.     Case "SELECT"
  19.         PraseSQL = PraseStatment(SQL, 0, WasERROR, ERROR, CTable)
  20.     Case "DELETE"
  21.         PraseSQL = PraseStatment(SQL, 1, WasERROR, ERROR, CTable)
  22.     Case "UPDATE"
  23.         PraseSQL = PraseStatment(SQL, 2, WasERROR, ERROR, CTable)
  24.     Case Else
  25.         WasERROR = True
  26.         ERROR = DisplayError(2001) 'Incorrect statment
  27.         PraseSQL = "<error>"
  28.         Exit Function
  29. End Select
  30. End Function
  31.  
  32.  
  33. Private Function PraseStatment(SQL As String, StatType As Integer, WasERROR As Boolean, ERROR As String, Optional CTable As String) As String
  34. Dim i As Integer
  35. Dim MainStat As String
  36. Dim FroPos As Integer
  37. Dim WhePos As Integer
  38. Dim OrdPos As Integer
  39.  
  40. Dim IsWheStat As Boolean
  41. Dim WheStat As String
  42.  
  43. Dim IsOrdStat As Boolean
  44. Dim OrdStat As String
  45.  
  46. Dim ContainsRel As Boolean
  47.  
  48. 'Used to check if the SELECT and Where statment is valid
  49. Dim SBOpened As Boolean
  50. Dim RBOpened As Integer
  51. Dim QOpened As Boolean
  52.  
  53. Dim TName As String
  54. Dim OTable As Boolean
  55. Dim FName As String
  56. Dim Condition As String
  57.  
  58. Dim IType As Integer            'Used for the where statments
  59.  
  60. 'Used to check if the FROM statment is valid
  61. Dim FroStat As String
  62. Dim FroTab() As String
  63. Dim FroCount As Integer
  64.  
  65.  
  66. ContainsRel = False
  67.  
  68. If ContainsText("FROM ", UCase(SQL)) = False Then
  69.     WasERROR = True
  70.     ERROR = DisplayError(2002)      'No from statment
  71.     PraseStatment = "<error>"
  72.     Exit Function
  73. End If
  74.  
  75. If ContainsText("WHERE ", UCase(SQL)) = True Then
  76.     IsWheStat = True
  77. End If
  78.  
  79. If ContainsText("ORDER ", UCase(SQL)) = True Then
  80.     IsOrdStat = True
  81. End If
  82.  
  83. If IsWheStat = False And IsOrdStat = False Then
  84.     FroPos = FindPosition(1, "FROM ", UCase(SQL))
  85.     MainStat = Trim(Mid(SQL, 8, FroPos - 9))
  86.     FroStat = Trim(Mid(SQL, FroPos + 5, Len(SQL) - FroPos - 5))
  87. End If
  88.  
  89. If IsWheStat = True And IsOrdStat = False Then
  90.     FroPos = FindPosition(1, "FROM ", UCase(SQL))
  91.     WhePos = FindPosition(FroPos, "WHERE ", UCase(SQL))
  92.     MainStat = Trim(Mid(SQL, 8, FroPos - 9))
  93.     FroStat = Trim(Mid(SQL, FroPos + 5, WhePos - FroPos - 6))
  94.     WheStat = Trim(Mid(SQL, WhePos + 6, Len(SQL) - 7))
  95. End If
  96.  
  97. If IsWheStat = True And IsOrdStat = True Then
  98.     FroPos = FindPosition(1, "FROM ", UCase(SQL))
  99.     WhePos = FindPosition(FroPos, "WHERE ", UCase(SQL))
  100.     OrdPos = FindPosition(WhePos, "ORDER ", UCase(SQL))
  101.     MainStat = Trim(Mid(SQL, 8, FroPos - 9))
  102.     FroStat = Trim(Mid(SQL, FroPos + 5, WhePos - FroPos - 6))
  103.     WheStat = Trim(Mid(SQL, WhePos + 6, OrdPos - WhePos - 7))
  104.     OrdStat = Trim(Mid(SQL, OrdPos + 7, Len(SQL) - OrdPos - 6))
  105. End If
  106.  
  107. If IsWheStat = False And IsOrdStat = True Then
  108.     FroPos = FindPosition(1, "FROM ", UCase(SQL))
  109.     OrdPos = FindPosition(FroPos, "ORDER ", UCase(SQL))
  110.     MainStat = Trim(Mid(SQL, 8, FroPos - 9))
  111.     FroStat = Trim(Mid(SQL, FroPos + 5, OrdPos - FroPos - 6))
  112.     OrdStat = Trim(Mid(SQL, OrdPos + 7, Len(SQL) - OrdPos - 6))
  113. End If
  114.  
  115. SBOpened = False
  116. RBOpened = 0
  117. QOpened = False
  118.  
  119. OTable = True
  120. If Trim(MainStat) <> "*" Then
  121.     For i = 1 To Len(MainStat)                      'Loops through the main statment looking for errors
  122.         Select Case Mid(MainStat, i, 1)
  123.             Case "["                                'The opening of a new table or feild name
  124.                 If SBOpened = False Then            'Checks to see if there is one open already
  125.                     SBOpened = True
  126.                     If OTable = False Then
  127.                         If Mid(MainStat, i - 1, 1) <> "!" Then
  128.                             WasERROR = True                 'If ! is not used to seperate Table and Feild then will error
  129.                             ERROR = DisplayError(2017)
  130.                             PraseStatment = "<error>"
  131.                             Exit Function
  132.                         End If
  133.                     End If
  134.                 Else
  135.                     WasERROR = True                 'If so then it will error
  136.                     ERROR = DisplayError(2007)
  137.                     PraseStatment = "<error>"
  138.                     Exit Function
  139.                 End If
  140.             Case "]"                                'The closing of a new table or feild name
  141.                 If SBOpened = True Then             'Check to see if a bracket is open
  142.                     SBOpened = False
  143.                     If OTable = True And Mid(MainStat, i + 1, 2) = "![" Then
  144.                         OTable = False
  145.                     ElseIf OTable = False Then
  146.                         OTable = True
  147.                         If TableExists(TName) = True Then    'Checks to see if the table exists
  148.                             If TableExists(TName, FName) = True Then     'Checks to see if the Feild exist
  149.                                 TName = ""
  150.                                 FName = ""
  151.                                 OTable = True
  152.                             Else                    'If the Feild doesnt exist it will error
  153.                                 WasERROR = True
  154.                                 ERROR = DisplayError(2009)
  155.                                 PraseStatment = "<error>"
  156.                                 Exit Function
  157.                             End If
  158.                         Else                        'If a bracket is not open it will error
  159.                             WasERROR = True
  160.                             ERROR = DisplayError(2010)
  161.                             PraseStatment = "<error>"
  162.                             Exit Function
  163.                         End If
  164.                     Else
  165.                         WasERROR = True             'No Feild referenced to will error
  166.                         ERROR = DisplayError(2019)
  167.                         PraseStatment = "<error>"
  168.                         Exit Function
  169.                     End If
  170.                 Else                                'If there is too many closing brackets it will error
  171.                     WasERROR = True
  172.                     ERROR = DisplayError(2008)
  173.                     PraseStatment = "<error>"
  174.                     Exit Function
  175.                 End If
  176.             Case "("
  177.                 RBOpened = RBOpened + 1             'Used to make sure that there is the same ammount of
  178.             Case ")"                                'Seperation bracets opend as closed
  179.                 RBOpened = RBOpened - 1
  180.             Case Else
  181.                 If SBOpened = True Then             'If a Table/Feild name is open it will add the extra text
  182.                     If OTable = True Then           'to the appropriate feild
  183.                         TName = TName & Mid(MainStat, i, 1)
  184.                     Else
  185.                         FName = FName & Mid(MainStat, i, 1)
  186.                     End If
  187.                 End If
  188.         End Select
  189.         If RBOpened < 0 Then                        'If there is an close brackets on its own then it will error
  190.             WasERROR = True
  191.             ERROR = DisplayError(2011)
  192.             PraseStatment = "<error>"
  193.             Exit Function
  194.         End If
  195.     Next i
  196. End If
  197.  
  198. If RBOpened > 0 Then                            'If there is an open bracket without a close then it will error
  199.     WasERROR = True
  200.     ERROR = DisplayError(2012)
  201.     PraseStatment = "<error>"
  202.     Exit Function
  203. End If
  204.  
  205. If SBOpened = True Then                         'If there is still a square bracket open it will error
  206.     WasERROR = True
  207.     ERROR = DisplayError(2013)
  208.     PraseStatment = "<error>"
  209.     Exit Function
  210. End If
  211.  
  212. If ContainsText(",", FroStat) = True Then
  213.     FroTab = Split(FroStat, ",")
  214.     FroCount = 1
  215.     If UBound(FroTab) > 1 Then
  216.         WasERROR = True
  217.         ERROR = DisplayError(2003)      'Querry across to many tables
  218.         PraseStatment = "<error>"
  219.         Exit Function
  220.     End If
  221. Else
  222.     FroCount = 0
  223.     FroStat = RemoveBrackets(FroStat)
  224.     If TableExists(FroStat) = False Then
  225.         WasERROR = True
  226.         ERROR = DisplayError(2004)          'Table does not exist
  227.         PraseStatment = "<error>"
  228.         Exit Function
  229.     End If
  230. End If
  231.  
  232. If FroCount = 1 Then
  233.     FroTab(0) = RemoveBrackets(FroTab(0))
  234.     FroTab(1) = RemoveBrackets(FroTab(1))
  235.     If TableExists(FroTab(0)) = True And TableExists(FroTab(1)) = True Then
  236.         If DoesRelExist(FroTab(0), FroTab(1)) = True Then
  237.             ContainsRel = True
  238.         Else
  239.             WasERROR = True
  240.             ERROR = DisplayError(2005)
  241.             PraseStatment = "<error>"        'One or both tables dont exist
  242.             Exit Function
  243.         End If
  244.     Else
  245.         WasERROR = True
  246.         ERROR = DisplayError(2006)
  247.         PraseStatment = "<error>"
  248.         Exit Function
  249.     End If
  250. End If
  251.  
  252. IType = 1
  253. RBOpened = 0
  254. QOpened = False
  255. SBOpened = False
  256.  
  257.  
  258. For i = 1 To Len(WheStat)                       '*** Parses the WHERE Statment
  259.     Select Case Mid(WheStat, i, 1)
  260.         Case Chr(34)                            'Used to make sure that all quotes are closed
  261.             If QOpened = True Then
  262.                 QOpened = False
  263.             Else
  264.                 QOpened = False
  265.             End If
  266.         Case "["
  267.             If SBOpened = False Then
  268.                 SBOpened = True
  269.             Else
  270.                 WasERROR = True                 'Too many opening brackets
  271.                 ERROR = DisplayError(2015)
  272.                 PraseStatment = "<error>"
  273.                 Exit Function
  274.             End If
  275.         Case "]"
  276.             If SBOpened = True Then
  277.                 SBOpened = False
  278.                 If IType = 1 And Mid(WheStat, i + 1, 2) = "![" Then
  279.                     IType = 2
  280.                 ElseIf IType = 2 And Mid(WheStat, i + 1, 1) <> "!" Then
  281.                     IType = 1
  282.                 Else
  283.                     WasERROR = True                 'If ! is not used to seperate Table and Feild then will error
  284.                     ERROR = DisplayError(2018)
  285.                     PraseStatment = "<error>"
  286.                     Exit Function
  287.                 End If
  288.             Else
  289.                 WasERROR = True                 'Too many closing brackets
  290.                 ERROR = DisplayError(2016)
  291.                 PraseStatment = "<error>"
  292.                 Exit Function
  293.             End If
  294.         Case "("
  295.             RBOpened = RBOpened + 1             'Used to make sure that there is the same ammount of
  296.         Case ")"                                'Seperation bracets opend as closed
  297.             RBOpened = RBOpened - 1
  298.         Case Else
  299.             If SBOpened = True Then             'If a Table/Feild name is open it will add the extra text
  300.                 If OTable = True Then           'to the appropriate feild
  301.                     TName = TName & Mid(MainStat, i, 1)
  302.                 Else
  303.                     FName = FName & Mid(MainStat, i, 1)
  304.                 End If
  305.             End If
  306.     End Select
  307.     If RBOpened < 0 Then                        'If there is an close brackets on its own then it will error
  308.         WasERROR = True
  309.         ERROR = DisplayError(2020)
  310.         PraseStatment = "<error>"
  311.         Exit Function
  312.     End If
  313. Next i
  314.  
  315. If RBOpened > 0 Then                            'If there is an open bracket without a close then it will error
  316.     WasERROR = True
  317.     ERROR = DisplayError(2021)
  318.     PraseStatment = "<error>"
  319.     Exit Function
  320. End If
  321.  
  322. If SBOpened = True Then                         'If there is still a square bracket open it will error
  323.     WasERROR = True
  324.     ERROR = DisplayError(20215)
  325.     PraseStatment = "<error>"
  326.     Exit Function
  327. End If
  328.  
  329. If QOpened = True Then
  330.     WasERROR = True
  331.     ERROR = DisplayError(2014)
  332.     PraseStatment = "<error>"
  333. End If
  334. PraseStatment = RunSQL(StatType, MainStat, FroStat, WheStat, OrdStat, WasERROR, ERROR, CTable)
  335.  
  336. End Function
  337.  
  338.  
  339. Public Function RunSQL(StatType As Integer, MainStat As String, FroStat As String, WheStat As String, OrdStat As String, WasERROR As Boolean, ERROR As String, Optional CTable As String) As String
  340. Dim i As Integer
  341. Dim j As Integer
  342. Dim k As Integer
  343.  
  344. Dim RCHeaders() As String       'The Results Table column headers
  345. Dim SRCHeaders As String        'Holds all the column headers as a string
  346. Dim RTable() As String          'The Results Table
  347. Dim SRTable As String           'Holds the whole table as a string
  348. Dim RTColumns As Integer        'Total number of columns
  349. Dim RTRows As Integer           'Total number of rows
  350.  
  351. Dim TCHeaders() As String       'The Real Tables column headers
  352. Dim TTable() As String          'The Real Table
  353. Dim TTColumns As Integer        'Total Number of columns
  354. Dim TTRows As Integer           'Total number of rows
  355.  
  356. Dim LIDoing As Integer          'Used for working out which item is being used in an array
  357.  
  358. Dim MainLst() As String         'Lists all of the Main statments (ie. parts of the Select, Delete statments0
  359. Dim MainCount As Integer        'Keeps a count of all the main statments
  360. Dim MaiUpTo As Integer          'Used for working out where the next main statment is to go
  361.  
  362. Dim FroTab() As String          'List of all the from statments (only two possible ones)
  363. Dim FroCount As Integer         'Keeps a count of all the from statments
  364.  
  365. Dim WheLst() As String          'List of all the where statment
  366. Dim WheCount As Integer         'Keeps a count of all the where statments
  367. Dim WheUpTo As Integer          'Holds where where upto count
  368.  
  369. Dim CInfo As String             'Column Info all
  370. Dim TInfo As String             'All table items
  371. Dim CTSplit() As String         'Split of the Table Items & Column Items
  372. Dim SCInfo() As String          'Split of the column headers
  373. Dim CInfoI As Integer           'Total column header strings
  374. Dim STInfo() As String          'Split of the Table Info
  375. Dim TInfoI As Integer           'Total Table Info strings
  376. Dim CDoing As Integer
  377.  
  378. Dim RCount As Integer           'Total nubmer of rows returned
  379. Dim RStart As Integer           'The row to start at
  380. Dim RStop As Integer            'The row to stop at
  381.  
  382. 'Used for spliting up the where statment
  383. Dim RBO As Boolean              'Used to check if a round bracket is open i. ( )
  384. Dim SBo As Boolean              'Used to check if a square bracket is open ie. [ ]
  385. Dim QOp As Boolean              'Used to check if a quote is open
  386.  
  387. Dim SPos As Integer             'Used to hold where the item spliter is ie ]![ in a Where statment
  388.  
  389. Dim LineIsOk As Boolean         'Used to telling if a row in a table is ok when all where comparisions are done
  390.  
  391. 'Used for spliting up the where statment
  392. Dim ComPos As Integer
  393.  
  394. RCount = 0
  395. RStart = 0
  396. RStop = 0
  397.  
  398. MainCount = CountSubStrings(MainStat, ",") + 1
  399. If MainCount < 1 Then
  400.     MainCount = 1
  401. End If
  402. If StatType = 2 Then
  403.     ReDim MainLst(MainCount, 2)
  404. Else
  405.     ReDim MainLst(MainCount, 1)
  406. End If
  407.  
  408. If RemoveBrackets(MainStat) = "*" Then
  409.     MainStat = RemoveBrackets(MainStat)
  410. End If
  411.  
  412. If ContainsText(",", MainStat) = True And Trim(MainStat) <> "*" Then
  413.     'MainLst = Split(MainStat, ",")
  414.     QOp = False
  415.     SBo = False
  416.     RBO = False
  417.     ComPos = 1
  418.     MaiUpTo = 0
  419.     
  420.     For i = 1 To Len(MainStat)
  421.         Select Case Mid(MainStat, i, 1)
  422.             Case Chr(34)
  423.                 If QOp = True Then
  424.                     QOp = False
  425.                 Else
  426.                     QOp = True
  427.                 End If
  428.             Case "["
  429.                 If QOp = False Then
  430.                     SBo = True
  431.                 End If
  432.             Case "]"
  433.                 If QOp = False Then
  434.                     SBo = False
  435.                 End If
  436.             Case "("
  437.                 If QOp = False Then
  438.                     RBO = True
  439.                 End If
  440.             Case ")"
  441.                 If QOp = False Then
  442.                     RBO = False
  443.                 End If
  444.             Case ","
  445.                 If QOp = False And SBo = False And RBO = False Then
  446.                     MainLst(MaiUpTo, 0) = Mid(MainStat, FindPosition(ComPos, "[", MainStat) + 1, FindPosition(ComPos, "]![", MainStat) - FindPosition(ComPos, "[", MainStat) - 1)
  447.                     SPos = FindPosition(ComPos, "]![", MainStat) + 3
  448.                     MainLst(MaiUpTo, 1) = Mid(MainStat, SPos, FindPosition(SPos, "]", MainStat) - SPos)
  449.                     If StatType = 2 Then
  450.                         SPos = FindPosition(SPos, "]", MainStat) + 1
  451.                         MainLst(0, 2) = Mid(MainStat, SPos, Len(MainStat) - SPos + 1)
  452.                     End If
  453.                     MaiUpTo = MaiUpTo + 1
  454.                     ComPos = i
  455.                 End If
  456.         End Select
  457.     Next i
  458.     If QOp = False And SBo = False And RBO = False Then
  459.         MainLst(MaiUpTo, 0) = Mid(MainStat, FindPosition(ComPos, "[", MainStat) + 1, FindPosition(ComPos, "]![", MainStat) - FindPosition(ComPos, "[", MainStat) - 1)
  460.         SPos = FindPosition(ComPos, "]![", MainStat) + 3
  461.         MainLst(MaiUpTo, 1) = Mid(MainStat, SPos, FindPosition(SPos, "]", MainStat) - SPos)
  462.         If StatType = 2 Then
  463.             SPos = FindPosition(SPos, "]", MainStat) + 1
  464.             MainLst(0, 2) = Mid(MainStat, SPos, Len(MainStat) - SPos + 1)
  465.         End If
  466.         MaiUpTo = MaiUpTo + 1
  467.         ComPos = i
  468.     End If
  469.     MainCount = MaiUpTo
  470.     
  471. ElseIf MainStat <> "*" And UCase(Trim(Left(MainStat, 8))) <> "COUNT(*)" Then
  472.     ReDim MainLst(1, 1)
  473.     MainCount = 1
  474.     MainLst(0, 0) = Mid(MainStat, FindPosition(1, "[", MainStat) + 1, FindPosition(1, "]![", MainStat) - FindPosition(1, "[", MainStat) - 1)
  475.     SPos = FindPosition(1, "]![", MainStat) + 3
  476.     MainLst(0, 1) = Mid(MainStat, SPos, FindPosition(SPos, "]", MainStat) - SPos)
  477.     MainCount = 1
  478. End If
  479.  
  480. If WheStat <> "" And UCase(Trim(Left(WheStat, 5))) <> "ROWS(" Then     'Checks to see if there is any where statments
  481.     WheLst = Split(WheStat, ",")           'If there is then it starts this to split them
  482.     WheCount = CountSubStrings(WheStat, ",") + 1
  483.     
  484.     ReDim WheLst(WheCount, 2)               'Redimensions the where list
  485.     If ContainsText(",", WheStat) = True Then       'If there is more than one where statment then it will
  486.         QOp = False                                 'Start looping through them and adding them to the list
  487.         SBo = False
  488.         RBO = False
  489.         ComPos = 1
  490.         WheUpTo = 0
  491.         
  492.         For i = 1 To Len(WheStat)
  493.             Select Case Mid(WheStat, i, 1)
  494.                 Case Chr(34)
  495.                     If QOp = True Then
  496.                         QOp = False
  497.                     Else
  498.                         QOp = True
  499.                     End If
  500.                 Case "["
  501.                     If QOp = False Then
  502.                         SBo = True
  503.                     End If
  504.                 Case "]"
  505.                     If QOp = False Then
  506.                         SBo = False
  507.                     End If
  508.                 Case "("
  509.                     If QOp = False Then
  510.                         RBO = True
  511.                     End If
  512.                 Case ")"
  513.                     If QOp = False Then
  514.                         RBO = False
  515.                     End If
  516.                 Case ","
  517.                     If QOp = False And SBo = False And RBO = False Then
  518.                         WheLst(WheUpTo, 0) = Mid(WheStat, FindPosition(ComPos, "[", WheStat) + 1, FindPosition(ComPos, "]![", WheStat) - FindPosition(ComPos, "[", WheStat) - 1)
  519.                         SPos = FindPosition(ComPos, "]![", WheStat) + 3
  520.                         WheLst(WheUpTo, 1) = Mid(WheStat, SPos, FindPosition(SPos, "]", WheStat) - SPos)
  521.                         SPos = FindPosition(SPos, "]", WheStat) + 1
  522.                         If FindPosition(i + 1, ",", WheStat) = True Then
  523.                             WheLst(WheUpTo, 2) = Mid(WheStat, ComPos, Len(WheStat) - SPos)
  524.                         Else
  525.                             WheLst(WheUpTo, 2) = Mid(WheStat, SPos, FindPosition(SPos, ",", WheStat) - SPos)
  526.                         End If
  527.                         WheUpTo = WheUpTo + 1
  528.                         ComPos = i
  529.                     End If
  530.             End Select
  531.         Next i
  532.         If QOp = False And SBo = False And RBO = False Then
  533.             WheLst(WheUpTo, 0) = Mid(WheStat, FindPosition(ComPos, "[", WheStat) + 1, FindPosition(ComPos, "]![", WheStat) - FindPosition(ComPos, "[", WheStat) - 1)
  534.             SPos = FindPosition(ComPos, "]![", WheStat) + 3
  535.             WheLst(WheUpTo, 1) = Mid(WheStat, SPos, FindPosition(SPos, "]", WheStat) - SPos)
  536.             SPos = FindPosition(SPos, "]", WheStat) + 1
  537.             WheLst(WheUpTo, 2) = Mid(WheStat, SPos, Len(WheStat) - SPos + 1)
  538.             WheUpTo = WheUpTo + 1
  539.             ComPos = i
  540.         End If
  541.         WheCount = WheUpTo
  542.     Else
  543.         ReDim WheLst(1, 2)
  544.         WheLst(0, 0) = Mid(WheStat, FindPosition(1, "[", WheStat) + 1, FindPosition(1, "]![", WheStat) - FindPosition(1, "[", WheStat) - 1)
  545.         SPos = FindPosition(1, "]![", WheStat) + 3
  546.         WheLst(0, 1) = Mid(WheStat, SPos, FindPosition(SPos, "]", WheStat) - SPos)
  547.         SPos = FindPosition(SPos, "]", WheStat) + 1
  548.         WheLst(0, 2) = Mid(WheStat, SPos, Len(WheStat) - SPos + 1)
  549.         WheCount = 1
  550.     End If
  551. End If
  552.  
  553. If MainCount > 0 Or MainStat = "*" Or UCase(MainStat) = "COUNT(*)" Then
  554.     ReDim RCHeaders(MainCount, 7)
  555.     ReDim RTable(MainCount, 1)
  556.     
  557.     If CTable <> "" Then                                            'If there is a temporary table passed it will runn it again
  558.         CTSplit = Split(CTable, Chr(212) & Chr(232) & Chr(212))     'Splits the table information
  559.     Else
  560.         FroStat = RemoveBrackets(FroStat)
  561.         For i = 1 To TotalTables
  562.             If FroStat = Tables(i, 0) Then
  563.                 If Tables(i, 1) = 0 Then
  564.                     WasERROR = True
  565.                     ERROR = DisplayError(2022)
  566.                     RunSQL = "<error>"
  567.                     Exit Function
  568.                 End If
  569.                 CTSplit = Split(Tables(i, 4), Chr(212) & Chr(232) & Chr(212))
  570.                 Exit For
  571.             End If
  572.         Next i
  573.     End If
  574.     
  575.     CInfo = CTSplit(0)                                              'Gets the column header
  576.     TInfo = CTSplit(1)                                              'Gets the table info
  577.     CInfoI = CountSubStrings(CInfo, vbTab)                          'Finds the total column header items
  578.     SCInfo = Split(CInfo, vbTab)                                    'Splits the column header info
  579.     TInfoI = CountSubStrings(TInfo, vbTab)                          'Finds the total table items
  580.     STInfo = Split(TInfo, vbTab)                                    'Splits the table items
  581.     
  582.     TTColumns = (CInfoI + 1) / 8                                    'Finds the ammount of columns there acutally is
  583.     TTRows = (TInfoI + 1) / TTColumns                               'Finds the total ammount of rows there is
  584.  
  585.     ReDim TCHeaders(TTColumns, 7)
  586.     ReDim TTable(TTRows, TTColumns)
  587.     
  588.     LIDoing = 0
  589.     CDoing = 0
  590.     
  591.     For i = 0 To TTRows - 1                                      'Puts all of the list items into the Temp Table Array array
  592.         For j = 0 To TTColumns - 1
  593.             TTable(i, j) = STInfo(LIDoing)
  594.             LIDoing = LIDoing + 1
  595.         Next j
  596.     Next i
  597.     
  598.     For i = 0 To CInfoI Step 8                              'Loads each of the 8 components of a column into the array
  599.         TCHeaders(CDoing, 0) = SCInfo(i)                    'Done in a step of 8 to speed up the loop
  600.         TCHeaders(CDoing, 1) = SCInfo(i + 1)
  601.         TCHeaders(CDoing, 2) = SCInfo(i + 2)
  602.         TCHeaders(CDoing, 3) = SCInfo(i + 3)
  603.         TCHeaders(CDoing, 4) = SCInfo(i + 4)
  604.         TCHeaders(CDoing, 5) = SCInfo(i + 5)
  605.         TCHeaders(CDoing, 6) = SCInfo(i + 6)
  606.         TCHeaders(CDoing, 7) = SCInfo(i + 7)
  607.         CDoing = CDoing + 1
  608.     Next i
  609.     
  610.     ReDim RTable(TTRows, CDoing - 1)
  611.     For i = 0 To TTRows - 1                                 'Loops through the rows
  612.         LineIsOk = False                                    'Resets the LineIsOk Variable
  613.         For j = 0 To WheCount                               'Loops through the where statments
  614.             For k = 0 To TTColumns - 1                      'Loops through the columns looking for the same column as in the where statment
  615.                 If WheCount > 0 Then                        'If there is more than one where statment the int will start the checks
  616.                     If WheLst(j, 1) = TCHeaders(k, 0) Then
  617.                         If WhereCompare(CInt(TCHeaders(k, 2)), TTable(i, k), WheLst(j, 2), WasERROR, ERROR) = True Then
  618.                             LineIsOk = True
  619.                         Else
  620.                             LineIsOk = False
  621.                         End If
  622.                     End If
  623.                 Else
  624.                     LineIsOk = True                         'If there is no where statments then it will say the line is ok
  625.                 End If
  626.             Next k
  627.         Next j
  628.         If LineIsOk = True Then                                 'If the line is ok then it will add the selected items into the RunSQl function variable
  629.             If UCase(Trim(Left(MainStat, 8))) = "COUNT(*)" Then
  630.                 RCount = RCount + 1
  631.             Else
  632.                 Select Case StatType
  633.                     Case 0
  634.                         If MainStat <> "*" Then                                 'If its not selecting all the items
  635.                             For j = 0 To MainCount                              'Loops through the main items
  636.                                 For k = 0 To TTColumns - 1                      'Loops through the column headers
  637.                                     If MainLst(j, 1) = TCHeaders(k, 0) Then     'Checks to see if the selected main item and column header match
  638.                                         If SRTable = "" Then                    'If so then it will add the selcted item
  639.                                             SRTable = TTable(i, k)
  640.                                         Else
  641.                                             SRTable = SRTable & vbTab & TTable(i, k)      'If there is already data in then it will use a tab seperator
  642.                                         End If
  643.                                     End If
  644.                                 Next k
  645.                             Next j
  646.                         Else                                                'If its selecting all the column headers
  647.                             For j = 0 To TTColumns - 1                      'Loops through the column headers
  648.                                 If SRTable = "" Then                        'If so then it will add the selcted item
  649.                                     SRTable = TTable(i, j)
  650.                                 Else
  651.                                     SRTable = SRTable & vbTab & TTable(i, j)      'If there is already data in then it will use a tab seperator
  652.                                 End If
  653.                             Next j
  654.                         End If
  655.                     Case 1
  656.                         For j = 0 To TTColumns - 1
  657.                             If SRTable = "" Then                     'if so then it will add the selcted item
  658.                                 SRTable = TTable(i, j)
  659.                             Else
  660.                                 SRTable = SRTable & vbTab & TTable(i, j)    'If there is already data in then it will use a tab seperator
  661.                             End If
  662.                             TTable(i, j) = "<deleted>"
  663.                         Next j
  664.                     Case 2
  665.                         
  666.                 End Select
  667.             End If
  668.         End If
  669.     Next i
  670. Else
  671.     
  672. End If
  673.  
  674. If MainStat = "*" Then
  675.     MainCount = TTColumns
  676. End If
  677.  
  678. Select Case StatType
  679.     Case 0
  680.         For i = 0 To MainCount - 1
  681.             For j = 0 To TTColumns - 1
  682.                     If MainStat <> "*" And UCase(MainStat) <> "COUNT(*)" Then       'If its any old SELECT statment
  683.                         If MainLst(i, 1) = TCHeaders(j, 0) Then
  684.                             If SRCHeaders = "" Then
  685.                                 SRCHeaders = TCHeaders(j, 0) & vbTab & TCHeaders(j, 1) & vbTab & TCHeaders(j, 2) & vbTab & TCHeaders(j, 3) & vbTab & TCHeaders(j, 4) & vbTab & TCHeaders(j, 5) & vbTab & TCHeaders(j, 6) & vbTab & TCHeaders(j, 7)
  686.                             Else
  687.                                 SRCHeaders = SRCHeaders & vbTab & TCHeaders(j, 0) & vbTab & TCHeaders(j, 1) & vbTab & TCHeaders(j, 2) & vbTab & TCHeaders(j, 3) & vbTab & TCHeaders(j, 4) & vbTab & TCHeaders(j, 5) & vbTab & TCHeaders(j, 6) & vbTab & TCHeaders(j, 7)
  688.                             End If
  689.                         End If
  690.                     ElseIf UCase(MainStat) <> "COUNT(*)" Then       'If is not a count statment then
  691.                         If SRCHeaders = "" Then
  692.                             SRCHeaders = TCHeaders(j, 0) & vbTab & TCHeaders(j, 1) & vbTab & TCHeaders(j, 2) & vbTab & TCHeaders(j, 3) & vbTab & TCHeaders(j, 4) & vbTab & TCHeaders(j, 5) & vbTab & TCHeaders(j, 6) & vbTab & TCHeaders(j, 7)
  693.                         Else
  694.                             SRCHeaders = SRCHeaders & vbTab & TCHeaders(j, 0) & vbTab & TCHeaders(j, 1) & vbTab & TCHeaders(j, 2) & vbTab & TCHeaders(j, 3) & vbTab & TCHeaders(j, 4) & vbTab & TCHeaders(j, 5) & vbTab & TCHeaders(j, 6) & vbTab & TCHeaders(j, 7)
  695.                         End If
  696.                     End If
  697.             Next j
  698.             If MainStat = "*" Then      'If its a select all query then the j for loop will add all column headers
  699.                 Exit For                'To the results so no need to go again
  700.             End If
  701.         Next i
  702.     Case 1
  703.         
  704.     Case 2
  705.         
  706. End Select
  707.  
  708. If UCase(Trim(Left(MainStat, 8))) = "COUNT(*)" Then
  709.     SRCHeaders = "COUNT(*)" & vbTab & "0" & vbTab & "2" & vbTab & "0" & vbTab & "<none>" & vbTab & "<none>" & vbTab & "0" & vbTab & "0"
  710.     SRTable = RCount
  711. End If
  712.  
  713. If SRCHeaders <> "" Then
  714.     RunSQL = SRCHeaders & Chr(212) & Chr(232) & Chr(212)
  715. End If
  716.  
  717.  
  718. If SRTable <> "" Then
  719.     RunSQL = RunSQL & SRTable
  720. Else
  721.     RunSQL = RunSQL & "<null>"          'If there is no list items returned then it will return a null statment
  722. End If
  723. End Function
  724.  
  725. Private Function WhereCompare(DType As Integer, Data As String, CData As String, WasERROR As Boolean, ERROR As String) As Boolean
  726. Dim TCData As String
  727.  
  728. WhereCompare = False
  729.  
  730. Select Case DType
  731.     Case 0                                                  'If its a text compare then will run these checks
  732.         If Left(CData, 1) = "=" Then                        'Equal to check
  733.             TCData = Trim(Mid(CData, 3, Len(CData) - 3))
  734.             If ContainsText(TCData, Data) = True Then
  735.                 WhereCompare = True
  736.             End If
  737.         End If
  738.         
  739.         If Left(CData, 2) = "<>" Then                       'Not equal to check
  740.             TCData = Trim(Mid(CData, 4, Len(CData) - 4))
  741.             If ContainsText(TCData, Data) = False Then
  742.                 WhereCompare = True
  743.             End If
  744.         End If
  745.         
  746.         If Left(UCase(CData), 2) = "UC" Then                'Upper case check
  747.             TCData = Trim(Mid(CData, 4, Len(CData) - 4))
  748.             If ContainsText(UCase(TCData), UCase(Data)) = True Then
  749.                 WhereCompare = True
  750.             End If
  751.         End If
  752.         
  753.         If Left(UCase(CData), 2) = "LC" Then                'Lower case check
  754.             TCData = Trim(Mid(CData, 4, Len(CData) - 4))
  755.             If ContainsText(LCase(TCData), LCase(Data)) = True Then
  756.                 WhereCompare = True
  757.             End If
  758.         End If
  759.     Case 1
  760.         
  761.     Case 2, 3, 4, 5
  762.         If Left(CData, 1) = "=" Then                        'Equal to check
  763.             TCData = Trim(Mid(CData, 2, Len(CData) - 1))
  764.             If Val(TCData) = Val(Data) Then
  765.                 WhereCompare = True
  766.             End If
  767.         End If
  768.         
  769.         If Left(CData, 2) = "<>" Then                       'Not equal to check
  770.             TCData = Trim(Mid(CData, 3, Len(CData) - 2))
  771.             If Val(TCData) <> Val(Data) Then
  772.                 WhereCompare = True
  773.             End If
  774.         End If
  775.         
  776.         If Left(CData, 1) = "<" Then                        'Equal to check
  777.             TCData = Trim(Mid(CData, 1, Len(CData) - 1))
  778.             If Val(TCData) < Val(Data) Then
  779.                 WhereCompare = True
  780.             End If
  781.         End If
  782.         
  783.         If Left(CData, 1) = ">" Then                       'Not equal to check
  784.             TCData = Trim(Mid(CData, 1, Len(CData) - 1))
  785.             If Val(TCData) > Val(Data) Then
  786.                 WhereCompare = True
  787.             End If
  788.         End If
  789.         
  790.         If Left(CData, 2) = "<=" Then                        'Equal to check
  791.             TCData = Trim(Mid(CData, 3, Len(CData) - 2))
  792.             If Val(TCData) <= Val(Data) Then
  793.                 WhereCompare = True
  794.             End If
  795.         End If
  796.         
  797.         If Left(CData, 2) = ">=" Then                       'Not equal to check
  798.             TCData = Trim(Mid(CData, 3, Len(CData) - 2))
  799.             If Val(TCData) >= Val(Data) Then
  800.                 WhereCompare = True
  801.             End If
  802.         End If
  803.     Case 6, 7, 8
  804.         
  805.     Case 9
  806.         
  807.     Case 10
  808.         
  809.     Case 11
  810. End Select
  811. End Function
  812.  
  813. Private Function RemoveBrackets(ReFrom As String) As String
  814. Dim Temp As String
  815. Temp = ReFrom
  816. Temp = Replace(Temp, "[", "")
  817. Temp = Replace(Temp, "]", "")
  818. Temp = Replace(Temp, vbNewLine, "")
  819. Temp = Replace(Temp, vbCrLf, "")
  820. Temp = Replace(Temp, Chr(13), "")
  821. RemoveBrackets = Trim(Temp)
  822. End Function
  823.  
  824. Private Function TableExists(TableName As String, Optional FeildName As String) As Boolean          'Used to make sure that no duplicate tables are created
  825. Dim i As Integer
  826. Dim j As Integer
  827. Dim TTable() As String
  828. Dim Columns As Integer
  829. Dim TColumns() As String
  830. TableExists = False
  831. For i = 1 To TotalTables
  832.     If TableName = Tables(i, 0) Then
  833.         TableExists = True
  834.         If FeildName <> "" Then
  835.             TableExists = False                                             'Resets it if its searching for a feild aswell
  836.             TTable = Split(Tables(i, 4), Chr(212) & Chr(232) & Chr(212))    'Splits the table info up
  837.             Columns = CountSubStrings(TTable(0), vbTab)                     'Counts the number of column headers
  838.             TColumns = Split(TTable(0), vbTab)                              'Splits the columns headers up
  839.             For j = 0 To Columns Step 8                                     'Loops through to find the if the Key column exists in table
  840.                 If TColumns(j) = FeildName Then
  841.                     TableExists = True
  842.                     Exit Function
  843.                 End If
  844.             Next j
  845.         End If
  846.     End If
  847. Next i
  848. End Function
  849.