vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
DTA-Dateien erstellen inkl. BLZ-/Kontonummernpr?fung  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   RSS-Feeds  | Newsletter  | Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2017
 
zurück
Rubrik: Datenbanken   |   VB-Versionen: VB5, VB601.06.04
Grundlagen: Arbeiten mit der kostenlosen MSDE-Datenbank von Microsoft

Mit diesem Workshop möchten wir aufzeigen, wie eine MSDE-Datenbank installiert wird, Datenbanken und Tabellen hinzugefügt werden, und wie diese Datenbanken in VB6 Programmen verwendet werden können.

Autor:  Wolfgang ChristBewertung:     [ Jetzt bewerten ]Views:  43.381 

Neue Version! sevEingabe 3.0 (für VB6 und VBA)
Das Eingabe-Control der Superlative! Noch besser und noch leistungsfähiger!
Jetzt zum Einführungspreis       - Aktionspreis nur für kurze Zeit gültig -

Mit diesem Workshop möchten wir aufzeigen, wie eine MSDE-Datenbank installiert wird, Datenbanken und Tabellen hinzugefügt werden, und wie diese Datenbanken in VB6 Programmen verwendet werden können.

Inhalt:

  1. Installation der MSDE
  2. Allgemeine Hinweise
  3. Anlegen und Löschen von Datenbanken
  4. Anlegen und Löschen von Tabellen, physisch
  5. Anlegen und Löschen von Tabellen, Abfragen (Views)
  6. Verwenden in VB6

1. Installation der MSDE

Laden Sie sich bei Micorsoft das MSDE Datenbank-Setup herunter. Die aktuellste Fassung findenSie hier:
 http://www.microsoft.com/downloads/details.aspx?FamilyId=413744D1-A0BC-479F-BAFA-E4B278EB9147&displaylang=de

Entpacken Sie das Paket in einen Ordner Ihrer Wahl, standardmäßig ist "c:/sql2ksp3/" bzw. bei der deutschen Version "c:\MSDERelA" vorgegeben.

Wechseln sie auf der Kommandozeile von Windows (Start, Ausführen, "cmd") in diesen Ordner oder wechseln Sie über Start --> Programme --> Zubehör direkt in die Eingabeaufforderung und tippen Sie folgende Anweisungen ein:

cd\

cd sql2ksp3 ' (bzw. MSDERelA, je nachdem in welchem Ordner Sie 
                                  ' das Setup gespeichert haben)

cd msde     ' (kann bei der deutschen Version unter Umständen entfallen, 
                                  ' da ein solcher Ordner nicht existiert)

setup SecurityMode= SQL SAPWD=IhrKennwort

wobei "IhrKennwort" für ein Kennwort Ihrer Wahl steht (ohne Leerzeichen).

Weitere wichtige Parameter

DISABLENETWORKPROTOCOLS=nGibt an, ob die MSDE Netzwerkverbindungen von Anwendungen zulassen soll, die auf anderen Computern ausgeführt werden. Standardmäßig, bzw. wenn Sie DISABLENTWORKPROTOCOL=1 angeben, konfiguriertdas Setupprogramm die MSDE so, dass Netzwerkverbindungen nicht zugelassen werden. Geben Sie DISABLENETWORKPROTOCOLS=0 an, um Netzwerkverbindungen zuermöglichen.
DATADIR="Pfad_zum_Datenordner"Gibt den Ordner an, in dem das Setupprogramm die Systemdatenbanken, Fehlerprotokolle und Installationsskriptsinstalliert. Der für Pfad_zum_Datenordner angegebene Wert muss mit einem umgekehrten Schrägstrich (\) enden.

Das war auch schon alles für die Installation.

Zusätzliche Hinweise
Bei unseren Testinstallationen der MSDE ist zum Teil folgender Fall aufgetreten:

Es kann durchaus vorkommen kann, dass das Setup nach ca. 15 Minuten nicht mehr reagiert und sich mit einem entsprechenden Hinweis meldet. Hier sollte man auf "Abbrechen" klicken und das Setup sofort erneut ausführen. Danach klappt's dann i.a.R.

Sollten Sie über eine bereits bestehende Installation / Instanz der MSDE verfügen, so brauchen Sie zum durcharbeiten dieses Workshops das sa-Kennwort. Falls diese Instanz der MSDE nicht im Gemischten Zugriffsmodus läuft, so können Sie der unten aufgeführten Dokumentation eine genaue Anleitung entnehmen.

