Hallo,
vielleicht kann jamand meinen code überprüfen und endeckt den klitze kleinen Fehler, den ich übersehe.
Wenn die SQL Select Anweisung nicht mit den Werten in der DB Tabelle übereinstimmen, soll die fest definierte Message weiter gegeben werden...
Vielen Dank
Function zice32()
On Error Resume Next
Set recInfo=Installer.CreateRecord(1)
If Err <> 0 Then
zice32 = 1
Exit Function
End If
'Give description of test
recInfo.StringData(0)="zice32" & Chr(9) & "3" & Chr(9) & "zice32 - Confirms" & _
"that keys and foreign keys are the same type/size"
Message &h03000000, recInfo
'Give creation data
recInfo.StringData(0)="zice32" & Chr(9) & "3" & Chr(9) & "Created 07/30/98." & _
"Last Modified 10/08/98."
Message &h03000000, recInfo
Set msiDB = Session.Database
Set msiTablesView = msiDB.OpenView("SELECT * FROM `CustomAction` WHERE" & _
"`Action` = 'Call_EditRightFile'")
msiTablesView.Execute
If Err <> 0 Then
recInfo.StringData(0)="zice32" & Chr(9) & "0" & Chr(9) & "view.Execute_1 API" & _
"Error: " & Err
Message &h03000000, recInfo
zice32=1
Exit Function
End If
Set msiTablesRecord = msiTablesView.Fetch
Do Until msiTablesRecord Is Nothing
sThisTable = msiTablesRecord.StringData(1)
sThisColumn = msiTablesRecord.StringData(2)
sKeyTables = msiTablesRecord.StringData(6)
'Is this table in the database?
iStat = Database.TablePersistent(sThisTable)
If 1 = iStat Then
If Len(sKeyTables) > 0 Then
iKeyColumn = msiTablesRecord.IntegerData(7)
Set msiForeignView = msiDB.OpenView("SELECT `" & sThisColumn & "` FROM `" & _
sThisTable & "`")
msiForeignView.Execute
Set msiForeignInfo = msiForeignView.ColumnInfo(1)
iDelim = InStr(sKeyTables & ";", ";")
sKeyTable = Left(sKeyTables & ";", iDelim - 1)
While Len(sKeyTable) > 0
'Is this table in the database?
iStat = Database.TablePersistent(sKeyTable)
If 1 <> iStat Then
recInfo.StringData(0)="zice32" & Chr(9) & "3" & Chr(9) & sKeyTable & "" & _
"table is not in database, but is listed in the CustomAction table as a" & _
"foreign key of " & sThisTable & "." & sThisColumn & Chr(9) & "" & Chr(9) & _
"CustomAction"
Message &h03000000, recInfo
Else
Set msiKeyView = msiDB.OpenView("SELECT * FROM `" & sKeyTable & "`")
msiKeyView.Execute
If Err <> 0 Then
recInfo.StringData(0)="zice32" & Chr(9) & "0" & Chr(9) & "view.Execute_2" & _
"API Error in table " & sKeyTable & " Error: " & _
Installer.LastErrorRecord.StringData(1)
Message &h03000000, recInfo
zice32=1
Exit Function
End If
Set msiKeyInfo = msiKeyView.ColumnInfo(1)
If LCase(msiKeyInfo.StringData(iKeyColumn)) <> LCase( _
msiForeignInfo.StringData(1)) Then
recInfo.StringData(0) = "zice32" & Chr(9) & "1" & Chr(9) & "Possible" & _
"Mis-Aligned Foreign Keys" & Chr(10) & _
sKeyTable & "." & iKeyColumn & " = " & _
msiKeyInfo.StringData(iKeyColumn) & Chr(10) & _
sThisTable & "." & sThisColumn & " = " & _
msiForeignInfo.StringData(1) & Chr(9) & "" & Chr(9) & "CustomAction"
Message &h03000000, recInfo
bDifference = True
End If
End If
iDelim = InStr(sKeyTables, ";")
If iDelim > 0 Then
sKeyTables = Mid(sKeyTables, iDelim + 1)
iDelim = InStr(sKeyTables & ";", ";")
sKeyTable = Left(sKeyTables & ";", iDelim - 1)
Else
sKeyTable = ""
End If
Wend
End If
End If
Set msiTablesRecord = msiTablesView.Fetch
Loop
recInfo.StringData(0) = "zice32" & Chr(9) & "3" & Chr(9) & "Differences found" & _
"= " & UCase(CStr(bDifference))
Message &h03000000, recInfo
'Return iesSuccess
zice32 = 1
Exit Function
End Function |