Alors pour l'inputbox, t'avais raison :)
vu que c'est un champs clé... assez court
bref essayes ça methode assez courte, et facile à comprendre
tu mets ça sur un bouton :
if Supprime_piece(inputbox("piece a supprimer"))then
msgbox "Piece supprimée"
Else
msgbox "piece non supprimée"
end if
et cette fonction dessous
Function Supprime_Piece(Num_piece As String) As Boolean
'recherche et suppression dans table VIS
Set RS = CurrentDb.OpenRecordset("SELECT * FROM VIS WHERE [VIS].Cle = '" & Num_piece & "'")
If Not RS.EOF Then
If MsgBox("Supprimer la vis " & Num_piece & " ?", vbYesNo) = vbNo Then Exit Function
RS.MoveFirst: RS.Delete: Supprime_Piece = True: Exit Function
End If
'recherche et suppression dans table Armature
Set RS = CurrentDb.OpenRecordset("SELECT * FROM ARMATURE WHERE [ARMATURE].Cle = '" & Num_piece & "'")
If Not RS.EOF Then
If MsgBox("Supprimer l'armature " & Num_piece & " ?", vbYesNo) = vbNo Then Exit Function
RS.MoveFirst: RS.Delete: Supprime_Piece = True: Exit Function
End If
' et ainsi de suite... dans toutes tes tables.
End Function
Tiens moi au courrant
-------------------------------
Réponse au message :
-------------------------------
Ouf,
désolé... mais en allemend ça m'aide pas du tout lol
Je vais te demander des explications :
Tu veux supprimer quoi ? une ligne dans un table ? la valeur d'un champ dans un ligne ? un champ ?
Si tu fais un .delete sur une requete ayant une jointure... c'est normal que tu aies ce message "protegé en ecriture".
alors si tu veux bien m'accorder un peux de temps, expliques moi ce que l'utilisateur tape (lol en français si possible), et ce que tu dois supprimer en conséquence... à quel endroit.
A quand un VBfrance.com en vocal ?? mdrr...
Pour moi, la meilleure methode c'est que l'utilisateur avec ses doigts de fées en fasse le moins possible, je remplis une liste déroulante avec les valeurs, il les sélectionne, clique sur supprimer et confirme... ça serait bien de l'appliquer à ce que tu fais, je pense.
-------------------------------
Réponse au message :
-------------------------------
Autre chose:
Si ca peut te donner une id plus precise de ce que g fait, je te donne mon code (en allemand, desole!):
Private Sub Teil_Nr__Vorhandern_Click()
On Error GoTo Err_Teil_Nr__Vorhandern_Click
Dim Nummer As String
Dim Abfrage(1 To 13) As String
Dim bds As Database, qdf As QueryDef
Dim intI As Integer
Dim Name As String
Dim f As Field
Dim rs As Recordset
Nummer = InputBox("Sachummer?")
If Nummer = "" Then Exit Sub
Set bds = CurrentDb
For Each qdf In bds.QueryDefs
If qdf.Name = "querytemp" Then
DoCmd.DeleteObject acQuery, "querytemp"
End If
Next qdf
Abfrage(1) = "SELECT Aussengewinde.[Aussengewinde Sachnummer] FROM Aussengewinde GROUP BY Aussengewinde.[Aussengewinde Sachnummer] HAVING Aussengewinde.[Aussengewinde Sachnummer]= '" & Nummer & "';"
Abfrage(2) = "SELECT [Hydraulische Verschraubung].[Hydraulische Verschraubung Sachnummer] FROM [Hydraulische Verschraubung] GROUP BY [Hydraulische Verschraubung].[Hydraulische Verschraubung Sachnummer] HAVING [Hydraulische Verschraubung].[Hydraulische Verschraubung Sachnummer]= '" & Nummer & "';"
Abfrage(3) = "SELECT Innengewinde.[Innengewinde Sachnummer] FROM Innengewinde GROUP BY Innengewinde.[Innengewinde Sachnummer] HAVING Innengewinde.[Innengewinde Sachnummer]= '" & Nummer & "';"
Abfrage(4) = "SELECT Ringarmaturen.[Ringarmatur Sachnummer] FROM Ringarmaturen GROUP BY Ringarmaturen.[Ringarmatur Sachnummer] HAVING Ringarmaturen.[Ringarmatur Sachnummer]= '" & Nummer & "';"
Abfrage(5) = "SELECT [Rohr-Armatur-Verstemmung].[Rohr-Armatur-Verstemmung Sachnummer] FROM [Rohr-Armatur-Verstemmung] GROUP BY [Rohr-Armatur-Verstemmung].[Rohr-Armatur-Verstemmung Sachnummer] HAVING [Rohr-Armatur-Verstemmung].[Rohr-Armatur-Verstemmung Sachnummer]= '" & Nummer & "';"
Abfrage(6) = "SELECT [Rohr-Ringarmatur-Verstemmung].[Rohr-Ringarmatur-Verstemmung Sachnummer] FROM [Rohr-Ringarmatur-Verstemmung] GROUP BY [Rohr-Ringarmatur-Verstemmung].[Rohr-Ringarmatur-Verstemmung Sachnummer] HAVING [Rohr-Ringarmatur-Verstemmung].[Rohr-Ringarmatur-Verstemmung Sachnummer]= '" & Nummer & "';"
Abfrage(7) = "SELECT Überwurfschraube.[Überwurfschraube Sachnummer] FROM Überwurfschraube GROUP BY Überwurfschraube.[Überwurfschraube Sachnummer] HAVING Überwurfschraube.[Überwurfschraube Sachnummer]= '" & Nummer & "';"
Abfrage(8) = "SELECT Überwurfmutter.[Überwurfmutter Sachnummer]FROM Überwurfmutter GROUP BY Überwurfmutter.[Überwurfmutter Sachnummer]HAVING Überwurfmutter.[Überwurfmutter Sachnummer]= '" & Nummer & "';"
Abfrage(9) = "SELECT [Armaturen mit Überwurfmutter].[Armaturen mit Überwurfmutter Sachnummer] FROM [Armaturen mit Überwurfmutter] GROUP BY [Armaturen mit Überwurfmutter].[Armaturen mit Überwurfmutter Sachnummer] HAVING [Armaturen mit Überwurfmutter].[Armaturen mit Überwurfmutter Sachnummer]= '" & Nummer & "';"
Abfrage(10) = "SELECT [Armaturen mit Überwurfschraube].[Armaturen mit Überwurfschraube Sachnummer] FROM [Armaturen mit Überwurfschraube] GROUP BY [Armaturen mit Überwurfschraube].[Armaturen mit Überwurfschraube Sachnummer] HAVING [Armaturen mit Überwurfschraube].[Armaturen mit Überwurfschraube Sachnummer]= '" & Nummer & "';"
Abfrage(11) = "SELECT Hohlschraube.[Hohlschraube Sachnummer] FROM Hohlschraube GROUP BY Hohlschraube.[Hohlschraube Sachnummer] HAVING Hohlschraube.[Hohlschraube Sachnummer]= '" & Nummer & "';"
Abfrage(12) = "SELECT [Steckarmatur für Rohr].[Steckarmatur für Rohr Sachnummer] FROM [Steckarmatur für Rohr] GROUP BY [Steckarmatur für Rohr].[Steckarmatur für Rohr Sachnummer] HAVING [Steckarmatur für Rohr].[Steckarmatur für Rohr Sachnummer]= '" & Nummer & "';"
Abfrage(13) = "SELECT [Steckarmatur für Schlauch].[Steckarmatur für Schlauch Sachnummer] FROM [Steckarmatur für Schlauch] GROUP BY [Steckarmatur für Schlauch].[Steckarmatur für Schlauch Sachnummer] HAVING [Steckarmatur für Schlauch].[Steckarmatur für Schlauch Sachnummer]= '" & Nummer & "';"
intI = 1
Set qdf = bds.CreateQueryDef("querytemp", Abfrage(intI))
Name = "Aussengewinde Sachnummer"
Set rs = qdf.OpenRecordset()
While rs.EOF = True And (intI < 14)
DoCmd.DeleteObject acQuery, "querytemp"
Set qdf = bds.CreateQueryDef("querytemp", Abfrage(intI))
intI = intI + 1
Set rs = qdf.OpenRecordset()
For Each f In qdf.Fields
Name = f.Name
Next
Wend
If rs.EOF = True Then
MsgBox ("Dieses Teil ist nicht in der Datenbank")
Else:
If MsgBox("Möchten Sie wirklich das Teil Nummer " & Nummer & " in Feld " & Name & "löchen?", vbYesNo, "Teil löchen") = vbYes Then
rs.Delete
End If
End If
DoCmd.DeleteObject acQuery, "querytemp"
Exit_Teil_Nr__Vorhandern_Click:
Exit Sub
Err_Teil_Nr__Vorhandern_Click:
MsgBox Err.Description
Resume Exit_Teil_Nr__Vorhandern_Click
End Sub
-------------------------------
Réponse au message :
-------------------------------
Merci pour la rapidite!
Deux trois ptits trucs cependant:
Premierement, je ne sais pas a priori dans quelle table se trouve l enregistrement que je veux effacer, et par consequent, le nom du champ (qui est bien ma cle primaire comme tu l?avais devine) varie;
Deuxiemement, j ai essaye un truc du genre, en ouvrant un recordset sur une requete du meme genre que la tienne, et quand je fais le .Delete, je recois un joli message d erreur (en allemand soit dit au passage, car je bosse à l etranger!) qui me dit en gros que l enregistrement est protege en ecriture

