1.Enable part of pcd Checkpoints
authorhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 13 Mar 2008 06:27:05 +0000 (06:27 +0000)
committerhche10x <hche10x@7335b38e-4728-0410-8992-fb3ffe349368>
Thu, 13 Mar 2008 06:27:05 +0000 (06:27 +0000)
2.Fix some bugs in guid/protocol/ppi checkpoints

git-svn-id: https://buildtools.tianocore.org/svn/buildtools/trunk/BaseTools@1062 7335b38e-4728-0410-8992-fb3ffe349368

Source/Python/Common/DecClassObject.py
Source/Python/Common/DscClassObject.py
Source/Python/Common/EdkIIWorkspaceBuild.py
Source/Python/Common/InfClassObject.py
Source/Python/Ecc/Check.py

index d93a3db..1423113 100644 (file)
@@ -451,6 +451,7 @@ class Dec(DecObject):
     def GenPcds(self, ContainerFile):\r
         EdkLogger.debug(2, "Generate %s ..." % TAB_PCDS)\r
         Pcds = {}\r
+        PcdToken = {}\r
         #\r
         # Get all Guids\r
         #\r
@@ -466,19 +467,36 @@ class Dec(DecObject):
         for Arch in self.SupArchList:\r
             for Record in RecordSet1:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfDec(Record[0], TAB_PCDS_FIXED_AT_BUILD, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, DatumType, Token, Type) = GetPcdOfDec(Record[0], TAB_PCDS_FIXED_AT_BUILD, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, DatumType, Token, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet2:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfDec(Record[0], TAB_PCDS_PATCHABLE_IN_MODULE, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, DatumType, Token, Type) = GetPcdOfDec(Record[0], TAB_PCDS_PATCHABLE_IN_MODULE, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, DatumType, Token, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet3:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfDec(Record[0], TAB_PCDS_FEATURE_FLAG, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, DatumType, Token, Type) = GetPcdOfDec(Record[0], TAB_PCDS_FEATURE_FLAG, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, DatumType, Token, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet4:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC_EX, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, DatumType, Token, Type) = GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC_EX, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, DatumType, Token, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet5:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC, ContainerFile, Record[2]), Arch)                    \r
+                    (TokenGuidCName, TokenName, Value, DatumType, Token, Type) = GetPcdOfDec(Record[0], TAB_PCDS_DYNAMIC, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, DatumType, Token, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
+        #\r
+        # Update to database\r
+        #\r
+        if self.IsToDatabase:\r
+            for Key in PcdToken.keys():\r
+                SqlCommand = """update %s set Value2 = '%s' where ID = %s""" % (self.TblDec.Table, ".".join((PcdToken[Key][0], PcdToken[Key][1])), Key)\r
+                self.TblDec.Exec(SqlCommand)\r
 \r
         for Key in Pcds.keys():\r
             Pcd = PcdClass()\r
index cc08314..dda121d 100755 (executable)
@@ -111,6 +111,8 @@ class Dsc(DscObject):
             TAB_COMPONENTS, TAB_DSC_DEFINES\r
         ]\r
         \r
+        self.PcdToken = {}\r
+        \r
         #\r
         # Upper all KEYs to ignore case sensitive when parsing\r
         #\r
@@ -187,6 +189,14 @@ class Dsc(DscObject):
         # Generate Components\r
         #\r
         self.GenComponents(ContainerFile)\r
+        \r
+        #\r
+        # Update to database\r
+        #\r
+        if self.IsToDatabase:\r
+            for Key in self.PcdToken.keys():\r
+                SqlCommand = """update %s set Value2 = '%s' where ID = %s""" % (self.TblDsc.Table, ".".join((self.PcdToken[Key][0], self.PcdToken[Key][1])), Key)\r
+                self.TblDsc.Exec(SqlCommand)\r
     #End of DscToPlatform\r
 \r
     ## Get Platform Header\r
