Ok, je debute!

fredieuric Messages postés 24 Date d'inscription mercredi 10 juillet 2002 Statut Membre Dernière intervention 2 octobre 2008 - 18 juil. 2002 à 13:16
Jerrymcfly Messages postés 29 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 26 juillet 2002 - 18 juil. 2002 à 16:02
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! :big)

6 réponses

Jerrymcfly Messages postés 29 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 26 juillet 2002
18 juil. 2002 à 13:53
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
0
fredieuric Messages postés 24 Date d'inscription mercredi 10 juillet 2002 Statut Membre Dernière intervention 2 octobre 2008 1
18 juil. 2002 à 14:23
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 :sad) .

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.
0
fredieuric Messages postés 24 Date d'inscription mercredi 10 juillet 2002 Statut Membre Dernière intervention 2 octobre 2008 1
18 juil. 2002 à 14:35
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
0
Jerrymcfly Messages postés 29 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 26 juillet 2002
18 juil. 2002 à 14:55
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.
0

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

Posez votre question
fredieuric Messages postés 24 Date d'inscription mercredi 10 juillet 2002 Statut Membre Dernière intervention 2 octobre 2008 1
18 juil. 2002 à 15:26
Je vais essayer d etre clair ce coup ci:

J ai differentes tables avec des pieces automobiles et leurs caracteristiques (ex: une table „armature de freins“, une autre „vis creuses“ ...). Pour chacune de mes tables, la cle primaire est le numero de la piece (ex: S10001A).
Si je veux supprimer la pièce S10252, je ne sais pas dans quelle table elle se trouve, ca peut etre une armature, une vis... Il faut donc que je parcoure les numeros de chaque piece de chaque table pour trouver l enregistrement. Une fois cet enregistrement trouve, je veux le supprimer (ex: S10252 est une vis creuse, la table contient les champs suivants: diametre, hauteur, pas, revetement, matiere..., il faut alors supprimer la ligne entiere, pas seulement le premier champ de la table.

L utilisateur tape le numero S10252, je dois alors supprimer:

Nom S10252 / diametre 12 / hauteur 25 / pas M12 / revetement ZnNi / matiere 1.0718

voila, j espere avoir ete plus clair, merci pour ta patience!
0
Jerrymcfly Messages postés 29 Date d'inscription vendredi 8 mars 2002 Statut Membre Dernière intervention 26 juillet 2002
18 juil. 2002 à 16:02
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
0
Rejoignez-nous