Tabellen anhand CDaoRecordset erstellen

anmae

Erfahrenes Mitglied
Hallo,

ich habe 2 Datenbanken und möchte die Tabellen der einen Datenbank in die andere Übertragen.
Ich habe nun also beide geöffnet und öffne die Tabelle in der Quell Datenbank mit einem recordset.
Gibt es nun eine einfache Möglichkeit eine neue Tabelle in der Zieldatenbank anhand dieses recordsets zu erstellen?

Danke schonmal
 
Also, ich bin nun soweit das ich die Tabellen in der neuen Datenbank anhand der Tabellen der alten erstelle.

Nun muß ich nur noch die Daten übertragen.

Kann ich ein Recordset oder Querydef der einen db einer Tabelle der anderen db zuweisen?

Code:
 		dbsource.Open(strFileName,0,0); //alte Tabelle öffnen
 		dbdest.Open(Pathdest,0,0); //neue Tabelle öffnen
		
		CDaoTableDef * newTable;
		CDaoTableDefInfo* tableInfo;
		CDaoTableDef* srctableDef;
		CDaoFieldInfo * fieldInfo;
		CDaoQueryDef * srcQDef;

		fieldInfo = new CDaoFieldInfo(); 
		tableInfo = new CDaoTableDefInfo();
		srctableDef  = new CDaoTableDef(&dbsource);
		rs = new CDaoRecordset( &dbsource  );
		newTable = new CDaoTableDef(&dbdest); //neue Tabelle öffnen

		int iCount=0;
		int itdCount = dbsource.GetTableDefCount();
		
		for (iCount = 0; iCount < itdCount; iCount++){ //alle Tabellen der alten db
			try{
				dbsource.GetTableDefInfo(iCount,*tableInfo); //Infos der alten Tabelle
				srctableDef->Open(tableInfo->m_strName); //alte Tabelle öffnen
				rs->Open(srctableDef); //Recordset der alten Tabelle
				newTable->Create(tableInfo->m_strName ,tableInfo->m_lAttributes );
				for(int iFieldCount=0;iFieldCount < rs->GetFieldCount();iFieldCount++){
					rs->GetFieldInfo(iFieldCount,*fieldInfo, AFX_DAO_ALL_INFO );
					newTable->CreateField(*fieldInfo); //Spalten erstellen
				}
				newTable->Append (); //neue Tabelle erstellen
				
				//Daten einfügen


			}
			catch( CDaoException* e ){}
			rs->Close();
			newTable->Close ();
			srctableDef->Close();
		}

		delete newTable;
		delete rs;
		delete srctableDef;
		delete tableInfo;
		delete fieldInfo;
		dbsource.Close();
		dbdest.Close();
 
Zuletzt bearbeitet:
ich habs jetzt doch in einer Schleife gemacht.

wahrscheinlich ein wenig zu umständlich, aber es klappt so:


(Code bei Daten einfügen einfügen )
Code:
				CDaoRecordset* newrs;
				newrs = new CDaoRecordset(&dbdest);
				newrs->Open(newTable);
				COleVariant var;
				rs->MoveFirst();
				int recCount = rs->GetRecordCount();
				for( int irecCount=0; irecCount< recCount;irecCount ++){
					newrs->AddNew ();
					newrs->Update ();
					newrs->MoveLast();
					for(int iFieldCount=0;iFieldCount < rs->GetFieldCount();iFieldCount++){
						try{
							newrs->Edit();
							rs->GetFieldValue(iFieldCount,var);
							CDaoFieldInfo* fInfo;
							fInfo = new CDaoFieldInfo();
							rs->GetFieldInfo(iFieldCount,*fInfo);
							newrs->SetFieldValue(fInfo->m_strName,var);
							delete fInfo;
							newrs->Update ();
						}catch( CDaoException* e ){}
					}
					rs->MoveNext ();
				}
				newrs->Close();
				delete newrs;
 
Zurück