@@ -479,11 +489,15 @@ class Dsc(DscObject):
                     for NewItem in open(Filename, 'r').readlines():\r
                         if CleanString(NewItem) == '':\r
                             continue\r
-                        MergeArches(Pcds, GetPcd(NewItem, Type, Filename, -1), Arch)\r
+                        (TokenName, TokenGuidCName, Value, DatumType, MaxDatumSize, Type) = GetPcd(NewItem, Type, Filename, -1)\r
+                        MergeArches(Pcds, (TokenName, TokenGuidCName, Value, DatumType, MaxDatumSize, Type), Arch)\r
+                        self.PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
 \r
             for Record in RecordSet:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper():\r
-                    MergeArches(Pcds, GetPcd(Record[0], Type, ContainerFile, Record[2]), Arch)\r
+                    (TokenName, TokenGuidCName, Value, DatumType, MaxDatumSize, Type) = GetPcd(Record[0], Type, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenName, TokenGuidCName, Value, DatumType, MaxDatumSize, Type), Arch)\r
+                    self.PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
                 \r
         for Key in Pcds:\r
             Pcd = PcdClass(Key[0], '', Key[1], Key[3], Key[4], Key[2], Key[5], [], {}, [])\r
@@ -525,11 +539,15 @@ class Dsc(DscObject):
                     for NewItem in open(Filename, 'r').readlines():\r
                         if CleanString(NewItem) == '':\r
                             continue\r
-                        MergeArches(Pcds, GetFeatureFlagPcd(NewItem, Type, Filename, -1), Arch)\r
+                        (TokenName, TokenGuidCName, Value, Type) = GetFeatureFlagPcd(NewItem, Type, Filename, -1)\r
+                        MergeArches(Pcds, (TokenName, TokenGuidCName, Value, Type), Arch)\r
+                        self.PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
 \r
             for Record in RecordSet:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper():\r
-                    MergeArches(Pcds, GetFeatureFlagPcd(Record[0], Type, ContainerFile, Record[2]), Arch)\r
+                    (TokenName, TokenGuidCName, Value, Type) = GetFeatureFlagPcd(Record[0], Type, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenName, TokenGuidCName, Value, Type), Arch)\r
+                    self.PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
 \r
         for Key in Pcds:\r
             Pcd = PcdClass(Key[0], '', Key[1], '', '', Key[2], Key[3], [], {}, [])\r
@@ -576,11 +594,13 @@ class Dsc(DscObject):
                             continue\r
                         (K1, K2, K3, K4, K5, K6) = GetDynamicDefaultPcd(NewItem, Type, Filename, -1)\r
                         MergeArches(Pcds,  (K1, K2, K3, K4, K5, K6, IncludeFile[4]), Arch)\r
+                        self.PcdToken[Record[3]] = (K2, K1)\r
 \r
             for Record in RecordSet:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper():\r
                     (K1, K2, K3, K4, K5, K6) = GetDynamicDefaultPcd(Record[0], Type, ContainerFile, Record[2])\r
                     MergeArches(Pcds,  (K1, K2, K3, K4, K5, K6, Record[4]), Arch)\r
+                    self.PcdToken[Record[3]] = (K2, K1)\r
 \r
         for Key in Pcds:\r
             (Status, SkuInfoList) = self.GenSkuInfoList(Key[6], self.Platform.SkuInfos.SkuInfoList, '', '', '', '', '', Key[2])\r
@@ -631,11 +651,13 @@ class Dsc(DscObject):
                             continue\r
                         (K1, K2, K3, K4, K5, K6, K7, K8) = GetDynamicHiiPcd(NewItem, Type, Filename, -1)\r
                         MergeArches(Pcds,  (K1, K2, K3, K4, K5, K6, K7, K8, IncludeFile[4]), Arch)\r
+                        self.PcdToken[Record[3]] = (K2, K1)\r
 \r
             for Record in RecordSet:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper():\r
                     (K1, K2, K3, K4, K5, K6, K7, K8) = GetDynamicHiiPcd(Record[0], Type, ContainerFile, Record[2])\r
                     MergeArches(Pcds,  (K1, K2, K3, K4, K5, K6, K7, K8, Record[4]), Arch)\r
