Re: Problem mit Dataset-Objekt und Access-Datenbank

Tech-Archive recommends: Repair Windows Errors & Optimize Windows Performance



Hallo Manfred,

ich benutze den Dataset-Designer von VS 2008.

.... und hast Dir vermutlich noch keine Gedanken
darüber gemacht, welchen Code dieser Designer
eigentlich produziert und welche Objekte dieser
Code dann enthält.

Ich möchte erstmal über Daten aus der Datenbank sehen.

Diesen Satz verstehe ich nicht.


Um Daten aus einer DB-Tabelle zu sehen brauchst Du ein
Command-Objekt dessen CommandText etwa so aussieht:

"Select * From Tabelle"

Ein Command-Objekt hat u.a. auch eine Eigenschaft,
welcher man einen Verweis auf das beim Ausführen des
Commands zu verwendende Connection-Objekt übergibt.
Das ist auch nicht anders, wenn Du einen DataAdapter
verwendest, der einem DataSet zugeordnet ist.
Ein DataAdapter hat u.a. eine Eigenschaft SelectCommand
und genau die verweist auf ein wie oben beschriebenes
Command-Objekt und dieses Commandobjekt hat wiederum
eine Eigenschaft.
Es gibt also folgende Zusammenhänge:

Dim Cnn as new OleDbConnection
Cnn.Provider = ...
Cnn....
Cnn.Open

dim Cmd as new OleDbCommand
Cmd.CommandText = "Select * From Tabelle"
Cmd.Connection = Cnn

Dim DA as New OledbDataAdapter
DA.SelectCommand = Cmd


Dort kann ich auf eine ungesicherte Access-Datenbank
zugreifen.


Wo kannst Du wie auf eine ungesicherte Access.mdb zugreifen?

Alles funktioniert, es gibt auch ein Beispiel mit der
Nordwind-Datenbank in der Onlinehilfe.

Beispiele, welche diese Musterdatenbank verwenden
gibt es viele.


Der Zugriff auf eine gesicherte Datenbak muss aber mit
dem Designer ebenfalls möglich sein.

Ist er ja auch.
Nur solltest Du schon erst mal wissen, was der
Designer eigentlich macht bzw. machen muss
um eine Connection zu einer solchen DB herzustellen.

Die gesicherte Datenbank verfügt über eine system.mdw.

In meinem vorigen Posting habe ich Dir Code gezeigt,
der genau zu einer solchen via System.mdw geschützten
*.mdb eine Connection herstellt.

Für die einzelnen Benutzer habe ich verschiendene
Berechtigungen vergeben.

Die Berechtigungen sind für das Herstellen der Connection
erst mal uninteressant. Die kommen erst zum Tragen,
wenn tatsächlich auf bestimmte Daten in der *.mdb
zugegriffen wird.


Ich kann mit dem Dataset-Designer zwar eine Testverbindung z
u der Datenbank herstellen, wenn ich weder Benutzername
noch Kennwort eingebe.

Ich sehe dann den Inhalt der Datenbank.
Jedoch wird der Zugriff auf z.B. eine Tabelle verweigert,
weil dazu eben ein Passwort und ein Benutzername
notwendig sind.

Dummerweise kann man Dataset-Designer zwar einen
Benutzernamen und ein Kennwort eingeben.

Das alleine genügt nicht.
Dort wo Du Benutzerkennung und Passwort eingibst musst
Du auch noch auf den Button "Erweitert..." klicken um das
Fenster für "Erweiterte Eigenschaften" zu öffnen, in welchem
dann u.a. bei der Eigenschaft "Jet OLEDB:System database"
der vollst. Pfad zu Deiner System.mdb einzutragen ist.


Dann kommt sofort die oben genannte Fehlermeldung.

Weil Du offensichtlich keinen oder einen ungültigen Pfad
zur System.mdw übergeben hast.

In den erweiterten Einstellungen kann man die System.mdw
eintragen, was ich auch getan habe.

Wenn der dort angegebene Pfad richtig ist, dann
lässt sich die *.mdb auch öffnen.


Möglicherweise liegt es auch daran, das der Dataset-Designer
versucht, die Datenbank exklusiv zu öffnen.

Wie kommst Du darauf?
Schau Dir doch einfach mal den Connectionstring an, welchen
der Designer erzeugt hat.
Wie sieht der denn konkret aus?

Leider gibt es aber bei den Optionen unter erweiterte Einstellungen
praktisch keine Hinweise, was die Optioen eigentlich darstellen.

Na ja, das sind in erster Linie Eigenschaften des zu
erstellenden Connectionobjektes und zu den unerlässlichen
Grundlagen der DB-Programmierung gehört halt auch,
dass man weiss, wie ein Connectionobjekt funktioniert
und welche Eigenschaftseinstellungen es dazu benötigt.


Möglicherweise ist dort eine Option, die sagt, ob die DB
exklusiv oder nicht zu öffnen ist.

Hast Du Dir denn den Code aus meinem vorigen Posting
überhaupt angesehen?
Darin gibt es u.a. eine Zeile

' DB im geteilten Modus öffnen
.Add("Mode", "Share Deny None")

die nichts weiter macht, als im Connectionstring den
Abschnitt

Mode="Share Deny None"

einzufügen, was zur Folge hat, dass die *.mdb im geteilten
(Mehrbenutzer) Modus geöffnet wird.


