2016-04-14 2 views
0

J'ai créé une base de données pour le travail, et j'ai créé un formulaire pour y ajouter des choses, afin que les employés ne plaisantent pas avec les tables. Il ajoutera toujours les données, mais parfois au lieu de l'ajouter en bas, il remplacera une autre ligne de données. Parfois, même pas une rangée entière, juste quelques colonnes. J'ai essayé de faire le code de deux manières différentes.Vba ajouter des données à la table écrase d'autres données

CurrentDb.Execute " INSERT INTO [Service Calls] " _ 
    & "([Project Name], [Phone Number], [email], [Source], [Service Address], [Zip Code], [Date of Service], [Type of Call], [Technician], [Ticket Number], [Invoice Number], [Total Billed], [Description of Work]) VALUES " _ 
    & "('" & Me.proj & "', '" & Me.phone & "', '" & Me.email & "', '" & Me.source & "', '" & Me.address & "', '" & Me.zip & "', '" & Me.doS & "', '" & Me.toC & "', '" & Me.tech & "', '" & Me.ticketNum & "', '" & Me.invoiceNum & "', '" & Me.billed & "', '" & Me.work & "');" 
    CurrentDb.Close 

et

Dim rst As Recordset 
Set rst = CurrentDb.OpenRecordset("Service Calls") 
With rst 
.AddNew 
.Fields("Project Name") = Me.proj 
.Fields("Service Address") = Me.address 
.Fields("Date of Service") = Me.doS 
.Fields("Technician") = Me.tech 
.Fields("Total Billed") = Me.billed 
.Fields("Zip Code") = Me.zip 
.Fields("Description of Work") = Me.work 
.Fields("Type of Call") = Me.toC 
.Fields("Invoice Number") = Me.invoiceNum 
.Fields("Ticket Number") = Me.ticketNum 
.Update 
End With 
    rst.Close 
    Set rst = Nothing 

Je suis que l'on contient plus de données que l'autre. J'ai utilisé le code supérieur lorsque j'ai mis à jour le formulaire. Résolu: Certains champs du formulaire étaient liés. Donc, ces éléments écraseraient parfois. Une fois que je n'aurais pas lié ces champs, il cesserait d'écraser.

+1

Ni le .AddNew ni le 'Insert into' ne seront superposés aux données existantes dans les tables. Les contrôles sur votre formulaire sont-ils BOUND ou UNBOUND? Si BOUND, je suis assez certain que le problème est que votre formulaire affiche une ligne de données et que quelqu'un tape dans cette ligne qui modifie les données. Y a-t-il d'autres codes ailleurs qui pourraient le faire? –

+0

Certains sont BOUND, d'autres sont UNBOUND. Je vais les désaccorder tous, et voir si cela le corrige. Il y a un autre code, mais il ne fait que remonter une requête, donc je ne pense pas que cela fasse quoi que ce soit. – Chris

+0

@ WayneG.Dunn ajouter une réponse à UNBOUND choses dans le formulaire afin que je puisse dire que vous m'avez donné la réponse. Merci. – Chris

Répondre

2

Puisque ni le VBA .AddNew ni le SQL 'Insert into' ne seront superposés aux données existantes dans les tables, la cause est autre chose. Si les contrôles du formulaire sont BOUND, il suffit de les taper pour superposer l'enregistrement sous-jacent dans la table. Dans votre cas, puisque vous avez une combinaison de contrôles liés et non liés, les contrôles liés ont causé le problème.

0

Que signifie parfois? Les ordinateurs ne font pas parfois des choses et font parfois d'autres choses. Les ordinateurs sont déterministes, donc certains processus fonctionnent ou cela ne fonctionne pas. On dirait que c'est configuré comme non lié maintenant. Pouvez-vous rendre ce processus indépendant ou lié, et ne pas mélanger les deux? Cela devrait régler le problème.