| |
VB & DatenbankenVB + Access: Beziehungen setzen | | | Autor: Darth | Datum: 06.11.04 14:22 |
| Moin,
ich sitze hier an einem Projekt wo ich mittels VB6 auf eine Access-DB zugreifen will, basierend auf dem sehr guten Workshop
Ich habe es auch schon geschafft das mir eine Access-DB erstellt wird mit allen Tabellen und Dateneigenschaften, nur etwas fehlt mir: Die Beziehungen
Wie schaffe ich es, beim Erstellen der DB durch VB, die Beziehungen zu schaffen und zu bestimmen, ob diese Beziehung(en) referentielle Integrität haben?
Oder ist dies garnicht notwendig wenn ich die Daten via VB nachher bearbeite, was ich mir im Moment eigendlich nicht vorstellen kann :/
Michael | |
Re: VB + Access: Beziehungen setzen | | | Autor: Darth | Datum: 09.11.04 15:16 |
| Hat denn niemand mit so etwas bisher gearbeitet
Falls ich mich schlecht ausgedrückt habe oben, hier nochmal mein Anliegen:
Ich erstelle im Moment via Knopfdruck im VB6 eine neue Access-Datenbank und lege ebenso die Tabellen samt Feldern an und bestimme die Datentypen und die Primärschlüssel.
Da ich aber auch Fremdschlüssel verwende, und ich gerne die Beziehungen zwischen den Tabellen hätte um diese nutzen zu können, muss ich eben jene Beziehungen erst einmal setzen.
Das wären im Access direkt die Linien zwischen den Tabellen in der entsprechenden Ansicht. | |
Re: VB + Access: Beziehungen setzen | | | Autor: TommyK | Datum: 09.11.04 16:15 |
| Hallo Michael,
hab auf meiner HP nur ein Access-Bsp wie es mittels VBA geht.
Aber vielleicht ist es eine Anregung für Dich:
Info und Download: Anzeigen, Erstellen und Löschen von Tabellenrelationen in externen DB's
http://www.access-beispiele.tommyk-webbox.de/bsp_sys.php#sys_rel
Gru? TommyK | |
Re: VB + Access: Beziehungen setzen | | | Autor: Darth | Datum: 09.11.04 18:51 |
| Danke TommyK,
zusammen aus einer Google-Seite und Deiner Datei konnte ich dann doch endlich noch die Beziehungen erstellen.
Jedoch wenn ich einen Errorhandler einbaue, und meine DB erfolgreich angelegt wird/wurde, bekomme ich einen Fehler 0.
Ich gehe mal davon aus das dies lediglich bedeutet das es keinen Fehler gibt/gab, denn der errorhandler prüft auf eine bestimmte Fehlernummer und ansonsten gibt Er eine Meldung aus die die Fehlernummer beinhaltet... was hier 0 ist.
Aber hier der Code mit dem ich meine Tabellen und die Indexes samt Beziehungen setze.Private Sub dbcreat_Click()
Dim Db As Database
Dim dbFile As String
Dim tdfNew1 As TableDef
Dim tdfNew2 As TableDef
Dim tdfNew3 As TableDef
Dim idxNew As New Index
Dim relNew As Relation
On Error GoTo err_Handler
'Datenbank öffnen und Tabellen erstellen
dbFile = App.Path + "\db_musikcds.mdb"
Set Db = Workspaces(0).CreateDatabase(dbFile, dbLangGeneral)
Set tdfNew1 = Db.CreateTableDef("tbl_bands")
With tdfNew1
.Fields.Append .CreateField("band_id", dbLong)
.Fields(0).Attributes = dbAutoIncrField
.Fields.Append .CreateField("band_name", dbText, 255)
Set idxNew = .CreateIndex("band_PS")
idxNew.Fields.Append idxNew.CreateField("band_id")
idxNew.Primary = True
.Indexes.Append idxNew
Set idxNew = Nothing
Set idxNew = .CreateIndex("band_NAME")
idxNew.Fields.Append idxNew.CreateField("band_name")
.Indexes.Append idxNew
Set idxNew = Nothing
End With
Db.TableDefs.Append tdfNew1
Set tdfNew2 = Db.CreateTableDef("tbl_albums")
With tdfNew2
.Fields.Append .CreateField("cd_id", dbLong)
.Fields.Append .CreateField("band_id", dbLong)
.Fields.Append .CreateField("num_tracks", dbByte)
.Fields.Append .CreateField("album_title", dbText, 255)
Set idxNew = .CreateIndex("cd_PS")
idxNew.Fields.Append idxNew.CreateField("cd_id")
idxNew.Primary = True
.Indexes.Append idxNew
Set idxNew = Nothing
Set idxNew = .CreateIndex("band_FS")
idxNew.Fields.Append idxNew.CreateField("band_id")
idxNew.Primary = False
.Indexes.Append idxNew
Set idxNew = Nothing
End With
Db.TableDefs.Append tdfNew2
Set tdfNew3 = Db.CreateTableDef("tbl_tracks")
With tdfNew3
.Fields.Append .CreateField("cd_id", dbLong)
.Fields.Append .CreateField("track_nr", dbByte)
.Fields.Append .CreateField("track_title", dbText, 255)
.Fields(2).AllowZeroLength = True
.Fields.Append .CreateField("lenght", dbLong)
Set idxNew = .CreateIndex("cd_FS")
idxNew.Fields.Append idxNew.CreateField("cd_id")
idxNew.Primary = False
.Indexes.Append idxNew
Set idxNew = Nothing
End With
Db.TableDefs.Append tdfNew3
'Beziehung Band -> Album erstellen
Set relNew = Db.CreateRelation( _
"band_ID", tdfNew1.Name, tdfNew2.Name, _
dbRelationUpdateCascade + dbRelationDeleteCascade)
relNew.Fields.Append relNew.CreateField("band_id")
relNew.Fields!band_id.ForeignName = "band_id"
Db.Relations.Append relNew
Set relNew = Nothing
'Beziehung Album -> Tracks erstellen
Set relNew = Db.CreateRelation( _
"cd_ID", tdfNew2.Name, tdfNew3.Name, _
dbRelationUpdateCascade + dbRelationDeleteCascade)
relNew.Fields.Append relNew.CreateField("cd_id")
relNew.Fields!cd_id.ForeignName = "cd_id"
Db.Relations.Append relNew
Set relNew = Nothing
Db.Close
'Fehlermeldungen bei der Datenbankerstellung
err_Handler:
Select Case Err.Number
Case 3204
MsgBox "Die Datenbank ist bereits vorhanden!", vbExclamation, "Fehler"
Case 0
MsgBox "Datenbank erfolgreich angelegt!", vbExclamation, "Erstellen" & _
"erfolgreich"
Case Else
MsgBox "Es ist der Fehler:" & Str$(Err.Number) & vbCrLf & """" & _
Err.Description & """ aufgetreten.", vbCritical, "Fehler"
End Select
End Sub | |
Re: VB + Access: Beziehungen setzen | | | Autor: spike24 | Datum: 10.11.04 10:43 |
| for der zeile
err_Handler
würde ich
MsgBox "Datenbank erfolgreich angelgt!"
Exit Sub
einbauen
wenn er einen fehler wirft geht er dort hin
wenn er keinen fehler wirft braucht er da nicht rein
anderer seits
brauchst du in der datenbank keine beziehungen, da Du die beziehungen in deinem programm hast (logik)
und mich haben die beziehungen in der datenbank immer gestört 0 | |
Re: VB + Access: Beziehungen setzen | | | Autor: Darth | Datum: 11.11.04 21:07 |
| Moin,
also nach Rücksprache mit meiner Dozentin brauche ich keine Beziehungen wenn ich VB + Access als Projekt abliegere....
Schmeiss ich die halt wieder raus *g*
Aber gut zu wissen wie es geht ist es alle male
Michael | |
Re: VB + Access: Beziehungen setzen | | | Autor: Sophus | Datum: 29.04.14 19:01 |
| Dieses Thema interessiert mich auch sehr brennend. Ich bin dabei meine Datenbankstruktur grundlegend zu bearbeiten und umfangreicher zu gestalten. Dies führte dann dazu, dass ich dann recht viele Tabellen angelegt habe, um somit effizeinte Abfrage stellen zu können. Ist es wirklich unnötig Beziehungen mit VB zu erstellen? Ich handhabe es auch so, dass die Datenbank per VB6 erstellt wird. Wenn ich es also richtig verstanden habe, dienen Beziehungen in der Datenbank Access nur für jene die Formulare in Access erstellen bzw. mit VBA arbeiten? Für VB6 ist es eher unnötig? Warum? Ich dachte immer, dass allgemein Beziehungen die Abfragen erleichtern. Darüber hinaus, wenn ich einen Datensazu lösche, dass die dazugehörigen Fremdschlüssel automatisch mitgelöscht werden etc. | |
Re: VB + Access: Beziehungen setzen | | | Autor: Franki | Datum: 29.04.14 23:59 |
| Hallo,
huch, ein Thread der 10 Jahre alt ist wird wieder aktuell, aber warum nicht?
Also ich sage mal so, die Frage ob Beziehungen notwendig sind oder nicht ist nicht die wichtigste Frage. Viel wichtiger ist die Datenbankstruktur an sich, also welche Tabellen mit welchem Inhalt(Feldern) und noch wichtiger welche SQL Abfragen notwendig sind.
Gleiches gilt für die Normalisierung, die ist für sich gesehen auch gut und sinnvoll, aber manchmal auch bremsend bei der Ausführung von Code.
Für dein Projekt würde ich sagen, du kannst auf Beziehungen in der DB verzichten. Aber du kannst das ja ganz einfach selbst testen:
Erstelle dir eine kleine Testanwendung mit einer TestDB die du über eine Schleife mit sagen wir 100.000 Testdaten füllst. Dann testest du die Abfrage mit und ohne Beziehungen in der DB.
Auf heutigen Rechnern macht das keinen Unterschied mehr, anders würde das aussehen wenn du die DB auf auf einem Server hast und der User eine langsame Internetverbindung hat.
Gruß
Frank
| |
Re: VB + Access: Beziehungen setzen | | | Autor: Sophus | Datum: 30.04.14 17:56 |
| Hallo Franki
Das dieser Beitrag tatsächlich 10 Jahre alt ist, habe ich gar nicht bemerkt. Die Sache ist einfach die, dass ich allein für Filme schon an die 30 tabellen besitze - eben weil ich so konkret und genauestens normalisiere und strukturiere. Und das "Thema" Filme ist immer noch nicht vom Tisch, da noch einige Tabellen hinzukommen. Und in Anbetracht dieser Tatsache fragte ich mich, wie ich dieses (für mich erscheindene) Monstrum im Code-Teil bewerkstellige. Das Erstellen der Datenbank und die Tabellen sowie Felder ist nicht das Problem, nur die Beziehungen machte mir etwas Sorgen. Mir ging es viel mehr um die m:n Beziehungen. Also war ich auf der Suche nach Beispielen, und landete hier #Aber wenn ich die Beziehungen fallen lassen kann, um so besser für mich
Beste Grüße
Sophus | |
| Sie sind nicht angemeldet! Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.
Einloggen | Neu registrieren |
|
|
sevISDN 1.0
Überwachung aller eingehender Anrufe!
Die DLL erkennt alle über die CAPI-Schnittstelle eingehenden Anrufe und teilt Ihnen sogar mit, aus welchem Ortsbereich der Anruf stammt. Weitere Highlights: Online-Rufident, Erkennung der Anrufbehandlung u.v.m. Weitere InfosTipp des Monats sevOutBar 4.0
Vertikale Menüleisten á la Outlook
Erstellen von Outlook ähnlichen Benutzer- interfaces - mit beliebig vielen Gruppen und Symboleinträgen. Moderner OfficeXP-Style mit Farbverläufen, Balloon-Tips, u.v.m. Weitere Infos
|