online 1
gast (50)

/ Forum / Datenbanken

DatenbankenDatenbanken

Fragevon maeder1 vom 28.10.2019, 10:43 Options

Zwei Benutzer auf eine Access-Datenbank

Hallo

mal ein kleines Problem:
auf einem Netzwerkspeicher habe ich eine Access-Datenbank mit u.a. Adressen gespeichert. Nun, wenn jemand einen Serienbrief schreibt, und damit auch Zugriff hat auf die Datenbank, kann kein zweiter einen Brief schreiben.

Gibt es nun eine Lösung, wie zwei Benutzer die Datenbank gleichzeitig benutzen können?

gruss
maeder1


Antwort schreiben

Antwort 1 von lleopard vom 28.10.2019, 18:44 Options

Hi maeder,

Zitat:
Gibt es nun eine Lösung, wie zwei Benutzer die Datenbank gleichzeitig benutzen können?


Welche Version von Access verwendet ihr?

Es gibt erstmal den Standardöffnungsmodus den man auf "Gemeinsame Nutzung einstellen sollte und nicht auf Exklusiv.

Dann gibt es in einer Datenbank meistens dann Zugriffsprobleme, wenn 2 Nutzer gleichzeitig versuchen Datensätze zu bearbeiten. Das löst man indem der 1. den sperrt, und der 2 die Info bekommt, daß eben der Datensatz von einem anderen User gerade bearbeitet wird.

Ich persönlich programmiere Formulare und Berichte fast ausschließlich so, daß DS nur eingelesen werden, aber keine Tabelle gesperrt wird. Bei einem Eingabeformular mache ich dann ein ungebundenes Fomular und übergebe die Werte erst, wenn der Benutzer auf Speichern klickt.

So umgeht man diese Probleme und Lese-/Schreibkonflikte....

Gruß leo

Antwort 2 von maeder1 vom 28.10.2019, 20:09 Options

Hallo leo

also wir haben eine kleine Datenbank im Access 2003. In einer Tabelle stehen sämtlich Adressen.
Nun möchten, wie beschrieben, mehrere User auf diese Datenbank zugreiffen, was geblockt wird.

WIe kann ich das umgehen?

Gruss und danke
maeder1

Antwort 3 von lleopard vom 29.10.2019, 09:35 Options

Hi maeder1

die Frage ist doch, was geblockt wird?

Denn ich glaube nicht, daß nicht 2 User gleichzeitig von unterschiedlichen Plätzen aus die gleiche Datenbank öffnen können, insbesondere dann nicht, wenn wie oben beschrieben, du den gemeinsamen Zugriff eingestellt hast.

DAS mal vorausgesetzt!!! Denn ich arbeite täglich mit Access-Datenbanken und ich weiß DAS es geht!

Ich nehme eher mal an, daß die zugrundeliegende Tabelle durch den 1. der die DB öffnet exklusiv geöffnet wird, wahrscheinlich über ein Eingabeformular.

Wenn dem so ist, solltest du - insbesondere in einer Mehrbenutzerumgebung - den Zugriff auf die Datenquelle dynamisch hinterlegen.

Nehmen wir mal an du willst einen Kunden bearbeiten.
Kundennummer 1234
Name Hase

Um an die Stammdaten des Kunden heranzukommen, muß der User ja eine Kundennummer eingeben oder suchen. Also
Aktion 1: Eingeben
Aktion2: Suchen


Beide Aktionen lösen eine Datenbank - Abfrage aus:

zu 1 Eingeben: der user gibt eine ihm bekannte Kundennummer ein und klickt auf ok. Der klick auf OK selektiert ihm den Datensatz und zeigt diesen an:

zB so:

dim dbs as dao.database
dir rs as dao recordset
set dbs = currentdb
set rs = dbs.openrecordset ("Select * FROM Kundentabelle Where Kundennummer=" & Eingabefeld.Value)

'Schon hast du Zugriff auf diesen einen DS. siehe aber zusätzlich die Hilfe zu openrecordset, wie man Zugriffe auf die Datenquelle steuert...

'Mal angenommen du hast für jedes Feld der Tabelle in deinem Formular auch ein Feld hinterlegt, dann definierst du einfach den Typ Feld und durchläufst alle Felder und übergibst die Werte an das Formular:

dim fld as Field

for each fld in rs.Fields
me(fld.name).value = rs(fld.name)
...
next fld

'Und am Ende alles wieder schließen:
rs.close
set rs = Nothing
set dbs = Nothing

du kannst aber auch in der zugrundeliegenden Abfrage nur die formularfelder hinterlegen, dann funktioniert das auch. Wie man die Abfrage erstellt ist auch ganz einfach: Einfach unter Abfragen eine neue erstellen, die Felder anzeigen lassen und dir dann die SQL-Ansicht anzeigen lassen. Fertig! :-))

Zu 2. Suchen: Die Kundennummer ist nicht bekannt, aber der name. irgendwas muß man ja haben... ;-)

