Solved

Urgent help! CdaoDatabase add multiple new fields ...

Posted on 2000-02-26
8
341 Views
Last Modified: 2013-11-20
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
Comment
Question by:greenbird
  • 5
  • 3
8 Comments
 
LVL 3

Expert Comment

by:V_Bapat
ID: 2569143
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
 

Author Comment

by:greenbird
ID: 2571130
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
 
LVL 3

Accepted Solution

by:
V_Bapat earned 20 total points
ID: 2571761
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
Is Your AD Toolbox Looking More Like a Toybox?

Managing Active Directory can get complicated.  Often, the native tools for managing AD are just not up to the task.  The largest Active Directory installations in the world have relied on one tool to manage their day-to-day administration tasks: Hyena. Start your trial today.

 

Author Comment

by:greenbird
ID: 2572677
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
 
LVL 3

Expert Comment

by:V_Bapat
ID: 2586484
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
 

Author Comment

by:greenbird
ID: 2586620
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
 

Author Comment

by:greenbird
ID: 2586621
Adjusted points to 20
0
 

Author Comment

by:greenbird
ID: 2587153
Hi,

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

Featured Post

Efficient way to get backups off site to Azure

This user guide provides instructions on how to deploy and configure both a StoneFly Scale Out NAS Enterprise Cloud Drive virtual machine and Veeam Cloud Connect in the Microsoft Azure Cloud.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
Macro to save highlighted rows as a separate file 5 43
maxBlock challenge 30 129
Line meaning 9 85
mapAB Challlenge 35 144
Introduction: The undo support, implementing a stack. Continuing from the eigth article about sudoku.   We need a mechanism to keep track of the digits entered so as to implement an undo mechanism.  This should be a ‘Last In First Out’ collec…
Introduction: Dialogs (2) modeless dialog and a worker thread.  Handling data shared between threads.  Recursive functions. Continuing from the tenth article about sudoku.   Last article we worked with a modal dialog to help maintain informat…
This video will show you how to get GIT to work in Eclipse.   It will walk you through how to install the EGit plugin in eclipse and how to checkout an existing repository.
Nobody understands Phishing better than an anti-spam company. That’s why we are providing Phishing Awareness Training to our customers. According to a report by Verizon, only 3% of targeted users report malicious emails to management. With compan…

770 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question