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 Laden Sie sich bei Micorsoft das MSDE Datenbank-Setup herunter. Die aktuellste Fassung findenSie hier: 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
Das war auch schon alles für die Installation. Zusätzliche Hinweise 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 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:
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:
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. 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 48.180 mal aufgerufen.
Anzeige
![]() ![]() ![]() 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. |
Neu! sevDTA 3.0 Pro ![]() SEPA mit Kontonummernprüfung Erstellen von SEPA-Dateien mit integriertem BIC-Verzeichnis und Konto- nummern-Prüfverfahren, so dass ungültige Bankdaten bereits im Vorfeld ermittelt werden können. Tipp des Monats ![]() Dieter Otter PopUp-Menü wird nicht angezeigt :-( In diesem Tipp verraten wir Ihnen, wie Sie Probleme mit PopUp-Menüs umgehen können, wenn diese unter bestimmten Umständen einfach nicht angezeigt werden. Access-Tools Vol.1 ![]() Über 400 MByte Inhalt Mehr als 250 Access-Beispiele, 25 Add-Ins und ActiveX-Komponenten, 16 VB-Projekt inkl. Source, mehr als 320 Tipps & Tricks für Access und VB |
|||||||||||||||||
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. |