Weitergehende Informationen zur Installation der MSDE können Sie sich hier herunterladen (ca. 30 MB):
 Microsoft SQL Server Online Book
oder hier:
 Readme für die MSDE 2000A.

2. Allgemeine Hinweise

Die MSDE ist der kleine kostenlose Bruder des MS SQL Servers 2000, dieser besitzt aber im Vergleich zum großem Bruder keine Management Programme zur Verwaltung. Diese Verwaltung wird ausschließlich mit SQL-Befehlen erledigt. Zusätzlich hat eine MSDE Datenbank im Vergleich zu ihrem großem Bruder die Einschränkung, das die Anzahl der gleichzeitig möglichen Connections auf 10 beschränkt ist. Wollen Sie also eine sehr große Mehrbenutzeranwendung entwickeln, kommen Sie um den MS SQL Server nicht herum, sind es aber nur bis zu 10 Benutzer ist die MSDE durchaus zu empfehlen. Sonstige Einschränkungen sind nicht bekannt. Allerdings sollte erwähnt werden, dass eine laufende Instanz der MSDE durchaus - je nach Auslastung - Rechenleistung fordert.

Eine MSDE Installation kann mehrere Datenbanken verwalten. Diese unterscheiden sich in ihrem Namen. Es gibt allerdings 5 Namen, die nicht verwendet werden dürfen: Master, Pubs, Model, tempdb, msdb, da diese bereits verwendet werden. Diese Datenbanken dürfen wir auch nicht löschen.

Grundsätzlich unterscheidet eine MSDE Datenbank zwischen 2 Möglichkeiten des Zugriffs: Windows Anmeldeinformationen und SQL Server Anmeldung. Hier wird nur die SQL Sever Anmeldung demonstriert. 

Wollen wir bestimmte Aktionen auslösen, müssen wir auch über entsprechende Rechte innerhalb des SQL Severs verfügen, das heißt der Nutzer mit dem wir angemeldet sind, muss über die benötigten "Rollen" verfügen. Darauf wollen wir in diesem kurzem Exkurs aber nicht eingehen, dies würde den Umfang einfach zu sehr sprengen. Der Einfachheit halber verwenden wir hier immer den Systemadministrator des SQL Servers, den Nutzer sa. Zusätzlich müssen wir immer zu einer bestehenden Datenbank verbunden sein. Von Anfang an existiert eine Master-Datenbank, die mit installiert wird. 

Nachdem wir nun die MSDE installiert haben, finden wir im SYSTRAY ein kleines Icon mit einem Tower und einem Kreis. entweder mit einem grünem Pfeil, einem Pausezeichen oder einem Stop-Zeichen. Über dieses Systray-Symbol können wir die MSDE starten, stoppen und anhalten.

3. Anlegen und löschen von Datenbanken

Zuerst verbinden wir uns mit der Datenbank "Master". (Wie dies geht lesen Sie unter Punkt 6. Verwenden in VB6). Über eine geöffnete Connection können wir zum Anlegen der Datenbank folgenden Befehl verwenden:

CREATE DATABASE [{DATENBANKNAME}]

Zum Löschen von Datenbanken verwenden wir

DROP1 DATABASE [{DATENBANKNAME}]

{DATENBANKNAME} wird hierbei immer durch den gewünschten Namen ersetzt.

4. Anlegen und löschen von Tabellen

Um eine Tabelle anzulegen, müssen Sie sich mit der entsprechenden Datenbank verbinden. Über eine geöffnete Connection gestaltet sich der grundsätzliche Aufbau wie folgt:

CREATE TABLE [{TABELLENNAME}] (
        {SPALTE},
        {SPALTE} )

Dabei kann {TABELLENNAME} beliebig sein, und eine {SPALTE} ist wie folgt aufgebaut: auf jede Spalte (mit Ausnahme der letzten) folgt ein Komma.

{SPALTENAME}] [{DATENTYP}] ({LÄNGE}) [NULL|NOT NULL]

Dabei kann {SPALTENAME} beliebig sein, {DATENTYP} ein Element der folgenden Liste der möglichen verwendeten Datentypen. Bei den mit * markierten
Datentypen muss die Länge in Klammern dahinter angegeben werden:

bigint
binary
bit (:= Boolean)
char* (nicht benutzte Zeichen werden mit Leerzeichen aufgefüllt)
datetime
decimal
float
image (:= memo Feld für Streams)
int
money
numeric*
nvarchar*
real
smalldatetime
damllint
sql_varaint
text
timestamp
tinyint
uniqueidentifier
varbinary
varchar* (nicht benutzte Zeichen werden nicht mit Leerzeichen aufgefüllt)

