[DAO/VB6] Suppression d'une colonne dans une table

NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 - 30 mai 2007 à 16:41
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 - 31 mai 2007 à 09:34
Bonjour,

Dans le cadre d'une migration Access -> SQL Server d'une base de données (utilisée par un programme en VB6), j'utilise DAO (Comme cela l'a été depuis le début, je n'ai pas envi de réécrire toute l'application).

lDB : (connexion par ODBC à mon serveur SQL Server 2000)
    Dim lDB As Database
    Set lDB = dao.Workspaces(0).OpenDatabase("ServerSql", dbDriverCompleteRequired, False, _
        "ODBC;DATABASE=BddTest;DSN=BddTest;pwd=''")

Or le code suivant :
    Dim lTable As dao.TableDef
    Set lTable = lDB.CreateTableDef("TTest2")
    lTable.Fields.Append lTable.CreateField("Champ1", dbLong)
   
    lDB.TableDefs.Append lTable
    MsgBox "Controle création table TTest2, 1 champ : ""Champ1"" type int"
   
    lTable.Fields.Append lTable.CreateField("Champ2", dbText, 100)
    MsgBox "Controle altération table ""TTest2"" , 2 champs : ""Champ1"" type int, ""Champ2"" type varchar(100)"
   
    lTable.Fields.Append lTable.CreateField("Champ3", dbDouble)
    MsgBox "Controle altération table ""TTest2"" , 3 champs : ""Champ1"" type int, ""Champ2"" type varchar(100), ""Champ3"" type float"
   
    lTable.Fields.Delete "Champ2" 'ERREUR
    'N°3273, Méthode non applicable à cet objet.
    MsgBox "Controle altération table ""TTest2"" , 2 champs : ""Champ1"" type int, ""Champ3"" type float"

Normalement le champ "Champ2" devrait-être supprimmé, mais j'ai l'erreur indiquée.
Comment soultionner ce problème ?

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1

10 réponses

cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
30 mai 2007 à 17:09
Salut,


Je vais sûrement dire une bourde, mais qui ne tente rien n'a rien :

lTable.Fields.Delete ("Champ2")


A+
Exploreur

 Linux a un noyau, Windows un pépin


 
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
30 mai 2007 à 17:18
Bonjour

Tu as raison, qui ne tente rien ..., mais ça ne courre (marche) toujours pas, même erreur.
Merci de prendre un peu de ton temps quand même.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
cs_Exploreur Messages postés 4822 Date d'inscription lundi 11 novembre 2002 Statut Membre Dernière intervention 15 novembre 2016 14
30 mai 2007 à 17:33
Salut,

Regarde cette discussion

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
30 mai 2007 à 17:35
Bonjour

Je recherche encore, j'ai vu qu'avec Access, ça marche sans pb, ça doit venir d'ODBC.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0

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

Posez votre question
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
30 mai 2007 à 17:37
Bonjour

Merci Explorer, je regarderais ça demain.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
31 mai 2007 à 08:29
Bonjour,

Bon les nouvelles sont pas bonnes :
L'instruction Delete fonctionne sans pb avec Access, mais pas avec ODBC.

J'ai essayé cela :
    Dim lReq As QueryDef
    Set lReq = lDB.CreateQueryDef("Essai", "ALTER TABLE TTest2 DROP Champ2")
    lReq.Execute

même erreur sur : Set lReq ......

Je désespère.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
cs_Nicko11 Messages postés 1141 Date d'inscription mercredi 7 mars 2007 Statut Membre Dernière intervention 19 septembre 2007 3
31 mai 2007 à 08:55
Salut,

et avec un recordset, ca fonctionne pas.

rst.Open "DELETE Ton_champ FROM Ta_Table", Ta_Connection
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
31 mai 2007 à 09:01
Bonjour

Nicko11, je te rappel que je travaille avec DAO 3.6, pas avec ADO.

dim RS1 as Recordset
Set RS1 = lDB.OpenRecordset("ALTER TABLE TTest2 DROP COLUMN Champ2")

Erreur :
3324 : La requête est une requête de définition de données.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
31 mai 2007 à 09:29
Bonjour

Ca y est, j'ai fini par trouver :

Set RS1 = lDB.OpenRecordset("ALTER TABLE TTest2 DROP COLUMN Champ2", dbOpenSnapshot, dbSQLPassThrough)

Merci pour votre précieuse aide.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0
NHenry Messages postés 15030 Date d'inscription vendredi 14 mars 2003 Statut Modérateur Dernière intervention 26 novembre 2022 157
31 mai 2007 à 09:34
Bonjour

Précision, ça ne fonctionne qu'avec ODBC, pas avec Access.

Balèse la personne qui a pensé au pansement à penser (ou à panser, pensée).
VB (6, .NET1&2), C++, C#.Net1
0