2010-07-29 11 views
0

alt text http://i27.tinypic.com/24d4pw3.jpgcomment mettre à jour tous les clients après chaque db transcation

Je développe une application client-serveur en utilisant WPF, SQL Server et WCF. Il s'agit essentiellement d'une sorte d'application de point de vente (n'utilisant aucune bibliothèque POS, mais les fonctionnalités sont presque identiques). Le codage côté serveur est presque terminé. Je passe maintenant au codage côté client. Je suis nouveau dans WCF (première application sur WCF) et l'architecture client-serveur, donc j'ai entouré de quelques doutes avant de commencer mon codage. Selon mon client, il devrait être en mesure d'imprimer la facture de vente des articles (mémo) à partir des ordinateurs clients ainsi que du serveur. Chaque mémo devrait avoir un mémo pour cette transaction qui devrait s'incrémenter automatiquement et le vendeur devrait être en mesure de voir quel mémo il va utiliser. Donc, à cette fin, j'ai ajouté un champ Mémo No sur les fenêtres de vente d'applications qui montrerait Memo No (Last Memo No + 1) de la base de données.

Voici le problème, supposons qu'il y ait 3 comptoirs de ventes et lorsque le vendeur a ouvert ses fenêtres de vente respectives pour la facturation alors tous verront (dernier mémo n ° 1). Et si 3 d'entre eux facturent simultanément alors le même mémo no sera stocké pour 3 transactions différentes.

Je dois vous dire que j'ai 2 tables dans la base de données pour stocker les ventes. Le tableau 1 stocke les remises, le grand total, l'identifiant du vendeur et le Mémo no et le tableau 2 stocke le mémo non, le code d'article, la quantité, la date de facturation, etc .. Donc, c'est Mémo no qui lie deux tables et si cela est manipulé alors vous savez quoi gâchis, il peut créer dans les rapports mensuels.

Cette situation en débordant mon cerveau et est venu ici pour obtenir une solution. Ce que je peux faire pour surmonter cela. Toute suggestion, lien, code sera très utile.

+0

Les clients sont-ils toujours connectés à la base de données? – ZippyV

+0

Je n'ai pas pu vous avoir. Mais pour plus de clarté, j'héberge un service Windows WCF qui communique avec la base de données en utilisant Data Access Layer, les clients se connectent au service, envoie des données à ce service WCF via un appel de fonction. C'est la logique. –

Répondre

0

Vous pourriez envisager de modifier votre conception afin qu'un numéro de note soit attribué lorsqu'un client commence une vente.

Une façon de mettre en œuvre ce serait d'utiliser une autre table pour stocker la séquence des numéros de memos:

CREATE TABLE MemoSequence 
(MemoId int identity(1,1), 
DateAssigned datetime 
) 

Chaque fois que la fenêtre de vente est ouvert sur le client, insérer la date/heure actuelle en MemoSequence.DateAssigned et la valeur MemoId correspondante renvoyée (en utilisant une clause OUTPUT ou SCOPE_IDENTITY()) au client en tant que MemoId. Ainsi, chaque client recevrait un numéro de mémo unique dès le début de la transaction. NB: cette solution peut ne pas convenir si l'absence de trous dans la séquence des numéros de mémo est une condition préalable.