Zum Schluss muss noch angegeben werden ob NULL-Werte erlaubt sind oder nicht. Ein Autowert-Feld wird zusätzlich noch mit folgendem Schlüsselwort angelegt:

IDENTITY (1, 1)

Hier ein einfaches Bespiel für eine Tabelle "Kunden" mit einem Autowert, Name, Vorname, Straße, PLZ, Ort, Telefon, Kontaktanzahl:

CREATE TABLE [Kunden] (
	[ID] [bigint] IDENTITY (1, 1) NOT NULL ,
	[Name] [varchar] (50) NOT NULL,
	[Vorname] [varchar] (50) NULL,
	[Straße] [varchar] (50) NULL,
	[PLZ] [varchar] (8) NULL,
	[Ort] [varchar] (50) NULL,
	[Telefon] [varchar] (30) NULL,
	[Kontakte] [int] NULL) 

Um Tabellen zu löschen verwenden Sie folgenden Befehl:

DROP TABLE [{TABELLENNAME}]

{TABELLENNAME} wird hierbei immer durch den Namen der zu löschenden Tabelle ersetzt.

5. Anlegen und Löschen von Tabellen, Abfragen (Views)

Gespeicherte Abfragen, auch Views genannt, werden wie folgt angelegt:

CREATE VIEW [{ABFRAGENAME}] AS {SELECT-STATEMENT}

{ABFRAGENAME} wird hierbei immer durch den Namen der entsprechenden Abfrage ersetzt und {SELECT-STATEMENT} durch eine feste SQL-Abfrage.

Gespeicherte Abfragen (Views), werden wie folgt gelöscht:

DROP VIEW [{ABFRAGENAME}]

{ABFRAGENAME} wird hierbei immer durch den Namen der entsprechenden Abfrage ersetzt.

Auf diese gespeicherten Abfragen kann wie auf eine Tabelle zugegriffen werden, mit dem Unterschied, dass hier kein Update durchgeführt werden kann.

6. Verwenden in VB6

Fügen Sie Ihrem Projekt einen Verweis auf Microsoft ActiveX Data Objects 2.7 Library hinzu. Deklarieren Sie in einem Modul oder innerhalb der gewünschten Sichtbarkeit ein Objekt vom Typ ADODB.Connection und fügen eine Funktion hinzu, die die Connection zur Datenbank öffnet. Wenn Sie beides in ein Modul packen, brauchen Sie für Ihre Anwendung nur eine Connection.

' Modul modADOConnection
Public oConn as ADODB.Connection
 
' Datenbank öffnen
Public Function OpenConnection(ByVal sServer As String, _
  ByVal sDatabaseName As String, _
  ByVal sUsername As String, _
  ByVal sKennwort As String) As Boolean
 
  Dim p As String
 
  On Error GoTo ErrHandler
  If oConn Is Nothing Then
    Set oConn = New ADODB.Connection
    p = "Provider=SQLOLEDB.1;"
    p = p & "Initial Catalog=&" & sDataBaseName & ";"
    p = p & "Data Source=" & sServer & ";"
    p = p & "Persist Security Info=False;"
    p = p & "Connect Timeout=45"
    With oConn
      .CursorLocation = adUseClient
      .Open p, sUsername, sKennwort
      OpenConnection = True
    END WITH  
    Exit Function
  End If
 
ErrHandler:
  MsgBox "Es ist ein Fehler beim Öffnen der Datenbank aufgetreten." & _
    vbCrLf & CStr(Err.Number) & " " & Err.Description
End Function

Für Ihre erste Anmeldung und zum Anlegen einer neuen Datenbank, verbinden Sie sich mit der Datenbank Master. Befehle, die kein Recordset zurückgeben, können Sie mittels der Execute-Methode der Connection ausführen. z.B.:

oConn.Execute "CREATE DATABASE [TEST]" ' Anlegen einer Datenbank
 
' Anlegen der Tabelle Kunden
Dim SQL As String
 
SQL = "CREATE TABLE [Kunden] (" & _
	"[ID] [bigint] IDENTITY (1, 1) NOT NULL , " & _
	"[Name] [varchar] (50) NOT NULL, " & _
	"[Vorname] [varchar] (50) NULL, " & _
	"[Straße] [varchar] (50) NULL, " & _
	"[PLZ] [varchar] (8) NULL, " & _
	"[Ort] [varchar] (50) NULL, " & _
	"[Telefon] [varchar] (30) NULL, " & _
	"[Kontakte] [int] NULL)"
 
