Laden...

Gesucht: Tutorials zum Thema Multi-Client App mit SQL Server back-end

Erstellt von diamond vor 15 Jahren Letzter Beitrag vor 15 Jahren 3.633 Views
D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren
Gesucht: Tutorials zum Thema Multi-Client App mit SQL Server back-end

verwendetes Datenbanksystem: SQL Server 2005/2008

Hallo verehrte CSharp Gemeinde,

ich bin auf der Suche nach guten Tutorials (am besten Video), Multi-Client Application mit SQL Server. Vielleicht kann jemand von Euch was empfehlen?

Es sollten nach Möglichkeit Arbeiten von größeren Tieren sein (bspw. Microsoft), keine Hobby Programmierer. Evtl. gibt es sogar gewisse Technologien oder pattern, die in solchen Bereich üblich sind (wie z.B. MVP oder CAB).

Für Eure Tipps, vielen Dank im voraus!

Grüße...

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@JAck30lena

danke für deinen Link, die Seite ist mir bereit bekannt. Ich hätte gehofft, dass jemand einen besseren Vorschlag hat, noch bevor ich anfangen würde, dort alle Beträge durchzuwühlen.

3.971 Beiträge seit 2006
vor 15 Jahren

Microsoft bietet mit AdventureWorks eine fertige Test- und Beispiel-Applikation an.

Es gibt 3 Arten von Menschen, die die bis 3 zählen können und die, die es nicht können...

F
10.010 Beiträge seit 2004
vor 15 Jahren

Was erwartest Du, bei den Ausgangsinformatiionen?

Das Themengebiet ist so gross, das es da keine einzelne Info drüber geben kann.

Wie sehen die Daten aus?
Werden die Daten ständig geändert?
Ist Offlinebetrieb nötig?
Datenaufkommen?
..........

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

Hallo FZelle,

ich selbst arbeite im Moment viel mit DataTable und TableAdaptern, wenn ich Daten aus der Datenbank holen und manipulieren will.

Die Daten in der DataTable sind offline im Speichert, wenn nun mehrere User auf einer Tabelle arbeiten, müsste man ständig die Änderungen synchronisieren, was ich etwas nervig finde. Tut man das nicht, kommt es ruck zuck zu einer Parallelitätsverletzung.

Jetzt könnte man sich natürlich irgend welche klevere Logik ausdenken, wie man bestimmte Zeilen der Tabelle sperrt oder ähnliches, so dass User A auf diesen Zeilen arbeiten kann und User B einen entsprechenden hinweis erhält. aber bis man hier eine Fehlerfreie Lösung hat, kann es lange dauern.

Deshalb hatte ich dieses Thema gestartet, in der Hoffnung, dass ich einfach zu kurz denke und es vermutlich schon länger ein kleveres Pattern hierfür gibt.

3.511 Beiträge seit 2005
vor 15 Jahren

Um hier eine wirklich saubere Lösung zu erhalten, müsste man einen Anwendungsserver aufsetzen, der die Kontrolle über die Daten übernimmt. Wenn also ein Benutzer einen Datensatz öffnet, wird dies im Anwendungsserver registriert. Versucht ein anderer den gleichen Datensatz zu öffnen, weis der Anwendungsserver das dieser bereits geöffnet ist und gibt einen entsprechenden Fehlercode zurück. Ebenfalls wird jeder geöffnete Datensatz mit einem Zeitstempel versehen. Wenn also ein Benutzer einen Datensatz öffnet und geht danach in die Mittagspause, wird der Datensatz vom AppServer nach einer gewissen Zeit entsperrt und an den Client eine Nachricht gesendet.

All dies lässt sich mit WCF relativ "einfach" umsetzen. Alle Clients arbeiten dann nur noch gegen den AppServer und nicht mehr gegen die Datenbank. Die Clients dürfen gar nicht wissen, das es eine Datenbank gibt. AppServer bieten eine ganze Reihe an Vorteile, gegenüber dem direkten arbeiten auf einer Datenbank.

Aber wie du bereits erkannt hast, kann es lange dauern bis man eine fehlerfreie Lösung hat. Aber der Aufwand lohnt sich meistens, gerade bei größeren Projekten, bzw. bei einer großen Anzahl von Clients.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