.
Troisiemement, c est quoi le DB_OPEN_DYNASET?
Quatriemement, si tu connais une meilleure methode pour faire ca, je suis preneur! Le InputBox est la premiere idee qui m est venue (pour ne pas dire la seule), mais je n ai rien contre le progres!
Encore merci.
-------------------------------
Réponse au message :
-------------------------------
Salut,
Tu sais, on débute tous un jour ou l'autre... personellement, je ne passerai pas par un "inputbox" pour supprimer une enregistrement, mais si c'est ton choix, je veux bien t'aider dans ce sens.
alors va pour l'inputbox :-)
Je suppose que l'utilisateur tape la valeur d'une clé de ta table, sinon c'est la foire... (a moins que tu veuilles supprimer tous les enregistrement qui correspondent à la saisie).
TexteSaisi = InputBox ("Quel enregistrement voulez-vous supprimer ?")
Set SELECTION = CurrentDB.OpenRecorset("SELECT * FROM MA_TABLE WHERE [MA_TABLE].MON_CHAMP = '" & TexteSaisi & "'", DB_OPEN_DYNASET) 'ou DBOpen_dynaset pour 97 (je cois mas je suis pas sur)
SELECTION.MoveFirst
If SELECTION.Eof then 'pas trouvé
MsgBox "Pas d'enregistrement"
Exit sub 'ou fonction selon ou tu mets ton code
End If
If MsgBox("T'es sur de vouloir bouziller la ligne ?", vbYesNo) = vbYes Then
SELECTION.Delete
Msgbox "Supprimé"
End If
c'est une façon pas compliquée, pour que tu comprennes si tu débutes. Evidemment il y a mieux à faire pour suprimmer un enregistrement.
Si c'est pas clair ou si tu veux une meilleur methode, n'hésites pas ça sera avec plaisir
-------------------------------
Réponse au message :
-------------------------------
Salut,
Juste une ptit question avec access:
j ai besoin d un outil qui me permette d effacer un enregistrement.
Je saisi le nom de la piece a supprimer avec une InputBox (Ca, je sais faire

!).
Je veux ensuite parcourir les enregistrements du premier champ de chacune de mes tables (qui contient le nom des differentes pieces de ma base de donnee), pour ensuite pouvoir effacer l enregistrement dont le nom est celui qui a ete saisi au debut. En fait, c est la que ca se gatte!
Si qq1 peut m aider, il recevra en echange mon etrernelle reconnaissance !
Merci d avance!
