home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 June / Chip_2001-06_cd1.bin / zkuste / vbasic / Data / Utility / MSISDK15.msi / MergeMod.110 / Binary.ice32.vbs < prev    next >
Text File  |  2000-10-05  |  4KB  |  95 lines

  1.  
  2. Function ICE32()
  3. On Error Resume Next
  4.  
  5.     Set recInfo=Installer.CreateRecord(1)
  6.     If Err <> 0 Then
  7.         ICE32 = 1
  8.         Exit Function
  9.     End If
  10.  
  11.     'Give description of test
  12.     recInfo.StringData(0)="ICE32" & Chr(9) & "3" & Chr(9) & "ICE32 - Confirms that keys and foreign keys are the same type/size"
  13.     Message &h03000000, recInfo
  14.  
  15.     'Give creation data
  16.     recInfo.StringData(0)="ICE32" & Chr(9) & "3" & Chr(9) & "Created 07/30/98. Last Modified 10/08/98."
  17.     Message &h03000000, recInfo
  18.  
  19.     Set msiDB = Session.Database
  20.     Set msiTablesView = msiDB.OpenView("SELECT * FROM `_Validation` WHERE `KeyTable` IS NOT NULL")
  21.     msiTablesView.Execute
  22.     If Err <> 0 Then
  23.         recInfo.StringData(0)="ICE32" & Chr(9) & "0" & Chr(9) & "view.Execute_1 API Error"
  24.         Message &h03000000, recInfo
  25.         ICE32=1
  26.         Exit Function
  27.     End If 
  28.     Set msiTablesRecord = msiTablesView.Fetch
  29.     Do Until msiTablesRecord Is Nothing
  30.         sThisTable = msiTablesRecord.StringData(1)
  31.         sThisColumn = msiTablesRecord.StringData(2)
  32.         sKeyTables = msiTablesRecord.StringData(6)
  33.        
  34.         'Is this table in the database?
  35.         iStat = Database.TablePersistent(sThisTable)
  36.         If 1 = iStat Then
  37.             If Len(sKeyTables) > 0 Then
  38.                 iKeyColumn = msiTablesRecord.IntegerData(7)
  39.                 Set msiForeignView = msiDB.OpenView("SELECT `" & sThisColumn & "` FROM `" & sThisTable & "`")
  40.                     msiForeignView.Execute
  41.                     Set msiForeignInfo = msiForeignView.ColumnInfo(1)
  42.                 iDelim = InStr(sKeyTables & ";", ";")
  43.                 sKeyTable = Left(sKeyTables & ";", iDelim - 1)
  44.                 While Len(sKeyTable) > 0
  45.  
  46.                     'Is this table in the database?
  47.                     iStat = Database.TablePersistent(sKeyTable)
  48.                     If 1 <> iStat Then
  49.                         recInfo.StringData(0)="ICE32" & Chr(9) & "3" & Chr(9) & sKeyTable & " table is not in database, but is listed in the _Validation table as a foreign key of " & sThisTable & "." & sThisColumn & Chr(9) & "http://dartools/Iceman/ice32.html" & Chr(9) & "_Validation"
  50.                         Message &h03000000, recInfo
  51.                     Else
  52.                         Set msiKeyView = msiDB.OpenView("SELECT * FROM `" & sKeyTable & "`")
  53.                         msiKeyView.Execute
  54.                         If Err <> 0 Then
  55.                             recInfo.StringData(0)="ICE32" & Chr(9) & "0" & Chr(9) & "view.Execute_2 API Error in table " & sKeyTable & " Error: " & Installer.LastErrorRecord.StringData(1)
  56.                             Message &h03000000, recInfo
  57.                             ICE32=1
  58.                             Exit Function
  59.                         End If 
  60.                         Set msiKeyInfo = msiKeyView.ColumnInfo(1)
  61.                         If LCase(msiKeyInfo.StringData(iKeyColumn)) <> LCase(msiForeignInfo.StringData(1)) Then
  62.                             recInfo.StringData(0) = "ICE32" & Chr(9) & "1" & Chr(9) & "Possible Mis-Aligned Foreign Keys" & Chr(10) & _
  63.                                    sKeyTable & "." & iKeyColumn & " = " & _
  64.                                    msiKeyInfo.StringData(iKeyColumn) & Chr(10) & _
  65.                                    sThisTable & "." & sThisColumn & " = " & _
  66.                                    msiForeignInfo.StringData(1) & Chr(9) & "http://dartools/Iceman/ice32.html" & Chr(9) & "_Validation"
  67.                             Message &h03000000, recInfo
  68.                             bDifference = True
  69.                         End If
  70.                     End If
  71.     
  72.                     iDelim = InStr(sKeyTables, ";")
  73.                     If iDelim > 0 Then
  74.                         sKeyTables = Mid(sKeyTables, iDelim + 1)
  75.                         iDelim = InStr(sKeyTables & ";", ";")
  76.                         sKeyTable = Left(sKeyTables & ";", iDelim - 1)
  77.                     Else
  78.                         sKeyTable = ""
  79.                     End If
  80.                 Wend
  81.             End If
  82.         End If
  83.         Set msiTablesRecord = msiTablesView.Fetch
  84.     Loop
  85.  
  86.     recInfo.StringData(0) = "ICE32" & Chr(9) & "3" & Chr(9) & "Differences found = " & UCase(CStr(bDifference))
  87.     Message &h03000000, recInfo
  88.     
  89.     'Return iesSuccess  
  90.     ICE32 = 1
  91.     Exit Function
  92.  
  93.  
  94. End Function
  95.