Soll die *.mdb exclusiv geöffnet werden, muss der
entspr. Abschnitt im Connectionstring so aussehen:

Mode = "Share Exclusive"

Ein Beispiel, wie man eine gesicherte Datenbak öffnet,
gibt es anscheinend auch nicht.

Genau dieses habe ich Dir doch in meinem vorigen
Posting gegeben.


Ich möchte erst dann mit der Implementierung in Code
beginnen, wenn ich wenigstens die Verbindung zur
Datenbank herstellen kann.

Datenbankprogrammierung ohne jegliche Grundlagen
wird auf Dauer sicher wenig Erfolgserlebnisse bringen,
deshalb solltest Du Dir schon erst mal ein paar elementare
Grundlagen hierzu anlesen. Du wirst dann auch sehr schnell
merken, dass der Datendesigner nicht sonderlich flexibel
ist und auch in vielen Fällen alles andere als optimalen
Code produziert.

Bisher funktioniert die Verbindung noch nicht mal mit
dem Designer, und die Fehlermeldung hilft mir nicht,
weil ich nicht erkenne, was falsch sein soll.

Ja, weil Dir eben ganz offensichtlich jegliches unerlässlich
notwendige Grundlagenwissen zu Connection-, Command-,
DataReader-, DataAdapter- und DataSet-Objekten fehlt.


Wichtig für Dich ist auch noch zu unterscheiden, ob
die *.mdb über eine System.mdw geschützt ist oder
ob die *.mdb durch ein internes Datenbankkennwort
geschützt ist oder evtl. sogar beides.


Schau Dir mal das Beispiel unter

www.gssg.de -> Visual Basic -> VB.net
-> OLEDB1 (Access.mdb)

an. Dieses Beispiel kann beliebige ungeschützte oder
mit einem internen DB-Kennwort geschützte *.mdb öffnen.
In diesem Beispiel kann der Benutzer über einen
Windows-Dateidialog eine beliebige *.mdb auswählen.
Das Programm versucht dann diese DB erst mal ohne
Übergabe eines DB-Kennwortes zu öffnen. Gelingt dies
nicht, erhält der Benutzer ein Dialogfenster, zur Eingabe
des DB-Kennwortes und es wird erneut versucht, damit
die *.mdb zu öffnen.

Wie das Öffnen der Connection in diesem Beispiel
funktioniert, solltest Du schon erst mal verstanden haben.
Den Code dann so zu erweitern, dass auch eine via
System.mdw geschützte DB geöffnet werden kann,
ist dann sicher kein Problem mehr.

Vermutlich fehlen Dir auch die Grundlagen zu den
Objekten DataSet, DataTable, DataView, CurrencyManager
und Relation.
Diese Objekte und deren Zusammenspiel werden in den
div. DataGridView-Beispielen unter

www.gssg.de -> Visual Basic -> VB.net

eingehend und anschaulich beschrieben. Gerade diese
Objekte und deren Arbeitsweise solltest Du vorrangig
kennenlernen und erst mit diesem Wissen dann den
nächsten Schritt "Öffnen einer DB" tun.

Mit dem Designer irgendwas zusammenzuklicken,
und dann ohne jegliches Grundlagenwissen Fehler
suchen zu wollen, ist sicher der falsche Weg.


Gruß aus St.Georgen
Peter Götz
www.gssg.de (mit VB-Tipps u. Beispielprogrammen)


.



Relevant Pages

  • Re: Konkurrenzfehler
    ... folgender Code die Verbindung her; von Hand könnte ich ihn nicht ... Access Datenbank in Microsoft Visual Studio ... wäre Deine Frage besser aufgehoben. ... wie Du die Connection zu Deiner DB ...
    (microsoft.public.de.vb.datenbank)
  • =?Utf-8?Q?Re:_=C3=84nderungen_in_Datenbank_schr?= =?Utf-8?Q?eiben?=
    ... Woher soll dann die Jet wissen, welche Werte in die Datenbank einzutragen ... nur den Designer im VB.NET 2005 und schau dir den generierten Code an. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: Datenquelle hinzufügen geht nicht
    ... Vorstellung davon hast, wie eine Verbindung (Connection) ... diese Connection Daten aus einer Datenbank liest bzw. ... DataReader verbergen sich letztlich irgendwelche ... dass ein vom Designer ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)
  • Re: Problem mit Dataset-Objekt und Access-Datenbank
    ... Designer zu nutzen ist und erweiterbar ist. ... Aus der Datenbank lese ich jetzt mit Code statt dem Designer. ... Bisher lese ich die Tabellen aus Excel in Arrays. ...
    (microsoft.public.de.german.entwickler.dotnet.vb)
  • =?iso-8859-1?Q?Re:_Tableadapter_und_verkn=FCpfte_Tabellen?=
    ... Datenbank angelegt hast, dann stehen Dir TableAdapter zur Verfügung. ... Designer wird Dir wie auch in Access die Beziehung der Tables angezeigt. ... Wem mit den vom Designer generierte Standardablauf ausreicht, kann sich den Code gern von Designer generieren lassen. ... Wenn der Designer genutzt wird, wird in der Config-Datei ein Eintrag für den ConnectionString abgelegt, den das Connection-Objekt im TableAdapter für den dort enthaltenen DataAdapter nutzt. ...
    (microsoft.public.de.german.entwickler.dotnet.datenbank)