Want to protect your cyber security and still get fast solutions? Ask a secure question today.Go Premium

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 377
  • Last Modified:

Urgent help! CdaoDatabase add multiple new fields ...

Hi,

I have created a new database as specified by user, then i want to insert new fields (together with values got from an old database). i use the following code:(outline)

// create the new database
if (!createDatabase(&m_newDatabase, m_newDatabaseName))
    m_newDatabase = NULL;

// read values from old one and add them to the new one
for (i=0;i<count;i++){

......
  // add/create  new fields
   openDatabase(m_newDatabase, m_strDatabaseName, FALSE);      
   strcpy(sql_add,"CREATE TABLE DataTab (");
   strcat(sql_add,fd_name);
   strcat(sql_add," CHAR(10))");
   m_newDatabase->Execute(sql_add);       
   m_newDatabase->Close();

   m_strTableName="DataTab";
   openDatabase(m_newDatabase, m_newDatabaseName, FALSE);
  openTableDef(m_newDatabase,&m_newTableDef,                         m_strTableName);

  // open a recordset for the new database
  CDaoRecordset rs1(m_newDatabase);            
  rs1.Open(m_newTableDef);

  //open a recordset for the old database
  openDatabase(&m_oldDatabase, m_oldDatabaseName, FALSE);
  openTableDef(m_oldDatabase, &m_oldTableDef, m_strTableName);
  CDaoRecordset rs(m_oldDatabase);            
  rs.Open(m_pTableDef);
 // read values from old one and add them to the new one
 ....
  rs1.AddNew();
  rs1.SetFieldValue(field_name,age_str);
  rs1.Update();

}


my problem is :

for the first time i add ONE new field, it works; but later on if i did not delete the newly created databse, and if i continue to add new filed(s) (even to another new database), it says:

the DataTab already exists...

i use the same table name for the old and new database...

any one has any idea? pls help me!!!! i need to solve it urgently!!!!

thanks a million!!!!

0
greenbird
Asked:
greenbird
  • 5
  • 3
1 Solution
 
V_BapatCommented:
Why don't you split the job into 2 parts?

1. Create tables & fields.
2. Copy records.

This will make it easy.

I have code to copy all the tables which I can give you.
0
 
greenbirdAuthor Commented:
Hi,

where is ur code? :) u can email to :
aibinbin@hotmail.com...

i think in my another post, u answered my qn rite? i post new thing there, pls check it out...

thanks a lot for ur greate help! really appreciate it..
0
 
V_BapatCommented:
This function copies all the tables. All the tables should already be created before calling this function.

So you have to write a function to create all the tables and create the fields.

CopyTables()
{
      COleVariant covFieldValue;
      CString strTableName;
      int nTableCount, i, j, nFieldCount;
      CDaoTableDefInfo pTableInfo;
      
      CDaoDatabase* m_pSrcDatabase = NULL;
      CDatabase::OpenDatabase(&m_pSrcDatabase, m_strDbName);
      
      CDaoRecordset m_pSrc(m_pSrcDatabase);
      CDaoRecordset m_pDest(m_pDatabase);
      
      nTableCount = m_pDatabase->GetTableDefCount();
      
      for(j = 0; j < nTableCount; j++)
      {
            m_pDatabase->GetTableDefInfo(j, pTableInfo);

            if(pTableInfo.m_lAttributes & dbSystemObject | pTableInfo.m_lAttributes & dbHiddenObject)
                  continue;

            m_strSQL = CString("SELECT * FROM ") + pTableInfo.m_strName;
            
            m_pSrc.Open(dbOpenDynaset, m_strSQL);
            m_pSrc.MoveFirst();
            m_pDest.Open(dbOpenDynaset, m_strSQL);
            
            nFieldCount = m_pSrc.GetFieldCount();
            
            while(!m_pSrc.IsEOF())
            {
                  m_pDest.AddNew();
                  for(i = 0; i < nFieldCount; i++)
                  {
                        m_pSrc.GetFieldValue(i, covFieldValue);
                        m_pDest.SetFieldValue(i, covFieldValue);
                  }
                  m_pDest.Update();
                  m_pDest.MoveLast();
                  m_pSrc.MoveNext();
            }
            
            m_pSrc.Close();
            m_pDest.Close();
      }

      CDatabase::CloseDatabase(&m_pSrcDatabase);
}

Vicky

0
What does it mean to be "Always On"?

Is your cloud always on? With an Always On cloud you won't have to worry about downtime for maintenance or software application code updates, ensuring that your bottom line isn't affected.

 
greenbirdAuthor Commented:
Hi, Vicky,

thanks a lot! i will try it tomorrow.. but could u pls refer to my another post: add field problem also, i have some qns there waiting for ur help... thanks a lot!
0
 
V_BapatCommented:
greenbird
I was out of town for last 4 days. I will try it today.

What about this one. Did you try it?

Vicky
0
 
greenbirdAuthor Commented:
Hi, V_bapat,

no wonder why u did not help me .. :) now feel good that u will help me :) i need to solve it by tomorrow....
Thanks a lot!
0
 
greenbirdAuthor Commented:
Adjusted points to 20
0
 
greenbirdAuthor Commented:
Hi,

sovle it already :))) thanks a lot for ur help!
0

Featured Post

Concerto's Cloud Advisory Services

Want to avoid the missteps to gaining all the benefits of the cloud? Learn more about the different assessment options from our Cloud Advisory team.

  • 5
  • 3
Tackle projects and never again get stuck behind a technical roadblock.
Join Now