Hallo Khalid,

das hört sich gut an. Kennst du vielleicht ein gutes Tutorial zu diesem Thema?

3.511 Beiträge seit 2005
vor 15 Jahren

Hmm, zu WCF findet man einiges im Netz. Ein Tutorial kann ich dir allerdings nicht nennen.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@Khalid,

schon gekauft! 😃
Danke dir, war ein guter Hinweis, den ich demnächst wohl etwas mehr auseinander nehmen werde.

F
10.010 Beiträge seit 2004
vor 15 Jahren

Du willst also genau das, was MS bei der Erstellung von ADO.NET als Designprinzip
genommen hat, wieder zu dem umkehren, was vorher in z.b. VB6 zu massiven
Problemen geführt hat?

Was Du vor hast bedeutet gerade in Multiuserumgebungen eine hohe Server Last und
ist auch sehr selten Sinnvoll.

Und das Abfragen von ConcurencyExceptions ist doch nicht wirklich ein Grund
alles über den Haufen zu werfen.

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@FZelle

ob und was ich will, weiß ich noch nicht, ich muss es ja erst erforschen.

was wäre dein Vorschlag?

F
10.010 Beiträge seit 2004
vor 15 Jahren

Das Prinzip von ADO.NET verstehen, akzeptieren, und dementsprechend zu handeln.

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@FZelle,

was wäre den das Prinzip? Denkst du da an was bestimmten?

Ich persönliche sehe an ADO.NET im Moment kaum was besseres, als beim ADODB bei VB6. Beide empfinde ich persönlich ungefähr gleich schlecht. Aber ich habe scheinbar auch nicht deine Erfahrungen!

Nichts für ungut, aber wenn deine nächste Antwort wieder so kurz und undeutlich ausfallen sollte, kannst du sie dir auch sparen. So hilft sie leider keinem weiter.

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo diamond

Ich persönliche sehe an ADO.NET im Moment kaum was besseres, als beim ADODB bei VB6. Beide empfinde ich persönlich ungefähr gleich schlecht. Aber ich habe scheinbar auch nicht deine Erfahrungen!

Nein, die hast du wohl nicht.
Was findest du daran denn schlecht?
Und wie / was würdest du besser machen?

Nichts für ungut, aber wenn deine nächste Antwort wieder so kurz und undeutlich ausfallen sollte, kannst du sie dir auch sparen. So hilft sie leider keinem weiter.

Wenn dir die Antworten nicht gefallen, ignoriere sie einfach.
Ansonsten mache weiter wie bisher und vergraule dir auch jede Antwort von anderen, die helfen wollen.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

Hallo Peter,

verstehst du den das Prinzip von ADO.NET?
Erkläre es mir bitte.

Danke dir.

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo diamond

verstehst du den das Prinzip von ADO.NET?

Was verstehst du unter dem Verstehen des Prinzips?

Erkläre es mir bitte.

Was verstehst du nicht, wozu gibt es dutzende Bücher darüber und wieso hast du meine Fragen nicht beantwortet?

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

G
48 Beiträge seit 2006
vor 15 Jahren

Also ich hab noch nicht mit den Vorgängerversionen gearbeitet, oder dem anderen Kram den du da angesprochen hast. Aber ADO.Net ist Sammlung von Klassen für Verbindungen, Klassen die Tabellen im Arbeitsspeicher repräsentieren und Klassen die für gesammte Datenbank im Arbeitsspeicher stehen.

Mit diesen Klassen kann man dann schnell und einfach verbindungen zu Datenbanken herstellen und diese dann auch bearbeiten

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

Hallo Peter,

interessant!

Wie FZelle schrieb:

Das Prinzip von ADO.NET verstehen, akzeptieren, und dementsprechend zu handeln.

was meint er wohl.

Ich denke in einem Forum wie diesem finde ich mehr und vor allem schneller Infos, als in Büchern.
Ich denke nur, in einem profi Forum sind Antworten ala

Das Prinzip von ADO.NET verstehen, akzeptieren, und dementsprechend zu handeln.

Fehler am Platze, mehr nicht.

Aber OK.

Gut Peter, mein Problem:

Das Programm soll in einer SQL Server Datenbank Daten speichern. Das Programm wird von mehreren Usern gleichzeitig genutzt, sagen wir mal 10.
Jeder User kann die Daten sehen und Bearbeiten (es sind komplizierte Kundenstammdaten, die nicht mal eben in 5sek. eingepflegt sind, 10 Sätze).

User 1 bis 10 laden sich zur gleichen Zeit die 10 Sätze in eine DataTable. User 1 verändert den ersten Satz und speichert diesen. Die User 2 bis 10 wollen ebenfalls an den ersten Satz ran. Beim Speichern erhalten die 9 User eine Meldung, aufgrund einer Parallelitätsverletzung, Speichern nicht möglich. Sie ärgern sich, das sie nun die Daten komplett neu eintippen müssen. Jetzt sind die 9 User übrig, wieder zur gleichen Zeit und wieder gewinnt nur eine, die restlichen 8 ärgern sich, usw.

Das ist im Moment ein Problem, welches mir so sorgen bereitet. Eine Lösung gibt es sicherlich immer, nur möchte ich nicht voreilig irgend etwas Programmieren und später erfahren, dass es bereits länger andere bessere Techniken gibt.

Bei Access gibt es noch andere Probleme, wie z.B. die fehlende Aktualisierung der AutoWert Spalte in einer neuen eingefügten und abgespeicherten DateRow. Dafür habe ich zwar schon eine Lösung von einer Microsoft Seite, die im Moment noch gut ausschaut. Aber auch da frage ich mich einfach, warum hat man das nicht gleich vorgesehen. Das RecordSet Objekt von ADODB (VB6) konnte dieses z.B. besser.

Wenn man sich nun einige Tage mit solchen Probleme beschäftigt, fragt man sich vielleicht, ob es da nicht noch irgend welche anderen Schwächen gibt, die einem erst später auffallen, wo eine Änderung am Programm nicht mehr so einfach wäre.

Also erstelle ich das Thema hier im Forum, um zu erfahren, ob es da nicht irgend welche bessere Techniken gibt, zum Thema Multi User/Client App und SQL Server (oder MS Access).

Ich suche nicht nach einem Rat zu einem bestimmten Fehler/Problem, sondern frage Euch, die vielleicht mehr Ahnung haben, ob es irgend welche Techniken gibt.

Gelöschter Account
vor 15 Jahren

dürfen die user ach realtime-parallel an den daten arbeiten? z.b. das user 1 gerade im moment einen wert ändert und dieser wird bei allen anderen user angezeigt?

K
593 Beiträge seit 2007
vor 15 Jahren

Hallo,

also ADO.Net ist schon das richtige. Eine echte Parallität gibt es dort wohl sowieso nicht aber ADO.Net mit Microsoft SQL Server kann das so regeln das sie das abarbeiten. Es klingt jetzt aber ein wenig als würden 10User das selber eingeben? oO

Gruß Daniel

Gelöschter Account
vor 15 Jahren

wir haben mal ein system implementiert, wo 300 user an einer größeren datenbank zeitgleich arbeiten konnten. hierbei wurden felder automatisch gelb hinterlegt, wenn sie gerade durch einen user bearbeitet wurden und rot, wenn diese bereits gespeichert wurden. der user konnte dann einstellen ob er automatisch den neuen wert sehen will oder ob er manuelle updates machen möchte. je nach rechtevergabe konnte er auch den alten wert wieder überspielen.

das ganze haben wir mit remoting unter .net 2.0 gelöst (wcf wäre aber schöner gewesen...) und anfangs nhibernate, später als dann auch offlinecontent usw interessant wurde, mussten wir auf open access umsteigen. das unterstützte zumindest offlinecontainer und versionierungen.

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@Kaji,

die 10 User müssen nicht unbedingt dasselbe eingeben. Sobald einer der User gespeichert hat, können die anderen nicht am selben Satz speichern, da die Daten in der jeweiligen Datarow (lokal) sich auf einmal mit den auf dem Server unterscheiden.

Würde man versuchen, im Hintergrund die Daten in der lokal DataTable oder DataRow immer vom Server zu refreshen, gäbe es vielleicht keine Warnungen aber im nachhinein immer noch viel Probleme. Den dann würden alle User speichern können und es würde immer der Satz vom letzten User gewinnen.

