2008-10-09 4 views
0

J'ai une commande UPDATE sql qui modifie un champ Date/Heure dans une table particulière. Cette table a deux clés, ProductionCode et TestTime, qui est en cours de modification. Le code de production ne change jamais pour un enregistrement particulier, mais souvent un utilisateur trouvera qu'il a entré le mauvais temps de test et doit le changer.Meilleure solution pour modifier une clé dans un enregistrement tout en la sélectionnant

J'ai l'heure mise à jour que je peux récupérer de la grille de données, cependant, j'ai besoin de sélectionner le bon enregistrement à modifier. Pour ce faire, l'un de mes critères doit être l'heure à laquelle cet enregistrement est défini dans la base de données.

Actuellement, je conserve un tableau de vieux temps, qui sont mis à jour chaque fois qu'une commande UPDATE est exécutée. Donc, dans le bloc WHERE de la commande sql, l'ancien temps est utilisé. Une fois qu'il est mis à jour dans la base de données, je mets à jour le tableau de temps. Les difficultés surviennent lorsque les heures sont entrées dans le désordre, ou lorsque la grille de données est triée sur un champ différent de l'heure. Je dois garder la trace de l'ordre de tous les anciens dans les lignes de la grille de données, et cela a causé un certain nombre de bugs dans le passé. Actuellement, cela fonctionne bien, mais c'est délicat au mieux.

Donc, ce que je cherche vraiment, c'est une meilleure solution. Dois-je simplement stocker les résultats de l'instruction SELECT qui est utilisée pour remplir l'interface utilisateur et s'en remettre? Actuellement, le seul endroit où mes résultats de base de données vont, est directement dans le DataGrid. Ou y a-t-il un autre moyen? J'ai évité la liaison automatique des données en faveur de l'utilisation manuelle des commandes SQL car mes DataGrid sont configurés dynamiquement et utilisent des schémas différents d'une charge à l'autre, et les seules colonnes garanties sont le ProductionCode et le TestTime.

Répondre

3

Ajoutez une nouvelle colonne "id" qui contient un nombre unique pouvant identifier chaque ligne. Si vos utilisateurs ont besoin de modifier la clé primaire, vous n'avez probablement pas choisi une bonne clé primaire?

+0

C'est ce que je dois faire. Je n'avais pas prévu à l'origine de rendre le Times modifiable. Merci. –

0

Je ne sais pas quelle langue vous utilisez, mais la façon dont vous mentionnez "datagrid" me fait penser à un langage .NET. Les Datagrids (et gridviews, etc.) ont des propriétés qui vous permettent de définir la clé à laquelle se référer. Créez un index de numérotation automatique pour votre clé primaire et utilisez-le pour vous référer au bon enregistrement à mettre à jour.

Une clé doit être en lecture seule, point.

Ajout dans ce nouveau champ ne devrait pas perturber votre code, espérons-le - mais il pourrait. Mais c'est la bonne façon d'aborder votre structure de données. En outre, en fonction de votre style SQL, vous pouvez générer un numéro de ligne dans vos sélections. Cela pourrait vous conduire à une solution réalisable, mais ce n'est PAS le bon chemin à prendre.

Questions connexes