+                    self.PcdToken[Record[3]] = (K2, K1)\r
         \r
         for Key in Pcds:\r
             (Status, SkuInfoList) = self.GenSkuInfoList(Key[8], self.Platform.SkuInfos.SkuInfoList, Key[2], Key[3], Key[4], Key[5], '', '')\r
@@ -686,11 +708,13 @@ class Dsc(DscObject):
                             continue\r
                         (K1, K2, K3, K4, K5) = GetDynamicVpdPcd(NewItem, Type, Filename, -1)\r
                         MergeArches(Pcds,  (K1, K2, K3, K4, K5, IncludeFile[4]), Arch)\r
+                        self.PcdToken[Record[3]] = (K2, K1)\r
 \r
             for Record in RecordSet:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON.upper():\r
                     (K1, K2, K3, K4, K5) = GetDynamicVpdPcd(Record[0], Type, ContainerFile, Record[2])\r
                     MergeArches(Pcds,  (K1, K2, K3, K4, K5, Record[4]), Arch)\r
+                    self.PcdToken[Record[3]] = (K2, K1)\r
 \r
         for Key in Pcds:\r
             (Status, SkuInfoList) = self.GenSkuInfoList(Key[5], self.Platform.SkuInfos.SkuInfoList, '', '', '', '', Key[2], '')\r
@@ -756,15 +780,15 @@ class Dsc(DscObject):
                     SubPcdSet4 = QueryDscItem(self.TblDsc, MODEL_PCD_DYNAMIC_EX_DEFAULT, Record[3], self.FileID)\r
                     SubPcdSet5 = QueryDscItem(self.TblDsc, MODEL_PCD_DYNAMIC_DEFAULT, Record[3], self.FileID)\r
                     for SubPcd in SubPcdSet1:\r
-                        Pcd.append([DataType.TAB_PCDS_FIXED_AT_BUILD, SubPcd[0]])\r
+                        Pcd.append([DataType.TAB_PCDS_FIXED_AT_BUILD, SubPcd[0], SubPcd[3]])\r
                     for SubPcd in SubPcdSet2:\r
-                        Pcd.append([DataType.TAB_PCDS_PATCHABLE_IN_MODULE, SubPcd[0]])\r
+                        Pcd.append([DataType.TAB_PCDS_PATCHABLE_IN_MODULE, SubPcd[0], SubPcd[3]])\r
                     for SubPcd in SubPcdSet3:\r
-                        Pcd.append([DataType.TAB_PCDS_FEATURE_FLAG, SubPcd[0]])\r
+                        Pcd.append([DataType.TAB_PCDS_FEATURE_FLAG, SubPcd[0], SubPcd[3]])\r
                     for SubPcd in SubPcdSet4:\r
-                        Pcd.append([DataType.TAB_PCDS_DYNAMIC_EX, SubPcd[0]])\r
+                        Pcd.append([DataType.TAB_PCDS_DYNAMIC_EX, SubPcd[0], SubPcd[3]])\r
                     for SubPcd in SubPcdSet5:\r
-                        Pcd.append([DataType.TAB_PCDS_DYNAMIC, SubPcd[0]])\r
+                        Pcd.append([DataType.TAB_PCDS_DYNAMIC, SubPcd[0], SubPcd[3]])\r
                     Item = [Record[0], Lib, Bo, Pcd]\r
                     MergeArches(Components, self.GenComponent(Item, ContainerFile), Arch)\r
 \r
@@ -809,7 +833,9 @@ class Dsc(DscObject):
         for Pcd in Pcds:\r
             Type = Pcd[0]\r
             List = GetSplitValueList(Pcd[1])\r
-\r
+            PcdId = Pcd[2]\r
+            \r
+            TokenInfo = None\r
             #\r
             # For FeatureFlag\r
             #\r