Das was JAck30lena beschreibt, mit gelben und roten Feldern, daran hatte ich auch mal gedacht. Aber zunächst müsste man es irgend wie realisieren, dass alle Client von jeder Änderung an den Daten irgend wie mitbekommen (auf dem SQL Server bekommt man z.B. eine Event, bei Änderung an Daten, bei MS Access eher nicht).

Und was dann? Dann würde der erste User Daten verändern und die restlichen 9 sehen, dass es eine Änderung gibt, das eigentliche Problem würde aber weiterhin bestehen bleiben. Die restlichen 9 User könnten nicht speichern, da sich die Daten in der lokalen DataTable wieder mit dennen in der Datenbank unterscheiden würden.

Oder denke ich einfach zu kritisch?

K
593 Beiträge seit 2007
vor 15 Jahren

Hallo,

ich glaube du hast da ein grundsätzlichen fehler drinne ... 😉 Jeder User updatet nur seinen einen Teil den er geändert hat und will nicht mit seiner lokalen Datatable alles überschreiben.

Gruß Daniel

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@Kaji,

in meinem Fall wollen alle 10 User auf dem selben Satz schreiben.

solange sie auf unterschiedlichen Sätzen schreiben, wäre es zunächst in Ordnung, bis dann wieder ein User 5 neben seinem Satz, den Satz vom User 10 ändern will.

K
80 Beiträge seit 2006
vor 15 Jahren

Hallo diamond,

ich habe mir alle Posts durchgelesen und irgendwie kam mir immer wieder die frage: Warum wollen die User auf dem selben Datensatz arbeiten?

Für mich stellt sich mit den sperrlichen Informationen eines der folgenden Probleme dar:

  1. Das Unternehmen hat extreme Probleme mit seinen Workflows ( wie können 2 Sachbearbeiter am selben Satz arbeiten )
  2. Die Datenbank folgt nicht den Normalisierungs Richtlinien, was implizit bedeutet, dass eine Tablle zuviele Informationen hält, die nicht Atomar sind, was wiederum zwangsläufig dazu führt, dass 2 User am selben Datensatz arbeiten.

Ich würde empfehlen: Data Rows Locken, sodass 1er dran arbeiten kann, 9 haben den Satz Readonly geöffnet. Und beim Commit in die Datenbank überall die Row updaten.

5.941 Beiträge seit 2005
vor 15 Jahren

Hallo diamond

Dito mit Krieger: Locking und Transaktionen wären Stichwörter.

Gruss Peter

--
Microsoft MVP - Visual Developer ASP / ASP.NET, Switzerland 2007 - 2011

K
593 Beiträge seit 2007
vor 15 Jahren

Hallo,

ja deswegen reden ja auch hier genug Leute darüber das du ein Service schreiben sollst der dann die Datenbank operationen übernimmt. Wie du die User managet musst du selbst wissen. Es ist wie im realen leben 2 Leute können nicht den selben Satz auf der Schreibmaschine bearbeiten. Deswegen müssen sich die Leute untereinander einigen oder einer kriegt Priorität. Oder du zeigst dem der langsamer ist als der anderen den geänderten Satz und er kann entscheiden ob er den neuen oder seinen Satz nehmen will.

Gruß Daniel

K
80 Beiträge seit 2006
vor 15 Jahren

Zusatz:

Zur Normalisierung: http://de.wikipedia.org/wiki/Normalisierung_(Datenbank)

@Kaji

Der Service Ansatz ist da etwas übertrieben, das bekommt man mit ADO schon hin.

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

Hallo,

Auch ich würde dem zustimmen, dass > 1 User nicht an einem und dem selben Satz zu arbeiten haben, aber die Realität ist da leider anders.
Es kommt leider tatsächlich vor.
Bei einer Schreibmaschine handelt es sich ja auch um genau 1 Eingabegerät, mit genau 1 PC wäre das auch kein Problem.
In dem Fall sitzen aber die User weg von einander entfernt und sogar theoretisch ist es denkbar, dass beide an dem gleichen Satz schreiben wollen.