Hierfür gibt es viele Wege. Einer wäre ein Suchformular. Das ist nicht der schlechteste Weg, aber auch hier wird nur auf der Basis einer Abfrage auf die Datensätze zugregriffen.

Ähnlich wie oben durchläufst du zB die Field-Auflistung einer zB im Vorfeld eingegrenzten Auflistung von Feldern. Soll heißen, der User soll nur nach bestimmten Vorgaben suchen können. zB Name, Kundennummer, Telefonnummer, etc... Nun kann der User zB aus einem Kombinationsfeld eingeben wonach gesucht werden soll. Also zB nach Name wird gesucht und "Hase" eingegeben.

Wenn der User also sagt er will die Kunden suchen, klickt er auf ok. Das löst nun die Aktion aus:

Dein Datensatzfilter sieht also so aus:
dim stg as string
dim stgVal as string
stg = Suchfeld.Value 'Hier also der Name
stgVal = eingabefeld.Value 'Hier also Hase

Suchfeld wie auch eingabefeld dürfen nicht leer sein!
if isnull(stg) or isnull(stgVal) then
msgbox "Sucheingaben bitte vervollständigen",vbokonly,"Suchen"
'evtl. zurücksetzen der WERTE: suchfeld.value = Null...
exit sub
end if

Sind aber beide gefüllt:
dim ssql as string
ssql = "Select * FROM Kundentabelle Where " & Suchfeld.Value & " = '" & eingabefeld.value

Im Prinzip ist die Vorgehensweise nun wieder wie oben beschrieben.... Felder durchlaufen, anzeigen ... aber es kann ja sein, daß mehrere Kunden einen Match mit dem Namen Hase auslösen, die Anzahl Datensätze also größer ist als 1.

wenn wir also den DS geöffnet haben set rs = dbs.openrecordset(ssql)

prüfen wir erstmal, was die Tabelle zu bieten hat.
dim cc as long
if rs.bof then
msgbox "keinen eintrag gefunden"
exit sub
end if

Null Datensätze, also raus!
rs.movelast
cc = rs.Recordcount

select case cc

case 1 'Nur ein Kunde, dann zeigen wir auch gleich die Daten.
Gleicher weg wie oben, jedes Feld wird angezeigt.
case is >1
Nun muß der anwender die Möglichkeit bekommen sich den richtigen Kunden auszusuchen.
Das kann man durch ein weiteres Kombinationsfeld erreichen
dem man nun hinterlegt was gefunden wurde.
angezeigt werden in dem Kombinationsfeld zB 3 Spalten:
Name: Kundennummer: Telefonnummer
dann durchlaufen wir also unsere Abfrage und zeigen dem User die Kunden an:
dim i as integer
dim RowS as string
RowS = vbnullstring
for i = 1 to cc
RowS = Rows & rs!Kundennummer & ";" & rs!Name & ";" & rs!Telefonnummer & ";"
rs.movenext
next i
end select

Nun muß der User also im Kombinationsfeld den kunden eingeben der angezeigt werden soll. wieder erhalten wir einen Wert den wir dann auf die gleiche weise wie beschrieben einfach auswerten.

Nun stellt sich noch die Frage, wie man die Datensätze zurückschreibt an die Tabelle ...

auch denkbar einfach:

wieder filtern wir auf den Kunden, lesen das Formular aus und übergeben die formulardaten an den entsprechenden DS der Tabelle (auch hier nochmal der hinweis, schau dir die Hilfe zu OpenRecodset an... dann gibt es auch keine Zugriffsprobleme)

Das gleiche wie oben nur Rückwärts und diesmal mit der aktualisierung der Tabelle

also Schleife durch alle relevanten Formularfelder und per
rs.edit: rs(fld.name) = me(fld.name).Value: rsUpdate 1, 0
an die Tabelle schreiben.

Die natürlich im Formualr sperren... :-)

so, das war ein kleiner einführungskurs zum Thema "Mehrbenutzerdatenbank"...


Hoffe das hilft dir ein wenig weiter...

Gruß leo

Ähnliche Themen

Datenbank von Works8.5 in Access umwandeln
knuti24  22.07.2007 - 55 Hits -

Rechnungskurs-Datenbank
ichhabeinefrage  02.08.2007 - 148 Hits - 7 Antworten

Access-Datenbank nicht lesbar
hwpaetz  24.10.2007 - 229 Hits - 1 Antwort

ms access datenbank
Wayne  15.12.2007 - 182 Hits - 2 Antworten

Hinweis

Diese Frage ist schon etwas älter, Sie können daher nicht mehr auf sie antworten. Sollte Ihre Frage noch nicht gelöst sein, stellen Sie einfach eine neue Frage im Forum..

Neue Einträge

Version: supportware 1.9.150 / 10.06.2022, Startzeit:Mon Jan 26 01:23:17 2026