oConn.Execute SQL

Möchten Sie nun eine Abfrage ausführen und ein Recordset erhalten, können Sie dies wie folgt tun:

Dim oRs As ADODB.Recordset
Set oRs As ADODB.Recordset
 
oRs.Open "SELECT * FROM Tabelle", oConn, adOpenDynamic, adOpenOptimistic

Hinzufügen von Datensätzen (nur auf physischen Tabellen möglich)

a) per SQL Insert Into - Anweisung

Ein Insert Into-Befehl beginnt immer mit dem Schlüsselwort INSERT INTO [{Tabellenname}]. Danach folgt eine geklammerte Folge aller Felder, die gefüllt werden sollen. Autowert-Felder dürfen dabei nicht aufgeführt werden. Für unser obiges Beispiel wäre das dann wie folgt:

SQL = "INSERT INTO [Kunden]
([Name],[Vorname],[Straße],[PLZ],[Ort],[Telefon],[Kontakte])"

Nun haben wir zwei Möglichkeiten:

  • Aus einer bereits bestehenden Tabelle oder
  • Zeile für Zeile.

aa) Aus einer bestehenden Tabelle:

In diesem Fall folgt nun ein SELECT Statement, das uns die vorher genannten Feldinhalte in der aufgeführten Reihenfolge zurückliefert.

SQL = SQL & " SELECT [Name],[Vorname],[Straße],[PLZ],[Ort],[Telefon],[Kontakte] FROM [Kunden2]"
oConn.Execute SQL

ab) Zeile für Zeile

In diesem Fall folgt nun das Schlüsselwort VALUES, auf das wiederum eine geklammerte Liste der Feldinhalte folgt. Dabei werden alle Inhalte für als Texte definierte Felder in ' eingeschlossen, Zahlen nicht.

SQL = SQL & " VALUES ('Maier','Andreas','Musterstrasse 1','12345','Musterstadt','01234-56789',3)"
oConn.Execute SQL

b) per ADO

Um per ADO Zeilen hinzufügen zu können, müssen wir als erstes ein Recordset auf die gewünschte Tabelle öffnen. Danach verwenden wir die Methode AddNew des Recordsets, füllen alle Felder mit dem gewünschtem Inhalt, und speichern die Zeile mit der Methode Update. Abbrechen können wir das Hinzufügen mittels der Methode CancelUpdate. Ein Autowertfeld darf allerdings auch hierbei nicht gefüllt werden.

Für unsere obige Tabelle nun ein kleines Beispiel:

Dim oRs As ADODB.Recordset
Set oRs = New ADODB.Recordset
 
oRs.Open "SELECT * FROM Kunden", oConn, adOpenDynamic, adOpenOptimistic
With oRs
  .AddNew
  !Name = "Maier"
  !Vorname = "Andreas"
  !Straße = "Musterstraße 1"
  !PLZ = "12345"
  !Telefon = "01234-56789"
  !Kontakte = 3
  .Update
 
   Msgbox "Die automatisch vergebene ID ist: " & CStr(!ID)
End With

Bearbeiten und Löschen von Datensätzen

Für das Bearbeiten und Löschen von Datensätzen gibt es nun auch wieder zwei Wege:

  • per SQL-Statement und
  • per ADO

Allerdings empfiehlt es sich in jeder Tabelle einen eindeutigen Wert zu haben (am besten als Autowert), damit nicht aus Versehen der falsche Datensatz editiert oder gelöscht wird.

Fangen wir einfach mal mit dem Bearbeiten an.

a) per SQL-Anweisung:

Hierfür verwenden wir das Schlüsselwort UPDATE gefolgt vom Tabellennamen, dem Schlüsselwort SET, allen zu ändernden Feldern in der folgenden Form [FELDNAME]='neuer Inhalt' (auch hier wird bei als Text definierten Feldern der neue Inhalt in ' gepackt) , gefolgt vom Schlüsselwort WHERE und den Einschränkungen. Als Beispiel wollen wir im Kontext mit unseren obigen Beispielen in der Tabelle Kunden dem Kunden mit der ID = 15 Straße, Plz, Ort, und Kontakte verändern, da dieser umgezogen ist....

Dim lRecords As Long
SQL = "UPDATE [Kunden] SET [Straße]='Neuer Weg 17a', [PLZ]='98745', " &  _
  "[Ort]='Musterörtchen', [Kontakte]=6 WHERE [ID]=15"
 
oConn.Execute SQL, lRecords
' lRecords enthält nun die Anzahl der betroffenen Datensätze

b) per ADO