@Krieger:
Wenn ich eine DataRow sperren könnte, wäre das eine Hilfe. Nur wüsste ich nicht wie!
Ich denke die DataTable ist ein lokales Abbild im speicher, wie soll man den eine einzige Row davon sperren, so dass die Sperre synchron bei allen anderen wirksam wird?

@Kaji

Deswegen müssen sich die Leute untereinander einigen oder einer kriegt Priorität. Oder du zeigst dem der langsamer ist als der anderen den geänderten Satz und er kann entscheiden ob er den neuen oder seinen Satz nehmen will.

Kannst du dir vorstellen, dass Kunden die mit deinem Programm arbeiten wollen und dafür Geld bezahlt haben, dir für eine solche Lösung das Programm um die Ohren hauen würden? Ich meine, ich stimme dir zu, aber in der Realität ist es anders, die Leute reden weniger mit einander, es sei den es läuft was schief. 😦


Ich würde es sogar in Kauf nehmen, wenn immer der letzte User beim Speichern gewinnen würde. Aber das Problem ist, dass schon nach dem ersten User niemand mehr Speichern kann, ohne dass er die DataTable vorher refreshen müsste -> wegen Parallelitätsverletzung.

Alles nicht rosig.

1.457 Beiträge seit 2004
vor 15 Jahren

Hallo diamond,

Du hast das Problem das ein Datensatz gleichzeitig bearbeitet werden kann und das soll unterbunden werden? Oder soll der letzte Bearbeiter gewinnen?

Dein Problem kann ich zwar verstehen, aber ich verstehe nicht was du erwartest.

Du solltest Datensätze nicht gleich bearbeiten lassen, sondern nur anzeigen lassen, da nicht jeder User, der auf ein Datensatz zugreift auch diesen bearbeiten möchte. Wenn der Datensatz in Bearbeitung ist kannst du über eine Timestamp Spalte die Bearbeitung für alle anderen sperren. usw. usw.

Desweiteren solltest du bei einer Multiuser Umgebung nicht von Access reden. Das ist in meinen Augen ein no go.

Am Besten wäre es wenn du deine Problematik genau erläutern könntest!

F
10.010 Beiträge seit 2004
vor 15 Jahren

@diamond:
Wenn Du in der Zwischenzeit mal geschaut hättest, warum MS das so designed
hat, wären die ganzen Diskusionspunkte unnötig gewesen.

Jede Art auf eine DB zuzugreifen hat ihre Vor- und Nachteile.

Bis ADO.NET hat MS immer den verbundenen Weg beschritten.
Also die rows wurden meist gelockt, und es wurde meist auf der DB in einem Cursor o.ä. gearbeitet.
Dies führte dazu, das die Datenbankserver immer schwerer unter der Last zu arbeiten
hatten, und da immer mehr SW eine DB benutzte, die Server unverhältnismässig
ausgebaut werden mussten.
Allerdings waren Rowlocking und CO sehr einfach möglich.

Beim Design von .NET ist MS davon ausgegangen, das immer mehr SW eine DB
benötigt, und diese auch per Intranet/Internet angebunden sein wird.
Multiuserbetrieb mit möglichst wenig Serverresourcen waren hier gefragt.

Deshalb ( vereinfacht beschrieben ) die Entscheidung zum Disconnected Ansatz.
Und weil das so ist, hilft auch kein Jammern und kein Zetern.

Und natürlich geht ein lastWin auch ganz einfach mit Bordmitteln.
Der CommandBuilder erlaubt über das Property ConflictOption einfach einzustellen,
wie die Commands erstellt werden.

Es gibt die std funktion ( CompareAllSearchableValues ),
man kann aber auch die TimeStamp-Column ( nicht zu verwechseln mit DateTime )
des SQL-Servers benutzen ( CompareRowVersion ),
oder ganz ohne vergleiche ein Lastwin erzeugen (OverwriteChanges).

Und da diese Herangehensweise seit mehr als 7 Jahren bei .NET gang und gebe ist,
ist auch das ggf Anzeigen der zwischenzeitlich geänderten Daten ein ganz normaler
Vorgang.

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@burning show

entweder oder, beide Probleme sind nicht ohne!

