Cloner la structure d'une table à partir d'une base access

cs_Cameleon69 Messages postés 98 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 7 août 2005 - 20 janv. 2004 à 14:26
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 - 22 janv. 2004 à 19:12
Bonjour

Je cherche comment cloner la structure dans une base de donénes MS ACCESS d'une table existante dans une nouvelle que je dois créer.

Exemple
-TableA (existe et possède des champs, table ref)

il faut que je duplique cette structure pour créer la TableB.

je fais quelque chose de ce style mais cela ne donne rien :

DataTable SourceTable = new DataTable("TableA");
DataTable NewTable; 
NewTable = SourceTable.Clone();
NewTable.TableName = "TableB";


Quelqu'un peut-il m'aider SVP

7 réponses

TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
20 janv. 2004 à 14:45
private void CopyDataTable(DataTable myDataTable){
// Create an object variable for the copy.
DataTable copyDataTable;
copyDataTable = myDataTable.Copy();
// Insert code to work with the copy.
}

ET çà ?

::|The S@ib|::
MVP C#.NET
0
cs_Cameleon69 Messages postés 98 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 7 août 2005 2
20 janv. 2004 à 14:54
Marche pas plus je ne comprends pas, cela devrait pourtant fonctionner.
TableA est vide, il n'y a que la structure.
J'ai pas mal chercher sur le net et sur MSDN mais rien je ne trouve pas de solution.
J'ai changer le Clone en Copy mais cela ne fait rien. Que cette fonction soit interne ou externe cela ne change rien au problème.
Je ne comprends pas.
0
TheSaib Messages postés 2367 Date d'inscription mardi 17 avril 2001 Statut Membre Dernière intervention 26 décembre 2007 23
20 janv. 2004 à 14:59
CA devrait marcher , essaye avec une table remplie pour voir !

::|The S@ib|::
MVP C#.NET
0
cs_Cameleon69 Messages postés 98 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 7 août 2005 2
20 janv. 2004 à 15:04
non pas plus, rien a faire ???
il y a quelque chose que je dois mal faire pas possible autrement !!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
22 janv. 2004 à 00:45
bonjour,
pour une simple copie mémoire d'une DataTable, il n'y a rien d'autre à faire que ça :
créer un projet muni d'une connexion sur la table access et générer le Dataset (dsTest) sur le DataAdapter
ajouter deux boutons et deux datagrid (pour "voir" le résultat de la copie)

private void btnCharger_Click(object sender, System.EventArgs e)
{
oleDbDataAdapter1.Fill(dsTest1, "Test");
dataGrid1.DataSource = dsTest1.Test;
}

private void btnCopier_Click(object sender, System.EventArgs e)
{
copieDataTable = dsTest1.Test.Copy();
dataGrid2.DataSource = copieDataTable;
}
0
cs_Cameleon69 Messages postés 98 Date d'inscription lundi 31 décembre 2001 Statut Membre Dernière intervention 7 août 2005 2
22 janv. 2004 à 12:57
Bonjour

Oui mais ce que je veux c'est que ma table soit cloner non pas en mémoire mais que cela la crée dans mon fichier mdb, sur lequel j'ai fait ma connexion.
C'est la précisemment que j'ai un probleme, je ne vois pas où je dois faire une sorte de commit pour que la modification faite en mémoire puisse être répercuté sur mon fichier.
0
cs_vieuxLion Messages postés 455 Date d'inscription samedi 26 octobre 2002 Statut Membre Dernière intervention 6 avril 2004 8
22 janv. 2004 à 19:12
bonjour,

essaie donc ce bout de code :
il utilise un DA pour la table source et un autre popur la table cible... mais un seul Dataset
Il est très important de remplir le Dataset avec AcceptChangesDuringFill, sinon tous les Rows sont à l'état "Unchanged" et aucune mise à jour n'est faite lors de l'Update !!!
Il est bien sur aussi très important de créer l'insertCommand pour le DACible

{
OleDbConnection cnx =null;
try
{
cnx = new OleDbConnection(@"Data Source=""D:\test.mdb"";
Provider=""Microsoft.Jet.OLEDB.4.0""");
OleDbDataAdapter daSource = new OleDbDataAdapter ("Select * from Test", cnx);
daSource.AcceptChangesDuringFill = false;//important
DataSet ds = new DataSet();
daSource.Fill(ds, "Test");
if (ds.Tables["Test"].Rows.Count==0)
{ MessageBox.Show("Dataset Vide"); return ; }
OleDbDataAdapter daCible = new OleDbDataAdapter ("Select * from Test2", cnx);
OleDbCommandBuilder cb = new OleDbCommandBuilder (daCible);
daCible.InsertCommand = cb.GetInsertCommand();
//daCible.UpdateCommand = cb.GetUpdateCommand();
//daCible.DeleteCommand = cb.GetDeleteCommand();
cnx.Open();
daCible.Update(ds, "Test");
}
finally { cnx.Close(); }
}
0
Rejoignez-nous