OVH Cloud OVH Cloud

Supprimer toutes les relations d'un seul coup par programmation?

5 réponses
Avatar
Michel J
Bonjour
En fait je veux que si on fait une copie de ma base sur un ordinateur
autre que ceux de ma société, ma base soit vide de toutes ses tables
(donc supprimer toutes les tables) ou effacer leur contenu, ce qui
revient au même en rendant la copie inutilisable.
Pour cela la macro autoexec recherche à l'ouverture un ficher sur la
racine de C: présent uniquement sur tous les ordi de ma société et
évidemment absent de la racine de C:\ de tout ordi normal (c'est un
fichier word renommé en n'importe quoi, .ini par exemple.
Si à l'ouverture de la base sur un ordi, ce fichier est présent, on
efface pas les tables, mais si ce fichier est absent, on efface les
tables ou leur contenu.
Pour le moment, ça m'efface bien les tables sans relations, mais pour
les tables avec une relation en cascade, j'ai le message classique:
"rreur d'execution 2387: vous ne pouvez pas supprimer la table "XX" car
elle intervient dans une ou plusieurs relations, si vous voulez
supprimer cette table, supprimer d'abord les relations dans la fenêtre
Relations."
Et Apparition de débogage.
Evidemment je ne veux pas demander aux utilisateurs, qu'ils soient sur
un ordi de ma société ou sur un ordi non autorisé (donc sans mon pseudo
fichier .ini s'ils veulent supprimer les relations; et je cherche à
supprimer ce message.
Comment le supprimer et que mes tables soient supprimer sans
avertissement, même si elles sont en relation ?
Merci
MJ

5 réponses

Avatar
The_Team
Désolé, mais cette méthode de protection de vaut rien.

Si une personne mal intentionnée a fait une copie de la base (par exemple en
la gravant) pour l'exploiter en dehors de votre société,
elle va la recopier sur son DD. Au démarrage, l'application va effacer les
tables. OK.

Si cette personne a réussi à recopier le fichier, elle a le niveau pour
savoir que c'est une base access.

Il est donc évident de découvrir l'astuce. Il lui suffit de recopier la base
à nouveau sur son DD, puiqu'elle l'a sr son CD,
puis d'ouvrir les tables avec ACCESS, ou de faire un lien, sans passer par
l'interface habituelle.

Inutile donc de poursuivre sur cette voie. Il faudrait plutôt chercher une
solution en Amont qui évite une "copie" de la base, et sa sortie de vos
locaux,
soit physiquement, soit par du code.

Lucky_Team

www.access-developpement.com

"Michel J" a écrit dans le message de
news:
Bonjour
En fait je veux que si on fait une copie de ma base sur un ordinateur
autre que ceux de ma société, ma base soit vide de toutes ses tables
(donc supprimer toutes les tables) ou effacer leur contenu, ce qui
revient au même en rendant la copie inutilisable.
Pour cela la macro autoexec recherche à l'ouverture un ficher sur la
racine de C: présent uniquement sur tous les ordi de ma société et
évidemment absent de la racine de C: de tout ordi normal (c'est un
fichier word renommé en n'importe quoi, .ini par exemple.
Si à l'ouverture de la base sur un ordi, ce fichier est présent, on
efface pas les tables, mais si ce fichier est absent, on efface les
tables ou leur contenu.
Pour le moment, ça m'efface bien les tables sans relations, mais pour
les tables avec une relation en cascade, j'ai le message classique:
"rreur d'execution 2387: vous ne pouvez pas supprimer la table "XX" car
elle intervient dans une ou plusieurs relations, si vous voulez
supprimer cette table, supprimer d'abord les relations dans la fenêtre
Relations."
Et Apparition de débogage.
Evidemment je ne veux pas demander aux utilisateurs, qu'ils soient sur
un ordi de ma société ou sur un ordi non autorisé (donc sans mon pseudo
fichier .ini s'ils veulent supprimer les relations; et je cherche à
supprimer ce message.
Comment le supprimer et que mes tables soient supprimer sans
avertissement, même si elles sont en relation ?
Merci
MJ



Avatar
didier
Bonjour

Si vous voulez pousuivre dans cette voie sachant qu'elle
me parait pas être une solution convable mais bon
Dans vos relations, il faut cocher effacer en cascade les
enregistrements correspondants
Cela vous effacera à chaque voie les enregistrement et
vous ne devriez plus avoit le message. Par contre si un
utilisateur efface un enregistrement dans votre société
cela va entrainer la suppression en cascade des
enregistrements liés

-----Message d'origine-----
Désolé, mais cette méthode de protection de vaut rien.

Si une personne mal intentionnée a fait une copie de la
base (par exemple en

la gravant) pour l'exploiter en dehors de votre société,
elle va la recopier sur son DD. Au démarrage,
l'application va effacer les

tables. OK.

Si cette personne a réussi à recopier le fichier, elle a
le niveau pour

savoir que c'est une base access.

Il est donc évident de découvrir l'astuce. Il lui suffit
de recopier la base

à nouveau sur son DD, puiqu'elle l'a sr son CD,
puis d'ouvrir les tables avec ACCESS, ou de faire un
lien, sans passer par

l'interface habituelle.

Inutile donc de poursuivre sur cette voie. Il faudrait
plutôt chercher une

solution en Amont qui évite une "copie" de la base, et
sa sortie de vos

locaux,
soit physiquement, soit par du code.

Lucky_Team

www.access-developpement.com

"Michel J" a écrit dans le
message de

news:
Bonjour
En fait je veux que si on fait une copie de ma base
sur un ordinateur


autre que ceux de ma société, ma base soit vide de
toutes ses tables


(donc supprimer toutes les tables) ou effacer leur
contenu, ce qui


revient au même en rendant la copie inutilisable.
Pour cela la macro autoexec recherche à l'ouverture un
ficher sur la


racine de C: présent uniquement sur tous les ordi de
ma société et


évidemment absent de la racine de C: de tout ordi
normal (c'est un


fichier word renommé en n'importe quoi, .ini par
exemple.


Si à l'ouverture de la base sur un ordi, ce fichier
est présent, on


efface pas les tables, mais si ce fichier est absent,
on efface les


tables ou leur contenu.
Pour le moment, ça m'efface bien les tables sans
relations, mais pour


les tables avec une relation en cascade, j'ai le
message classique:


"rreur d'execution 2387: vous ne pouvez pas supprimer
la table "XX" car


elle intervient dans une ou plusieurs relations, si
vous voulez


supprimer cette table, supprimer d'abord les relations
dans la fenêtre


Relations."
Et Apparition de débogage.
Evidemment je ne veux pas demander aux utilisateurs,
qu'ils soient sur


un ordi de ma société ou sur un ordi non autorisé
(donc sans mon pseudo


fichier .ini s'ils veulent supprimer les relations; et
je cherche à


supprimer ce message.
Comment le supprimer et que mes tables soient
supprimer sans


avertissement, même si elles sont en relation ?
Merci
MJ




.




Avatar
Michel J
Oui, j'avais bien pensé à cette parade qui consiste à faire une copie
illicite sur CD, mais je ne vois aucun moyen de l'empecher par code, et
je me suis dit que de consulter une Base sur CD en lecture seule, c'est
un peu gonflant surtout qu'on ne peut pas se servir utilement des
formulaires et états.
Mais aussi j'ai oublié de dire que la macro autoexec declenche
l'ouverture d'un formulaire où on tape un soit-disant mot de passe et
que ce formulaire est en mode modal et donc on est coincé sur ce
formulaire sans avoir la main pour faire autre chose tant que le mot de
passe n'est pas bon, et entre-temps mes tables seraient effacées.
Donc je ne vois pas de solutions en utilisant un code pour eviter la copie.
Et je ne sais toujours pas comment eviter ce message d'access qui me
demande d'effacer tout d'abord les relations entre les tables .!
Merci si vous avez des idées.
MJ

The_Team a écrit:
Désolé, mais cette méthode de protection de vaut rien.

Si une personne mal intentionnée a fait une copie de la base (par exemple en
la gravant) pour l'exploiter en dehors de votre société,
elle va la recopier sur son DD. Au démarrage, l'application va effacer les
tables. OK.

Si cette personne a réussi à recopier le fichier, elle a le niveau pour
savoir que c'est une base access.

Il est donc évident de découvrir l'astuce. Il lui suffit de recopier la base
à nouveau sur son DD, puiqu'elle l'a sr son CD,
puis d'ouvrir les tables avec ACCESS, ou de faire un lien, sans passer par
l'interface habituelle.

Inutile donc de poursuivre sur cette voie. Il faudrait plutôt chercher une
solution en Amont qui évite une "copie" de la base, et sa sortie de vos
locaux,
soit physiquement, soit par du code.

Lucky_Team

www.access-developpement.com

"Michel J" a écrit dans le message de
news:

Bonjour
En fait je veux que si on fait une copie de ma base sur un ordinateur
autre que ceux de ma société, ma base soit vide de toutes ses tables
(donc supprimer toutes les tables) ou effacer leur contenu, ce qui
revient au même en rendant la copie inutilisable.
Pour cela la macro autoexec recherche à l'ouverture un ficher sur la
racine de C: présent uniquement sur tous les ordi de ma société et
évidemment absent de la racine de C: de tout ordi normal (c'est un
fichier word renommé en n'importe quoi, .ini par exemple.
Si à l'ouverture de la base sur un ordi, ce fichier est présent, on
efface pas les tables, mais si ce fichier est absent, on efface les
tables ou leur contenu.
Pour le moment, ça m'efface bien les tables sans relations, mais pour
les tables avec une relation en cascade, j'ai le message classique:
"rreur d'execution 2387: vous ne pouvez pas supprimer la table "XX" car
elle intervient dans une ou plusieurs relations, si vous voulez
supprimer cette table, supprimer d'abord les relations dans la fenêtre
Relations."
Et Apparition de débogage.
Evidemment je ne veux pas demander aux utilisateurs, qu'ils soient sur
un ordi de ma société ou sur un ordi non autorisé (donc sans mon pseudo
fichier .ini s'ils veulent supprimer les relations; et je cherche à
supprimer ce message.
Comment le supprimer et que mes tables soient supprimer sans
avertissement, même si elles sont en relation ?
Merci
MJ








Avatar
Bruno
Salut Michel,
Pour ce qui concerne la suppression des relations, tu peux appeler la
fonction ci-jointe "RelationsSuppression()" sans arguments, juste avant
l'effacement de tes tables.
Attention cette fonction utilise DAO, tu dois donc référencer : Microsoft
DAO 3.6 ObjectLibrary

J'ai joint également un ensemble de fonctions qui permet de gérer les
relations pour faire de la maintenance de tables, des fois que ça intéresse
qu'un.

En ce qui concerne ton problème de protection, pourquoi ne pas crypter les
données ?

@+ Bruno

'*******************************************************************
' MODULE : Utilitaires maintenances - Gestion des relations
'*******************************************************************
Option Compare Database
Option Explicit

'Nota : ce jeux de fonctions nécessite de référencer : Microsoft DAO 3.6
ObjectLibrary

'Constante définissant le nom de la table où seront sauvegardées les
définitions de relations
Const cTableSauvegarde = "SystSauvegardeRelationTable"

Sub RelationsSauvegarde()
'---------------------------------------------------------------------------
-----------------------
' Objet : Sauvegarde dans une table toutes les informations définissant les
relations entre les
' tables de la base courante.
'
' Usage : Permet de restaurer toute ou partie des relations perdues,
notamment après suppression
' et réimportation d'une table.
' S'utilise conjointement avec les fonction RelationsSuppression et
RelationRestauration
'
' Rem. : La table de sauvegarde est créée dynamiquement si celle-ci
n'existe pas déjà.
' Le nom de cette table peut être paramétrée par la constante
'cTableSauvegarde'
' Si cette table existe déjà, son contenu est effacé avant la
nouvelle sauvegarde
'---------------------------------------------------------------------------
-----------------------
On Error GoTo Erreur
Dim bds As Database
Dim chp As Field
Dim rel As Relation
Dim rs As Recordset
Dim qd As QueryDef
Dim tdfNew As TableDef
Dim intNbRel As Integer
Dim intNbChp As Integer
Dim strSQL As String
'Retourne une référence à la base de données active.
Set bds = CurrentDb
'Si au aucune relations, on sort
If bds.Relations.Count = 0 Then
Exit Sub
End If
'Si la table SystemRelationsTable n'existe pas, on la crée
'si elle existe déjà, on la vide
If IsNull(DLookup("[Name]", "MSysObjects", "[Type]=1 and [Name] = '" &
cTableSauvegarde & "'")) Then
'Création de la table
Set tdfNew = bds.CreateTableDef(cTableSauvegarde)
With tdfNew
.Fields.Append .CreateField("IdRelation", dbLong)
.Fields.Append .CreateField("Name", dbText)
.Fields.Append .CreateField("Table", dbText)
.Fields.Append .CreateField("ForeignTable", dbMemo)
.Fields.Append .CreateField("Attributes", dbLong)
.Fields.Append .CreateField("IdField", dbLong)
.Fields.Append .CreateField("FieldName", dbMemo)
.Fields.Append .CreateField("ForeignFieldName", dbMemo)
End With
bds.TableDefs.Append tdfNew
Else
'Vidage de la table
strSQL = "DELETE * FROM " & cTableSauvegarde & ";"
Set qd = bds.CreateQueryDef("", strSQL)
qd.Execute
End If
'ouverture de la table
Set rs = bds.OpenRecordset(cTableSauvegarde, dbOpenTable)
'Balaye toutes les relations existantes
For Each rel In bds.Relations
intNbRel = intNbRel + 1
intNbChp = 0
'Balaye tous les champs de la relation
'For i = 0 To rel.Fields.Count - 1
For intNbChp = 0 To rel.Fields.Count - 1
'Ecriture dans la table des caractéristiques de la relation
rs.AddNew
rs!IdRelation = intNbRel
rs!Name = rel.Name
rs!Table = rel.Table
rs!ForeignTable = rel.ForeignTable
rs!Attributes = rel.Attributes
rs!IdField = intNbChp + 1
rs!FieldName = rel.Fields(intNbChp).Name
rs!ForeignFieldName = rel.Fields(intNbChp).ForeignName
rs.Update
Next intNbChp
Next rel
Sortie:
On Error Resume Next
Set bds = Nothing
Set rel = Nothing
Set chp = Nothing
Set rs = Nothing
Set qd = Nothing
Set tdfNew = Nothing
Exit Sub
Erreur:
MsgBox Err.Number & " " & Err.Description
Resume Sortie
End Sub

Sub RelationsSuppression(Optional strNomTable As String)
'---------------------------------------------------------------------------
-----------------------
' Objet : Supprime toutes les relations entre les tables de la base courante
où seulement celles
' dans lesquelles intervient une table en particulier.
'
' Arg : strNomTable = Nom de la table dont les relations doivent être
supprimées.
' Toutes les relations où cette table intervient soit
en clé principale soit
' en clé étrangère sont supprimées.
' Si non renseigné, toutes les relations sont
supprimées.
'
' Usage : s'utilise notamment avant des opérations de maintenance qui sont
impossibles lorsque des
' relations existent (opération de suppression de table par
exemple).
' Faire une sauvegarde avec la fonction 'RelationSauvegarde',
restauration possible avec
' la fonction 'RelationRestauration'
'
'---------------------------------------------------------------------------
-----------------------
On Error GoTo Erreur
Dim bds As Database
Dim rel As Relation
Dim tNomRelations() As String
Dim i As Integer
Set bds = CurrentDb
'Si pas de relations on sort
If bds.Relations.Count = 0 Then
Exit Sub
End If
'Sauvegarde des noms des relations
'(car la collections est mis à jour à chaque suppression)
ReDim tNomRelations(bds.Relations.Count - 1)
For i = 0 To bds.Relations.Count - 1
tNomRelations(i) = bds.Relations(i).Name
Next i
'Suppression des relations
If strNomTable = "" Then
'Suppression de toutes les relations existantes
For i = LBound(tNomRelations) To UBound(tNomRelations)
bds.Relations.Delete (tNomRelations(i))
Next i
Else
'on ne supprime que les relations où la table passée en argument
intervient
For i = LBound(tNomRelations) To UBound(tNomRelations)
If (bds.Relations(tNomRelations(i)).Table = strNomTable) Or
(bds.Relations(tNomRelations(i)).ForeignTable = strNomTable) Then
bds.Relations.Delete (tNomRelations(i))
End If
Next i
End If
Sortie:
On Error Resume Next
Set bds = Nothing
Set rel = Nothing
Exit Sub
Erreur:
MsgBox Err.Number & " " & Err.Description
Resume Sortie
End Sub

Sub RelationsRestauration(Optional strNomTable As String)
'---------------------------------------------------------------------------
-----------------------
' Objet : Recrée les relations qui ont été stockée dans la table de
sauvegade des relations
' générée au préalable avec la fonction 'RelationsSauvegarde'
'
' Arg : strNomTable = Nom de la table dont les relations doivent être
restaurée.
' Toutes les relations où cette table intervient soit
en clé principale soit
' en clé étrangère sont restaurées et elles seule.
' Si non renseigné, toutes les relations sont
restaurée.

' Rem. : Si une relation à restaurer n'a pas été effacée précédamment, la
relation existante n'est
' pas remplacée par celle stockée dans la table.
'---------------------------------------------------------------------------
-----------------------
On Error GoTo Erreur
Dim bds As Database
Dim chp As Field
Dim rel As Relation
Dim rs As Recordset
Dim strNomRelationEnCours As String
Dim i As Integer 'compter le nb rela
'Retourne une référence à la base de données active.
Set bds = CurrentDb
'Si la table SystemRelationsTable n'existe pas, on sort
If IsNull(DLookup("[Name]", "MSysObjects", "[Type]=1 and [Name] = '" &
cTableSauvegarde & "'")) Then
MsgBox "La table de sauvegarde des relations n'a pas été générée" &
vbCrLf & _
"Restauration impossible", vbCritical, "Message"
Exit Sub
End If
'ouverture de la table
Set rs = bds.OpenRecordset(cTableSauvegarde, dbOpenTable)
If rs.RecordCount = 0 Then
MsgBox "La table de sauvegarde des relations est vide" & vbCrLf & _
"Restauration impossible", vbCritical, "Message"
Exit Sub
End If
'Balaye toutes les relations stockées dans la table
With rs
.MoveFirst
Do While Not .EOF
If (strNomTable <> "") And Not ((strNomTable = !Table) Or
(strNomTable = !ForeignTable)) Then
'La relation ne fait pas jouer la table dont on souhaite
restaurer les relations
'On saute à la prochaine relation
Else
If !Name <> strNomRelationEnCours Then
'Recrée la relation et définit ses propriétés
Set rel = bds.CreateRelation(!Name, !Table, !ForeignTable,
!Attributes)
'on compte le nombre de champs que comporte la relation
i = DCount("Name", cTableSauvegarde, "Name ='" & !Name &
"'")
End If
'Crée un champ dans la collection Fields de l'objet Relation.
Set chp = rel.CreateField(!FieldName)
'Fournit le nom du champ clé externe.
chp.ForeignName = !ForeignFieldName
'Ajoute le champ à l'objet Relation
rel.Fields.Append chp
'On teste si tous les champs de la relations ont été ajoutés
'si oui, alors on ajoute la relation à la base de données
If i = 1 Then
bds.Relations.Append rel
End If
i = i - 1
'Sauvegarde nom de la relation en cours de traitement
strNomRelationEnCours = !Name
End If
.MoveNext
Loop
End With
Sortie:
On Error Resume Next
Set bds = Nothing
Set rel = Nothing
Set chp = Nothing
Set rs = Nothing
Exit Sub
Erreur:
If Err.Number = 3012 Then
'Cas où la relation existe déjà
Resume Next
End If
MsgBox Err.Number & " " & Err.Description
Resume Sortie
End Sub

Sub RelationsListe()
'---------------------------------------------------------------------------
-----------------------
' Objet : Liste dans la fenêtre d'exécution toutes les relations existantes
de la base courrante
'
'---------------------------------------------------------------------------
-----------------------
On Error GoTo Erreur
Const cTableSauvegarde = "SystemRelationTable"
Dim bds As Database
Dim chp As Field
Dim rel As Relation
Dim rs As Recordset
Dim qd As QueryDef
Dim tdfNew As TableDef
Dim intNbRel As Integer
Dim intNbChp As Integer
Dim strSQL As String
'Retourne une référence à la base de données active.
Set bds = CurrentDb
'Si au aucune relations, on sort
If bds.Relations.Count = 0 Then
Debug.Print "Aucune relations définies dans la base courante"
Exit Sub
End If
'En-tête de colonne
Debug.Print Format("N°", "@@@") & " | " & _
Format("Nom de la relation", "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
& " | " & _
Format("Nom de la table", "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") &
" | " & _
Format("Nom de la table étrangère",
"!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & " | " & _
Format("Attribut", "!@@@@@@@@@@@@") & " | " & _
Format("Field", "@@@@@") & " | " & _
Format("Nom du champ", "!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & " |
" & _
Format("Nom du champ étranger",
"!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
Debug.Print String(192, "-")
'Balaye toutes les relations existantes
For Each rel In bds.Relations
intNbRel = intNbRel + 1
intNbChp = 0
'Balaye tous les champs de la relation
'For i = 0 To rel.Fields.Count - 1
For intNbChp = 0 To rel.Fields.Count - 1
'Ecriture dans la table des caractéristiques de la relation
Debug.Print Format(intNbRel, "@@@") & " | " & _
Format(rel.Name,
"!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & " | " & _
Format(rel.Table,
"!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & " | " & _
Format(rel.ForeignTable,
"!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & " | " & _
Format(rel.Attributes, "!@@@@@@@@@@@@") & " | " &
_
Format(intNbChp + 1, "@@@@@") & " | " & _
Format(rel.Fields(intNbChp).Name,
"!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@") & " | " & _
Format(rel.Fields(intNbChp).ForeignName,
"!@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@")
Next intNbChp
Next rel
Sortie:
On Error Resume Next
Set bds = Nothing
Set rel = Nothing
Set chp = Nothing
Exit Sub
Erreur:
MsgBox Err.Number & " " & Err.Description
Resume Sortie
End Sub
Avatar
Daniel Carollo
Bonjour Michel!

Ce genre de protection n'a aucune valeur. Ce n'est donc valable que pour des
donnees sans valeur. Le minimum de protection avec Access consiste a mettre
en place _de facon correcte_ la securite d'utilisateur qui utilise le
fichier de Workgroup (.mdw).

Si la securite des donnees est importante, il vaut alors mieux s'orienter
vers une solution de type serveur de base de donnees (SQL Serveur, Oracle,
Sybase ou autres).

Si la securite des donnees est TRES importante, alors il vaut mieux faire
appel a un professionel.

Une chose tres importante que l'on oublie trop facilement: les mots de
passe, clef informatique, fichier cache et autres ne sont qu'un seul maillon
de la chaine de securite. La mise en place d'une solution adaptee au
probleme demande des connaissances qui ne s'improvisent pas.

Bonne continuation,

--
Daniel :-)

Computing Technologies International - www.computing-tech.com - We
provide solutions...



"Michel J" wrote in message
news:
Bonjour
En fait je veux que si on fait une copie de ma base sur un ordinateur
autre que ceux de ma société, ma base soit vide de toutes ses tables
(donc supprimer toutes les tables) ou effacer leur contenu, ce qui
revient au même en rendant la copie inutilisable.
Pour cela la macro autoexec recherche à l'ouverture un ficher sur la
racine de C: présent uniquement sur tous les ordi de ma société et
évidemment absent de la racine de C: de tout ordi normal (c'est un
fichier word renommé en n'importe quoi, .ini par exemple.
Si à l'ouverture de la base sur un ordi, ce fichier est présent, on
efface pas les tables, mais si ce fichier est absent, on efface les
tables ou leur contenu.
Pour le moment, ça m'efface bien les tables sans relations, mais pour
les tables avec une relation en cascade, j'ai le message classique:
"rreur d'execution 2387: vous ne pouvez pas supprimer la table "XX" car
elle intervient dans une ou plusieurs relations, si vous voulez
supprimer cette table, supprimer d'abord les relations dans la fenêtre
Relations."
Et Apparition de débogage.
Evidemment je ne veux pas demander aux utilisateurs, qu'ils soient sur
un ordi de ma société ou sur un ordi non autorisé (donc sans mon pseudo
fichier .ini s'ils veulent supprimer les relations; et je cherche à
supprimer ce message.
Comment le supprimer et que mes tables soient supprimer sans
avertissement, même si elles sont en relation ?
Merci
MJ