Mit dem SQL Server wäre einiges einfacher, jedoch habe ich feste Vorgaben.
Das Programm muss in erster Linie mit Access arbeiten, da viele Kunde nicht bereit sind, Geld für Server oder teure Software auszugeben.
Die die bereit sind, für die soll es auch mit dem SQL Server funktionieren.

An dieser Vorgabe lässt sich nichts drehen. Ich persönlich würde lieber den SQL Server nehmen.

Beim SQL Server hat man die Möglichkeit, bei jeder Änderung an den Daten, die man selbst ließt, ein Event zu erhalten. Somit könnte ich die geänderte Row ermitteln und entsprechend vorgehen (ob nun die Row sichtbar sperren oder im Hintergrund aktualisieren, damit der akt. User sie gleich überschreiben kann). Vorteil: ich muss nicht ständig gegen die Datenbank pollen, damit weniger Traffic.

Beim Access müsste man tatsächlich etwa mit einem TimeStamp pro Row arbeiten. Das Problem ist, das man den TimeStamp zu jeder Row ständig in der Datenbank abfragen müsste. Gut, wenn der User zum Bearbeiten des Satzes zuerst, wie du beschreibst, den Satz für sich reservieren soll, werden es nicht so viele Abfragen, wie wenn man das ständig beim durchgehen alle Rows tun würde.
Aber auch diese Lösung würde der eine oder andere Kunde mir vermutlich um die Ohren schmeißen, weil seine Mitarbeiter ständig über gesperrte Sätze nörgeln.

Ja,... eine schwere Lage.

Meine Hoffnung bei diesem Beitrag ist einfach, dass jemand kommt und sagt: "das muss alle ganz anders laufen, nämlich so....".

F
10.010 Beiträge seit 2004
vor 15 Jahren

Du weisst, das der MS Sql-Server Express kostenlos ist, auch für den kommerziellen Einsatz?

D
diamond Themenstarter:in
38 Beiträge seit 2007
vor 15 Jahren

@FZelle
sicherlich weiß ich das.

Das der Kunde kein Ahnung von der Technik hat ist wohl auch klar. Und wenn ein Kunde schon mal kein Geld für Server und Software hat, dann sicherlich schon gar nicht bereit einen IT Berater zu beschäftigen, der ihm den SQL Server Express installiert.

Und solche Kunden gibt leider viele. Deshalb wäre eine Access Lösung für solche gerade so zumutbar, da ist ja nur eine Datei die irgend wo rumliegen muss.

Dein Vorschlag mit dem CommandBuilder.ConflictOption kannte ich tatsächlich noch nicht, dem werde ich mal nachforschen.

Danke für den Tipp!

F
10.010 Beiträge seit 2004
vor 15 Jahren

Wieso braucht es einen IT-Berater um den Sql-Server zu installieren?

1.346 Beiträge seit 2008
vor 15 Jahren

Wieso braucht es einen IT-Berater um den Sql-Server zu installieren?

Glaubst du ein Normalsterblicher nicht Programmierer oder IT-Profi kann das ? Ich hatte selber am Anfang Probleme damit. Stichwort Instanzen.

Gruß pdelvo

K
593 Beiträge seit 2007
vor 15 Jahren

Hallo,

also ich glaube das drivtet hier komplett ab. Ich meine du willst anscheinend eine datenbank wie sql compact mit mehnrbenutzer betrieb ... Das geht natürlich auch nicht und ich weiß jetzt nicht was jetzt an Access (für den Mehrbenutzer Betrieb!!) einfacher sein soll als der SQL Server. Und nach deinen Anforderungen brauchst du sowieso einen "Server" kann ja irgend ein Rechner sein. Aber irgendeiner muss ja immer an sein damit auch die unterschiedlichen Nutzer arbeiten können. Mich interressiert echt mal wie deine ganz konkreten vorstellungen sind. Ich meine einfach komfortabel? Webservice der einfach XML Dateien schreibt. Das brauch nicht viel und ist so komfortabel wie du es schreibst.

Gruß Daniel

F
10.010 Beiträge seit 2004
vor 15 Jahren

@pdelvo:
Irgendwie kann ich das nicht nachvollziehen.
Wenn der MS Sql Server Express ( egal ob 2005 oder 2008 ) ganz normal installiert
wird, kann das jeder Hanz und Franz.

