Icon View Incident Report

Serious Serious
Reported By: Gerald McKoy
Reported On: 11/14/2001
For: Version 3.03 Build 1
# 938 DBSYS Utility Not Creating Proper Reverse Engineering Code for C++Builder

I created a test table called media and reverse engineered it with the option to include the data checked. When I tried compiling the code withing C builder 5 I received several errors. The following code was produced by the reverse engineer routine within the database system utility and after it you will find my fixed version of the code:


// DBSYS Code

void __fastcall CreateMediaTable(AnsiString CreateDatabaseName)
{
   TDBISAMTable *TableToCreate;

   TableToCreate = new TDBISAMTable(Application);
   try
      {
      TableToCreate->DatabaseName=CreateDatabaseName;
      TableToCreate->TableName="media";
      TableToCreate->Exclusive=True;
      TableToCreate->FieldDefs->Clear();
      TableToCreate->FieldDefs->Add("MEDIA_ID",ftAutoInc,0,false);
      TableToCreate->FieldDefs->Add("MEDIA_TYPE",ftString,20,false);
      TableToCreate->IndexDefs->Clear();
      TableToCreate->IndexDefs->Add("","MEDIA_ID",TIndexOptions() << 
ixPrimary << ixUnique);
      TableToCreate->IndexDefs->Add("IDX_MEDIATYPE","MEDIA_TYPE",
TIndexOptions());
      if ( !TableToCreate->Exists )
         {
         TableToCreate->CreateTable();
         TableToCreate->RestructureFieldDefs->Clear();
         TableToCreate->RestructureFieldDefs->Add("MEDIA_ID",ftAutoInc,0,false,
"","","","",fcNoChange,1);
         TableToCreate->RestructureFieldDefs->Add("MEDIA_TYPE",ftString,20,
false,"","","","",fcNoChange,2);
         TableToCreate->RestructureIndexDefs->Clear();
         TableToCreate->RestructureIndexDefs->Add("","MEDIA_ID",
TIndexOptions() << ixPrimary << ixUnique,icNone);
         TableToCreate->RestructureIndexDefs->Add("IDX_MEDIATYPE","MEDIA_TYPE",
TIndexOptions(),icNone);
         TableToCreate->RestructureTable(0,0,1,0,false,"","",512,-1,True);
         }
         TableToCreate->Open;
            TableToCreate->SuppressAutoIncValues=True;
         try
            {
            TableToCreate->AppendRecord(ARRAYOFCONST(1,
                     "Tape"));
            TableToCreate->AppendRecord(ARRAYOFCONST(2,
                     "CD"));
            TableToCreate->AppendRecord(ARRAYOFCONST(3,
                     "VHS"));
            }
         __finally
            {
            TableToCreate->Close;
            }
         }
      }
   __finally
      {
      TableToCreate->Free();
      }
}


// My Code

void __fastcall CreateMediaTable(AnsiString CreateDatabaseName)
{
   TDBISAMTable *TableToCreate;

   TableToCreate = new TDBISAMTable(Application);
   try
   {
      TableToCreate->DatabaseName=CreateDatabaseName;
      TableToCreate->TableName="media";
      TableToCreate->Exclusive=True;
      TableToCreate->FieldDefs->Clear();
      TableToCreate->FieldDefs->Add("MEDIA_ID",ftAutoInc,0,false);
      TableToCreate->FieldDefs->Add("MEDIA_TYPE",ftString,20,false);
      TableToCreate->IndexDefs->Clear();
      TableToCreate->IndexDefs->Add("","MEDIA_ID",TIndexOptions() << 
ixPrimary << ixUnique);
      TableToCreate->IndexDefs->Add("IDX_MEDIATYPE","MEDIA_TYPE",
TIndexOptions());
      if ( !TableToCreate->Exists )
      {
         TableToCreate->CreateTable();
         TableToCreate->RestructureFieldDefs->Clear();
         TableToCreate->RestructureFieldDefs->Add("MEDIA_ID",ftAutoInc,0,false,
"","","","",fcNoChange,1);
         TableToCreate->RestructureFieldDefs->Add("MEDIA_TYPE",ftString,20,
false,"","","","",fcNoChange,2);
         TableToCreate->RestructureIndexDefs->Clear();
         TableToCreate->RestructureIndexDefs->Add("","MEDIA_ID",
TIndexOptions() << ixPrimary << ixUnique,icNone);
         TableToCreate->RestructureIndexDefs->Add("IDX_MEDIATYPE","MEDIA_TYPE",
TIndexOptions(),icNone);
         TableToCreate->RestructureTable(0,0,1,0,false,"","",512,-1,True);

         TableToCreate->Open();
         TableToCreate->SuppressAutoIncValues=True;
         try
         {
            TableToCreate->AppendRecord(ARRAYOFCONST((1, "Tape")));
            TableToCreate->AppendRecord(ARRAYOFCONST((2, "CD")));
            TableToCreate->AppendRecord(ARRAYOFCONST((3, "VHS")));
         }
         __finally
         {
            TableToCreate->Close();
         }
      }
    }
   __finally
   {
    TableToCreate->Free();
   }
}



Comments Comments and Workarounds
The ARRAYOFCONST declarations were incorrect as well as the TDBISAMTable.Close method call.


Resolution Resolution
Fixed Problem on 11/26/2001 in version 3.04 build 1
Image