| |
VB & DatenbankenBeziehung (ADO) erstellen | | | Autor: NoProfi | Datum: 01.10.06 14:30 |
| Hallo Experten für Datenbanken...
Ich habe folgendes Problem.
Ich habe ein kleines Verwaltungsprogramm geschrieben mit einer Anbindung an eine Access-Datenbank das bisher super funzt.
Um die Daten zu verwalten nutze ich ADO 2.8, DAO 3.6 und ADOX 2.8, die Datenbank ist Access 2000.
Nun zu meinen Problem:
Ich möchte, da dieses Programm auch in Australien mehreremal eingesetzt wird, die Datenbank um mehrere Tabellen erweitern
und eine Beziehung zur Haupttabelle per VB6 erstellen. Das mit den Fields einfügen in der Haupttabelle und das erstellen
der neuen Tabelle klappt vorzüglich NUR die Beziehung 1:N von der neuen Tabelle zur Haupttabelle erstellen will einfach
nicht klappen.
Wie kann ich ich denn in der Haupttabelle ein Indiez (Duplikate möglich) und in den neuen Tabellen ein Indiez (Ohne Duplikate)
unter VB6 anlegen ??? In Access ist mir das klar, nur ich möchte nicht deswegen nach Australien fliegen um dort die
Datenbanken zu erweitern. Auch kann ich nicht die Anwender dazu beauftragen die Datenbank persöhnlich zu erweitern
da viele Newbies darunter sind und die Datenbanken schon eine beachtliche Anzahl an Einträgen haben wodurch eine
neue Datenbank mit den neuen Tabellen auch nicht in Frage kommt.
So sollte die Beziehung aussehen:
Hier einige Auszüge aus dem Code:
Hinweis: Das "Jet OLEDB: Database" im Code ist natürlich OHNE Space !! sonst bekomme ich
Option Explicit
' Alle öffentlichen Variablen
Public oConn As ADODB.Connection
Public DB_Path As String
Public DB_Name As String
Public DB_PW As String
Public RetVal As String
Public DB_Open As Boolean
' Bestehende Datenbank öffnen
Public Sub DB_Oeffnen()
Dim sConn As String
Set oConn = New ADODB.Connection
With oConn
.Provider = "Microsoft.Jet.OLEDB.4.0"
.Properties("Data Source") = DB_Name
.Properties("Persist Security Info") = False
' Falls die Datenbank durch ein Passwort geschützt ist...
.Properties("Jet OLEDB: Database Password") = DB_PW
End With
' Falls die Datenbank durch ein Passwort geschützt ist...
sConn = sConn & "Jet OLEDB: Database Password=" & DB_PW & ";"
oConn.Open sConn
DB_Open = True
End Sub
' Neues Field in Haupttabelle einfügen
Public Sub TabellenField_zufügen(sTable As String, _
sFieldName As String, sSize As Integer)
If DB_Open Then
If Not dbFieldExists(sTable, sFieldName, oConn) Then
oConn.Close
FieldErzeugen sTable, sFieldName, sSize
Else
Exit Sub
End If
Else
DB_Oeffnen
If Not dbFieldExists(sTable, sFieldName, oConn) Then
oConn.Close
FieldErzeugen sTable, sFieldName, sSize
End If
End If
End Sub
' Tabellenfeld nachträglich hinzufügen
Private Sub FieldErzeugen(sTable As String, sField As String, _
sSize As Integer)
Dim Db As Database
Dim Feld As New DAO.Field
' Datenbank exklusiv öffnen
Set Db = DBEngine.OpenDatabase(DB_Name, True, False, _
";pwd=" & DB_PW)
' DatenField in Haupttabelle einfügen
With Db.TableDefs(sTable).Fields
' Feld "Ausgeliehen und Bestellt" definieren
Feld.Name = sField
Feld.Type = dbText
Feld.Size = sSize
Feld.AllowZeroLength = True
' Jetzt sollte der Indiez (Mit Duplicate) gesetzt werden
' und dafür habe ich keine Vorstellung wie das geht !!!!!!
' Feld hinzufügen
.Append Feld
Set Feld = Nothing
End With
' Datenbank schliessen und zerstören
Db.Close
Set Db = Nothing
' Datenbank zur Bearbeitung wieder öffnen
DB_Oeffnen
End Sub Bis hierher klappt alles vom feinsten, nur mit der Erstellung einer Beziehung will es einfach nicht klappen.
Ich hoffe das ich mich so ausgedrückt habe das Ihr es versteht was mein Belangen ist und einer von Euch mir einen
Hinweis, oder vieleicht ein kleines Beispiel geben kann.
Mit den allesbesten Grüßen
Jürgen | |
Re: Beziehung (ADO) erstellen | | | Autor: wincnc | Datum: 01.10.06 15:23 |
| Hallo, versuch´s mal so. Ich habe es nicht getestet.
Private Sub FieldErzeugen(sTable As String, sField As String, _
sSize As Integer)
Dim Db As Database
Dim Feld As DAO.Field
Dim Idx As Index
Dim Def As TableDef
' Datenbank exklusiv öffnen
Set Db = DBEngine.OpenDatabase(DB_Name, True, False, _
";pwd=" & DB_PW)
Set Def = Db.CreateTableDef(sTable)
' Feld "Ausgeliehen und Bestellt" definieren
Set Feld = New DAO.Field
Feld.Name = sField
Feld.Type = dbText
Feld.Size = sSize
Feld.AllowZeroLength = True
Def.Fields.Append Feld
Set Feld = Nothing
' Index erstellen
Set Idx = New Index
Idx.Name = sField ' kann auch ein anderer Name sein
Idx.Fields = sField
Idx.Primary = False ' primärer Index - nein
Idx.Unique = False ' eindeutig - nein
Def.Indexes.Append Idx
' Datenbank schliessen und zerstören
Db.Close
Set Db = Nothing
' Datenbank zur Bearbeitung wieder öffnen
DB_Oeffnen
End Sub | |
Re: Beziehung (ADO) erstellen | | | Autor: NoProfi | Datum: 01.10.06 16:11 |
| Hallo wincnc...
Danke für das Beispiel, aber klappt leider nicht.
Der Index wird ja gesetzt und ich möchte das es Indiziert wird.
Entweder Indiziert MIT Duplikate oder Indiziert OHNE Duplikate.
MfG
Jürgen | |
Re: Beziehung (ADO) erstellen | | | Autor: wincnc | Datum: 01.10.06 16:59 |
| Hab´s mal gestestet, so funktionierts.
Private Sub FieldErzeugen(sTable As String, sField As String, _
sSize As Integer)
Dim Db As Database
Dim Feld As DAO.Field
Dim Idx As Index
Dim Def As TableDef
' Datenbank exklusiv öffnen
Set Db = DBEngine.OpenDatabase(DB_Name, True, False, _
";pwd=" & DB_PW)
Set Def = Db.CreateTableDef(sTable)
' Feld definieren
Set Feld = New DAO.Field
Feld.Name = sField
Feld.Type = dbText
Feld.Size = sSize
Feld.AllowZeroLength = True
Db.TableDefs(sTable).Fields.Append Feld
Set Feld = Nothing
' Index erstellen
Set Idx = New Index
Idx.Name = sField ' kann auch ein anderer Name sein
Idx.Fields = sField
Idx.Primary = False ' primärer Index - nein
Idx.Unique = False ' Duplikate - nein
Db.TableDefs(sTable).Indexes.Append Idx
Set Idx = Nothing
' Datenbank schliessen und zerstören
Db.Close
Set Db = Nothing
' Datenbank zur Bearbeitung wieder öffnen
DB_Oeffnen
End Sub | |
Re: Beziehung (ADO) erstellen | | | Autor: NoProfi | Datum: 01.10.06 20:19 |
| Hallo wincnc
Nun klappt es.
Ich bedanke mich für Deine schnelle unkomplizierte Hilfe
Noch nen schönen Sonntagabend
MfG
Jürgen
LG
Plumber44 | |
| 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 |
|
|
vb@rchiv CD Vol.6 vb@rchiv Vol.6
Geballtes Wissen aus mehr als 8 Jahren vb@rchiv!
Online-Update-Funktion Entwickler-Vollversionen u.v.m.Jetzt zugreifen Tipp des Monats sevWizard für VB5/6
Professionelle Assistenten im Handumdrehen
Erstellen Sie eigene Assistenten (Wizards) im Look & Feel von Windows 2000/XP - mit allem Komfort und zwar in Windeseile :-) Weitere Infos
|
|
|
Copyright ©2000-2024 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
|
|