Sollen es Besonderheiten sein, ist es DEINE Aufgabe die Installation des Sql-Server
Express, z.b. mit einem anderen Instanznamen, in DEINEM SETUP mit anzustossen.

Wir installieren den SSE seit Jahren mit unserer SW, und haben nur ganz selten Probleme.
Das einzige Problem, das wir manchmal haben ist, wenn ein übermütiger Admin
das System so verstellt hat, das es nicht geht.
Aber dann ist der Admin zuständig.

Und welches Problem hast Du mit Instanzen?

3.511 Beiträge seit 2005
vor 15 Jahren

Und man kann den SQL Server (Express) wunderbar über eine INI Datei steuern (SqlInstall.ini). Da gibt man sämtliche Parameter an (Instanzname, Zielverzeichnis, Adminname, usw...) und startet die Installation im Silentmodus. Und schwups, paar Minuten später hat man ein wunderbar installierten SQL Server. Da braucht man keinen IT Berater, Administratoren oder sonstwas.

Wenn man diese Aktion in einer Custom Action eines Setupprojektes startet, sieht der User nur das Setupprogramm des eigenen Programmes.

"Jedes Ding hat drei Seiten, eine positive, eine negative und eine komische." (Karl Valentin)

K
80 Beiträge seit 2006
vor 15 Jahren

Hallo diamond,

ich sehe immernoch das gleiche Problem. Bitte gib mir doch eine Aussage. Befindet sich das Datenbank Design in der höchsten Normalform? Wenn ja, solltest du vielleicht das Beratungs Gespräch mit dem Kunden neu ausrollen.

Ernsthafte Software Entwicklung beinhaltet niemals das Ja und Amen sagen, zu allem was der Kunde möchte. Versteh das bitte nicht als Angriff, eher als produktiven Tip:

Ablauf:

==== Software Analyst

  • Kunden Gespräch
  • Geschäftsprozesse Prüfen
  • Kunden Gespräch
  • Fachliche Konzept Erarbeitung

==== Software Architekt

  • Mittel definition
  • Technisches Konzept

==== Kunde & Softwareanalyst

  • Nachbearbeiten der Konzepte
  • AB HIER GILT DAS KONZEPT UND DER KUNDE HAT KEIN ABER MEHR

==== Entwickler

  • Ausprogrammierung des Konzepts

.
.
.

So geht es weiter. Analysten sollten sich Betriebswirtschaftlich so fit fühlen, solche Fehler zu finden, Architekten müssen ihre Tools ( u.a. auch ADO ) kennen. Entwickler verfügen über excellente Sprachkenntnisse.

Hier scheint was schief gelaufen zu sein. Ich kann dir aus meiner Erfahrung heraus garantieren, dass du in eine Sackgasse rennst und weder in der Lage bist den Kunden noch dich zufrieden zu stellen. Wenn du ne Firma hast die das für den Kunden macht, hoffe das er irgendwann abspringt, sonst landet ihr vor Gericht und das kann a ) teuer werden und b ) ungemütlich werden.

Nimm meinen Rat an, lass nur einen auf einer Row arbeiten, spreche noch einmal mit dem Kunden und schicke einen Analysten zu ihm um die Prozesse zu sichten und zu bearbeiten.
(Wenn du alle 3 Rollen übernimmtst, incl. Projektmanagement, dann lese vll vorher ein Buch über Business Workflows o.sth.l.t )

MFG Krieger

Gelöschter Account
vor 15 Jahren

Das was JAck30lena beschreibt, mit gelben und roten Feldern, daran hatte ich auch mal gedacht. Aber zunächst müsste man es irgend wie realisieren, dass alle Client von jeder Änderung an den Daten irgend wie mitbekommen (auf dem SQL Server bekommt man z.B. eine Event, bei Änderung an Daten, bei MS Access eher nicht).

Und was dann? Dann würde der erste User Daten verändern und die restlichen 9 sehen, dass es eine Änderung gibt, das eigentliche Problem würde aber weiterhin bestehen bleiben. Die restlichen 9 User könnten nicht speichern, da sich die Daten in der lokalen DataTable wieder mit dennen in der Datenbank unterscheiden würden.

