Hallo Hammel,
versuch's doch mal damit:
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 Ich hab's hier jetzt zwar nicht ausprobieren können, aber es könnte sein, dass die Hochkommata nicht in Ordnung waren ![](../images/smilies/smiley3.gif)
ciao
Elwood
Wer sp?ter bremst, ist l?nger schnell |