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

Signaler
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
-
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
-
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

Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
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


 
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
4822
Date d'inscription
lundi 11 novembre 2002
Statut
Membre
Dernière intervention
15 novembre 2016
14
Salut,

Regarde cette discussion

A+
Exploreur

 Linux a un noyau, Windows un pépin

 
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
1141
Date d'inscription
mercredi 7 mars 2007
Statut
Membre
Dernière intervention
19 septembre 2007
3
Salut,

et avec un recordset, ca fonctionne pas.

rst.Open "DELETE Ton_champ FROM Ta_Table", Ta_Connection
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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
Messages postés
14828
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
18 novembre 2021
157
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