Oder denke ich einfach zu kritisch?

anders. nicht erst beim speicher wird geprüft ob sich was geändert hat sondern onthefly. das realisiert man mit events.

praktisch ist es so, das wenn ein user einen datensatz ändert aber noch nciht speichert, das dann das feld bei allen anderen gelb wird. wenn der user über das feld geht, so kann er sehen, wer da ändert und wie der neue wert aussehen soll.

speichert der ändernde user dann, dann wird es überall rot, bis die user das feld refreshen lassen (ob automatisch oder manuell ist da erstmal egal)

das hat den vorteil, das wenn 2 user der meinung sind, das sie zur gleichen zeit einen wert ändern wollen, das sie merken, das da noch jemand ist und sich ggf. mit diesem absprechen können, da sowieso nur ein wert wirksam sein darf.

K
80 Beiträge seit 2006
vor 15 Jahren

Also ich als User würde laut scheiße schreien bei so nem system. Folgendes Szenario:

Sachbearbeiter 1: Öffnet Datensatz, ändert, stellt fest es fehlt ihm eine Info
Sachbearbeiter 2: Öffnet Datensatz, ändert, ignoriert den fakt das ihm was fehlt, speichert
Sachbearbeiter 1: Hat die info, zurück in der software sieht er, jmd anders hat geändert, aber er sieht ja die Daten noch nicht, würde auch keinen Sinn machen, da er ja schon selbst was geändert hat, Bricht ab.
Sachbearbeiter 1: 2 Wochen später sieht er, SB2 hat müll eingetippt. Er ändert wieder.

Besser:

Sachbearbeiter 1: Öffnet Datensatz, ändert, stellt fest es fehlt ihm eine Info
Sachbearbeiter 2: Öffnet Datensatz, stellt fest, SB1 bearbeitet, Satz is readonly
Sachbearbeiter 1: Hat die info, zurück in der software, tippt er ein, speichert, alle glücklich

Als Anwender UND als Chef würde ich variante 2 bevorzugen, für den Anwender weniger Frust, für den Chef weniger Kosten

Gelöschter Account
vor 15 Jahren

hallo Krieger,

das kannst du nicht pauschalisieren. in meinem fall z.b. war das ein produktionsband, an dem ständig konfigurations-änderungen gemacht wurden und wenn eine komplette produktionslinie stehen würde, nur weil herr xyz mittagspause hat und einen datensatz noch offen hat, wäre das kaum vor dem kunden zu rechtfertigen oder siehst du das anders?

gruß
JAck

K
80 Beiträge seit 2006
vor 15 Jahren

Nein sehe ich nicht anders, in dem fall mag es gepasst haben. Aber den Ansatz zu pauschalisieren wäre ein Fehler. Solche Konstrukte brauchst man nur in spezialfällen. Wie dem auch sei, er hat einige Lösungsansätze, ich rate hier explizit davon ab irgendwelche Konstrukte aufzubauen mit in denen neben DB Server und Client noch irgendwelche anderen aktiven Server eingeführt werden. Ich rate dazu den ADO weg zu gehen, von mir aus mit nem ORM der locken und transaktionen kann und ein ernstes gespräch mit dem Kunden zu führen. Software ist kein Allheilmittel!

84 Beiträge seit 2007
vor 15 Jahren

@ Diamond

auch ich rate dir dringend zur Express Edition des SQL-Server, mit Access wirdt du bei deinem Anforderungsprofil kaum glücklich werden.

Bedenke, dass Access als reine Fassade zur Datenhaltung fungiert, und keinerlei Filterfunktionen ausführt.
Bei jeder Abfrage wird der gesamte (!) Inhalt einer Tabelle zum Client übertragen, erst dort wird das Resultset erstellt!
Das bedeuted dass du bei 10 Benutzern tonnenweise nutzlose Daten über dein Netzwerk transferierst, die Performance wird entsprechend schlecht wenn nicht unhaltbar sein.

Dass 10 Benutzer gleichzeitig auf einen Datensatz mit Kundenstammdaten zugreifen, ist schwer vorstellbar und noch schwerer zu realisieren.