@@ -842,6 +868,11 @@ class Dsc(DscObject):
                 CheckPcdTokenInfo(List[0], 'Components', ContainerFile)\r
                 TokenInfo = GetSplitValueList(List[0], DataType.TAB_SPLIT)\r
                 Component.PcdBuildDefinitions.append(PcdClass(TokenInfo[1], '', TokenInfo[0], '', '', '', Type, [], {}, []))\r
+            \r
+            #\r
+            # Add to PcdToken\r
+            #\r
+            self.PcdToken[PcdId] = (TokenInfo[0], TokenInfo[1])\r
 \r
         return Component\r
     #End of GenComponent\r
index 898e34f..82ab179 100755 (executable)
@@ -1,7 +1,7 @@
 ## @file\r
 # This file is used to define each component of the build database\r
 #\r
-# Copyright (c) 2007, Intel Corporation\r
+# Copyright (c) 2007 ~ 2008, Intel Corporation\r
 # All rights reserved. This program and the accompanying materials\r
 # are licensed and made available under the terms and conditions of the BSD License\r
 # which accompanies this distribution.  The full text of the license may be found at\r
@@ -23,7 +23,6 @@ from DscClassObject import *
 from String import *\r
 from BuildToolError import *\r
 from Misc import sdict\r
-#from CommonDataClass.CommonClass import *\r
 import Database as Database\r
 import time as time\r
 \r
index 4cb14ad..d542b1a 100755 (executable)
@@ -871,6 +871,7 @@ class Inf(InfObject):
     def GenPcds(self, ContainerFile):\r
         EdkLogger.debug(2, "Generate %s ..." % TAB_PCDS)\r
         Pcds = {}\r
+        PcdToken = {}\r
         \r
         #\r
         # Get all Guids\r
@@ -889,19 +890,36 @@ class Inf(InfObject):
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
                     if self.Module.Header[Arch].LibraryClass != {}:\r
                         pass\r