Dim oRs As ADODB.Recordset
Set oRs = New ADODB.Recordset
 
oRs.Open "SELECT * FROM Kunden WHERE [ID]=15", oConn, adOpenDynamic, adOpenOptimistic
With oRs
  !Straße = "Neuer Weg 17a"
  !PLZ = "98745"
  !Ort = "Musterörtchen"
  !Kontakte = 6
  .Update
End With

Wichtig ist in beiden Fällen die genaue Navigation zu dem entsprechenden Datensatz. Wird bei der SQL-Anweisung der WHERE-Zweig vergessen oder ist nicht eindeutig (falls nicht doch gewünscht) werden alle Zeilen geändert. Bei Verwendung eines ADO-Recordsets, wird nur der Datensatz geändert, auf welchen das Recordset aktuell zeigt.
Ist das Recordset aber nicht eindeutig, d.h. der entsprechende Datensatz kommt bei den aktuellen Einschränkungen der Abfrage in der Datenbank mehr als einmal vor, wird ein Fehler ausgelöst, siehe auch FAQ-Beitrag  Nicht genügend Schlüsselinformationen zum Aktualisieren.

Last but not least: Das Löschen von Datensätzen.

a) per SQL -Anweisung:

Hierfür existiert das Schlüsselwort "DELETE" und dieses wird wie folgt verwendet:

DELETE FROM [Tabelle] WHERE ....

Auch hier ist es sehr sinnvoll eine eindeutige Einschränkung zu vergeben, da sonst alle Datensätze mit den gewählten Einschränkungen ohne Rückfrage gelöscht werden. Hier nun zwei kleine Beispiele:

' Löschen aller Kunden
Dim lRecords As Long
oConn.Execute "DELETE FROM [Kunden]", lRecords
MsgBox "Es wurden " & CStr(lRecords) & " Kunden gelöscht"
' Löschen des Kunden mit der ID = 15
Dim lRecords As Long
oConn.Execute "DELETE FROM [Kunden] WHERE [ID]=15", lRecords
If lRecords >= 1 Then
  MsgBox "Es wurden " & CStr(lRecords) & " Kunden gelöscht"
Else
  MsgBox "Der Kunde konnte nicht gelöscht werden, da nicht vorhanden"
End If

b) per ADO

Hierfür öffnen Sie das gewünschte Recordset, bewegen es auf die gewünschte Position und verwenden die Methode Delete. Auch hier nun wieder ein kleines Beispiel:

' Löschen des Kunden mit der ID = 15
Dim oRs As ADODB.Recordset
Set oRs = New ADODB.Recordset
 
oRs.Open "SELECT * FROM Kunden WHERE [ID]=15", oConn, adOpenDynamic, adOpenOptimistic
oRs.Delete

Abschließend gestatten Sie bitte noch einen kleinen Hinweis: Jedes geöffnete Recordset und jede Connection sollten wieder geschlossen und zerstört werden. Dies kann auf die folgende Art und Weise durchgeführt werden:

' Recordset schließen und zerstören 
oRs.Close
Set oRs = Nothing
 
' Connection schließen und zerstören
oConn.Close
Set oConn = Nothing

Nur wenn Sie alle Recordsets und Connections sauber wieder schließen und zerstören, wird der belegte Platz innerhalb der MSDE wieder freigegeben. Ansonsten ist die MSDE der Meinung es sind noch offene Connections vorhanden und stellt keine weiteren bereit. In diesem Falle hilft dann Stoppen und Starten der MSDE.

Dieser Workshop wurde bereits 43.381 mal aufgerufen.

Über diesen Workshop im Forum diskutieren
Haben Sie Fragen oder Anregungen zu diesem Workshop, können Sie gerne mit anderen darüber in unserem Forum diskutieren.

Aktuelle Diskussion anzeigen (1 Beitrag)

nach obenzurück


Anzeige

Kauftipp Unser Dauerbrenner!Diesen und auch alle anderen Workshops finden Sie auch auf unserer aktuellen vb@rchiv  Vol.6

Ein absolutes Muss - Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
- nahezu alle Tipps & Tricks und Workshops mit Beispielprojekten
- Symbol-Galerie mit mehr als 3.200 Icons im modernen Look
Weitere Infos - 4 Entwickler-Vollversionen (u.a. sevFTP für .NET), Online-Update-Funktion u.v.m.
 
   

Druckansicht Druckansicht Copyright ©2000-2017 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel