Datenbank öffnen, aber wie?

Fleance

Grünschnabel
Hallo.

Ich möchte eine Access-Datenbank einlesen und zwar mittels eines commonDialog-Objektes. Außerdem soll ein Adodc-Objekt der Datenbank zugewiesen werden welches ich dann wiederum mit einem DataGrid verknüpfen will.

Das Ganze hat den Sinn das der Benutzer dis Datenbank einliest und dann im DataGrid editiert. Danach soll er die Datenbank wieder über einen commonDialog abspeichern können.

Mein Problem ist nun das ich die Verknüpfung der Datenbank mittels Programmcode nicht hinbekomme. Hoffe es findet sich jemand der mir helfen kann.

Danke im Voraus
Fleance
 
Hallo, hier ist ein Beispielcode.

Datenbank, Tabelle öffnen und in einem Datagrid anzeigen.
Änderungen im Datagrid werden sofort in der Tabelle gespeichert.
Das ganze geht ohne ADODC Steuerelement.

! Verweis auf Microsoft ActiveX Data Objects 2.x Library nicht vergessen !

Code:
Private DB As ADODB.Connection
Private RS As ADODB.Recordset

Private Sub Form_Load()
Set DB = New ADODB.Connection

DB.CursorLocation = adUseClient
DB.Provider = "Microsoft.Jet.OLEDB.4.0"
DB.Open "d:\db1.mdb"

Set RS = New ADODB.Recordset

RS.Open "SELECT * FROM Tabelle1 ", DB, adOpenDynamic, adLockOptimistic

Set DataGrid1.DataSource = RS

End Sub
 
Hallo schon wieder.

Hab schon das nächste Problem: Ich will eine neue Tabelle hinzufügen und weiß schon wieder net wie.

Mein code:

Code:
Private Sub mnuÖffnen_Click()
    
    CommonDialog1.Filter = "Datenbanken  (*.MDB*)|*.MDB*"
    CommonDialog1.ShowOpen
    
    Set DB = New ADODB.Connection

    DB.CursorLocation = adUseClient
    DB.Provider = "Microsoft.Jet.OLEDB.4.0"
    DB.Open CommonDialog1.FileName

    Set RS = New ADODB.Recordset
    
    a$ = "Tabelle1" 'wird später erst genauer definiert
    
    RS.Open "SELECT * FROM " & a$, DB, adOpenDynamic, adLockOptimistic

    Set DataGrid1.DataSource = RS
    
End Sub

und dann noch der commandButton mit dem ich die Tabelle hinzufügen will

Code:
Private Sub Command1_Click()
    Dim TabDef As New TableDef
    Dim Feld As New Field

    TabDef.Name = "Adressen"

    'Datenfeld #1
    Feld.Name = "AdressNr"
    Feld.Type = dbLong
    Feld.Attributes = dbAutoIncrField
    TabDef.Fields.Append Feld
    Set Feld = Nothing

    'Datenfeld #2
    Feld.Name = "Anrede"
    Feld.Type = dbText
    Feld.Size = 20
    Feld.AllowZeroLength = True
    TabDef.Fields.Append Feld
    Set Feld = Nothing

    Db.TableDefs.Append TabDef
    Db.Close

    Set TabDef = Nothing
    Set Db = Nothing
End Sub

Hoffe ich finde wieder jemanden der mir hilft.

Danke im Voraus
Fleance
 
Code:
Private Sub mnuÖffnen_Click()
Dim strTabelle As String    

    CommonDialog1.Filter = "Datenbanken  (*.MDB*)|*.MDB*"
    CommonDialog1.ShowOpen
    
    Set DB = New ADODB.Connection

    DB.CursorLocation = adUseClient
    DB.Provider = "Microsoft.Jet.OLEDB.4.0"
    DB.Open CommonDialog1.FileName

    Set RS = New ADODB.Recordset
    
    strTabelle = "Tabelle1" 'wird später erst genauer definiert
    
    RS.Open "SELECT * FROM '" & strTabelle & "'", DB, adOpenDynamic, adLockOptimistic

    Set DataGrid1.DataSource = RS
    
End Sub
 
Hallo wincnc

Zuerst mal Danke. Aber leider:
Wenn ich zwei Tabellen habe und eine von beiden auswählen will brauch ich nur der Variablen a$ einen neuen Namen zuweisen. Das funktioniert schon.
Mein Problem ist aber das ich eine neue Tabelle mit dem commandButton1_click Ereignis hinzufügen will.
Habe versucht das über den Code der weiter oben steht (im commandButton1_click Ereignis) zu lösen. Bekomme aber immer wieder die Fehlermeldung:

Laufzeitfehler '3001':
Die Argumente sind vom falschen Typ, liegen außerhalb des Gültigkeitsbereiches oder sind miteinander unvereinbar.

Mir hilft diese Fehlermeldung nicht wirklich weiter. Vielleicht kann mir ja jemand helfen.

Danke im Voraus
Fleance
 
Ach so.
Code:
Private Sub Command1_Click()
Dim strSQL As String

strSQL = "CREATE TABLE Adressen (AdressNr COUNTER NOT NULL " & _
                 "CONSTRAINT AdressNr  PRIMARY KEY, " & _
                 "Anrede VARCHAR(20) NULL, " & _
                 "Vorname VARCHAR(20) NULL )"

DB.Execute strSQL

End Sub
 
Hallo.

Wieder mal Danke.

Versuche gerade den Tabellennamen mit einer Variablen zu übergeben, da der Benutzer dann ja den Namen der Tabelle vor dem Erstellen definieren können soll. Habe jetzt nur kurz probiert und hat wie erwartet nicht so richtig funktioniert. :suspekt:

Und dann ist noch eine Frage aufgetaucht:
Angenommen ich habe 3 Häuser mit verschiedenen Fenstern und will zuerst die Datenbank öffnen und im DataGrid soll es mir die Namen der drei Häuser anzeigen. Wenn ich dann auf den Namen eines der Häuser doppelklicke soll ein neues Datagrid erscheinen und die verschiedenen Fenster des Hauses sollen in diesem Datagrid angezeigt werden.
(Sorry das Beispiel is ein wenig blöd aber mir is nix besseres in der Früh eingefallen :) )

Is sowas grundsätzlich möglich? Mein Problem sind immer diese Datenbanken und die Verknüpfungen da ich vorher nie etwas damit zu tun hatte.

Danke für Antworten.
Fleance
 
Ja, sowas ist ganz "locker" möglich ;)

Zum Beispiel, ladest du dir deine 3 Häuser in eine Listbox. Beim DoubleClick event der Listbox, fragts per SQL-Satz die Id, des selected Hauses ab, öffnest dir eine neue Form oder was du willst, und übergibst die ermittelten Werte and die Neue Form. Wer aus Text nicht schlauwird:

ID:NAME:FENSTER

In der ListBoc steht nun:

Invisible: 12(ID) Visible: HochHaus(NAME)

Beim dblClick:
selectedID = listBox1Item1(ID)

sql="Select Fenster FROM HausDb WHERE ID = selectedID",

Und nun hasst du deine Fenster ermittelt und kannst sie locker schlocker Anzeigen ;)

PS: Das ist kein funktionierender Code, er soll dir nur den Ansatz geben, damit du auch etwas lernst, beim selber Tüfteln :)

mfg
ziop
 
Danke.

Aber funktioniert das auch wenn ich eine Datenbank habe die so aufgebaut ist das die Häuser die Tabellen darstellen und die Fenster die verschiedenen Datensätze in der Tabelle?

Dann habe ich ja keine eindeutige ID mit der ich den Fenstertyp dem Haus zuweisen kann?
Wenn ich aber meine verschiedenen Tabellen einer ListBox zuweisen könnte und die mir dann die entsprechende Tabelle aufmacht...Hmm, werds mal so probieren.

Bin aber weiterhin offen für jede Hilfe!
Werd euch dann noch alle namentlich in meinem Programm erwähnen :)

Thx
Fleance
 
Zurück