-                    MergeArches(Pcds, GetPcdOfInf(Record[0], TAB_PCDS_FIXED_AT_BUILD, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_FIXED_AT_BUILD, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet2:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfInf(Record[0], TAB_PCDS_PATCHABLE_IN_MODULE, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_PATCHABLE_IN_MODULE, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet3:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfInf(Record[0], TAB_PCDS_FEATURE_FLAG, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_FEATURE_FLAG, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet4:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfInf(Record[0], TAB_PCDS_DYNAMIC_EX, ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], TAB_PCDS_DYNAMIC_EX, ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
             for Record in RecordSet5:\r
                 if Record[1] == Arch or Record[1] == TAB_ARCH_COMMON:\r
-                    MergeArches(Pcds, GetPcdOfInf(Record[0], "", ContainerFile, Record[2]), Arch)\r
+                    (TokenGuidCName, TokenName, Value, Type) = GetPcdOfInf(Record[0], "", ContainerFile, Record[2])\r
+                    MergeArches(Pcds, (TokenGuidCName, TokenName, Value, Type), Arch)\r
+                    PcdToken[Record[3]] = (TokenGuidCName, TokenName)\r
+        #\r
+        # Update to database\r
+        #\r
+        if self.IsToDatabase:\r
+            for Key in PcdToken.keys():\r
+                SqlCommand = """update %s set Value2 = '%s' where ID = %s""" % (self.TblInf.Table, ".".join((PcdToken[Key][0], PcdToken[Key][1])), Key)\r
+                self.TblInf.Exec(SqlCommand)\r
 \r
         for Key in Pcds.keys():\r
             Pcd = PcdClass()\r
index 3029096..4c74220 100644 (file)
@@ -101,7 +101,6 @@ class Check(object):
             pass\r
 \r
     #\r
-    # Not to report error and warning related OS include file such as "windows.h" and "stdio.h"\r
     # Check whether a PCD is set in a DSC file or the FDF file, but not in both.\r
     #\r
     def MetaDataFileCheckPcdDuplicate(self):\r
@@ -120,7 +119,18 @@ class Check(object):
     #\r
     def MetaDataFileCheckPcdNoUse(self):\r
         if EccGlobalData.gConfig.MetaDataFileCheckPcdNoUse == '1' or EccGlobalData.gConfig.MetaDataFileCheckAll == '1':\r
-            pass\r
+            EdkLogger.quiet("Checking no use pcds ...")\r
+            SqlCommand = """\r
+                         select ID, Value2, BelongsToFile from Inf as A \r
+                         where A.Model >= %s and Model < %s\r
+                         and A.Enabled > -1\r
+                         and A.Value2 not in \r
+                             (select Value2 from Dsc as B \r
+                              where B.Model >= %s and B.Model < %s\r
+                              and B.Enabled > -1)""" % (MODEL_PCD, MODEL_META_DATA_HEADER, MODEL_PCD, MODEL_META_DATA_HEADER)\r
+            RecordSet = EccGlobalData.gDb.TblInf.Exec(SqlCommand)\r
+            for Record in RecordSet:\r
+                EccGlobalData.gDb.TblReport.Insert(ERROR_META_DATA_FILE_CHECK_PCD_NO_USE, OtherMsg = "The pcd '%s' defined in INF file is not referenced by any DSC files" % (Record[1]), BelongsToTable = 'Inf', BelongsToItem = Record[0])\r
         \r
     #\r
     # Check whether having duplicate guids defined for Guid/Protocol/Ppi\r
@@ -139,15 +149,15 @@ class Check(object):
             #\r
             self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL, MODEL_EFI_PROTOCOL, EccGlobalData.gDb.TblDec)\r
             self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL, MODEL_EFI_PROTOCOL, EccGlobalData.gDb.TblDsc)\r
-            self.CheckGuidProtocolPpiValue(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL, MODEL_EFI_GUID)\r
+            self.CheckGuidProtocolPpiValue(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PROTOCOL, MODEL_EFI_PROTOCOL)\r
             #\r
             # Check ppi\r
             #\r
             self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI, MODEL_EFI_PPI, EccGlobalData.gDb.TblDec)\r
             self.CheckGuidProtocolPpi(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI, MODEL_EFI_PPI, EccGlobalData.gDb.TblDsc)\r
-            self.CheckGuidProtocolPpiValue(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI, MODEL_EFI_GUID)\r
+            self.CheckGuidProtocolPpiValue(ERROR_META_DATA_FILE_CHECK_DUPLICATE_PPI, MODEL_EFI_PPI)\r
 \r
-            EdkLogger.quiet("Checking duplicate guid/ppi/protocol done!")\r
+            #EdkLogger.quiet("Checking duplicate guid/ppi/protocol done!")\r
     \r
     #\r
     # Check whether these is duplicate Guid/Ppi/Protocol name\r
@@ -164,6 +174,8 @@ class Check(object):
                      select A.ID, A.Value1 from %s as A, %s as B \r
                      where A.Model = %s and B.Model = %s \r
                      and A.Value1 = B.Value1 and A.ID <> B.ID \r
+                     and A.Enabled > -1\r
+                     and B.Enabled > -1\r
                      group by A.ID\r
                      """ % (Table.Table, Table.Table, Model, Model)\r
         RecordSet = Table.Exec(SqlCommand)\r
@@ -190,9 +202,7 @@ class Check(object):
                      """ % (Table.Table, Table.Table, Model, Model)\r
         RecordSet = Table.Exec(SqlCommand)\r
         for Record in RecordSet:\r
-            EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg = "The %s value '%s' is defined more than one time" % (Name, Record[1]), BelongsToTable = Table.Table, BelongsToItem = Record[0])\r
-\r
-\r
+            EccGlobalData.gDb.TblReport.Insert(ErrorID, OtherMsg = "The %s value '%s' is used more than one time" % (Name, Record[1]), BelongsToTable = Table.Table, BelongsToItem = Record[0])\r
 \r
 ##\r
 #\r