Datenbank abfrage inklusive funkition

  • VB.NET

Es gibt 7 Antworten in diesem Thema. Der letzte Beitrag () ist von Papst94.

    Datenbank abfrage inklusive funkition

    hey leute

    ich habe eine datenbank (access) mit mehreren Tabellen, die verknüpft sind. des weiteren habe ich in der datenbank ein modul mit 2 Funkitionen.
    In access kann ich ja die fuktionen direkt über SQL aufrufen.
    Nun sollen die daten aber in vb angezeigt werden. dafür übergebe cih mit OleDb den SQL string an die datenbank.
    Es wird mir aber der Fehler zurückgegeben , das die angegebene funktion nicht gefunden werden kann

    Mein code ist wie folgt:

    VB.NET-Quellcode

    1. Sub sql(ByVal command As String, ByVal tabel As String, ByVal dgv As DataGridView)
    2. Try
    3. Dim conn As New OleDb.OleDbConnection()
    4. Dim cmd As New OleDb.OleDbCommand()
    5. Dim da3 As New OleDb.OleDbDataAdapter(cmd)
    6. 'Dim ds3 As New DataSet
    7. conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & MDIParent1.xml("//Settings/Verbindung/Datenbankpfad") & ";"
    8. cmd.Connection = conn
    9. cmd.CommandText = command
    10. conn.Open()
    11. da3.Fill(ds, tabel)
    12. conn.Close()
    13. dgv.DataSource = ds.Tables(tabel)
    14. dgv.Refresh()
    15. Catch ex As Exception
    16. MsgBox(ex.InnerException)
    17. End Try
    18. End Sub


    der dazugehörende SQL string Lautet wie folgt:

    SQL-Abfrage

    1. SELECT tblPersonen.perVorname, tblPersonen.perNachname, tblPersonen.perStrasse, tblPersonen.perPLZ, tblPersonen.perOrt, tblPersonen.perDatumGeburt, tblPersonen.perSchwimmer, tblPersonen.perGeschlecht, GanzeJahre([tblPersonen].[perDatumGeburt],Now()) AS [Alter], MergeField("tblKontaktdaten","konTelefon","konperIDRef =",[tblKontaktdaten].[konperIDRef],True) AS Telefonnummern, MergeField("tblKontaktdaten","konEmail","konperIDRef =",[tblKontaktdaten].[konperIDRef],True) AS [E-Mail Adressen]
    2. FROM (tblStati INNER JOIN (tblPersonen INNER JOIN (tblFreizeiten INNER JOIN tblTeilnahmen ON tblFreizeiten.frzID = tblTeilnahmen.tnmfrzsemIDRef) ON tblPersonen.perID = tblTeilnahmen.tnmperIDRef) ON tblStati.staID = tblTeilnahmen.tnmstaIDRef) INNER JOIN tblKontaktdaten ON tblPersonen.perID = tblKontaktdaten.konperIDRef
    3. GROUP BY tblPersonen.perVorname, tblPersonen.perNachname, tblFreizeiten.frzName, tblStati.staName, tblPersonen.perStrasse, tblPersonen.perPLZ, tblPersonen.perOrt, tblPersonen.perDatumGeburt, tblPersonen.perSchwimmer, tblPersonen.perGeschlecht, MergeField("tblKontaktdaten","konTelefon","konperIDRef =",[tblKontaktdaten].[konperIDRef],True), MergeField("tblKontaktdaten","konEmail","konperIDRef =",[tblKontaktdaten].[konperIDRef],True)
    4. HAVING (((tblFreizeiten.frzName)="Schlossfreizeit") AND ((tblStati.staName)="Mitarbeiter")) OR (((tblFreizeiten.frzName)="Schlossfreizeit") AND ((tblStati.staName)="Leiter"));


    logischer weise habe ich ihn so modifiziert das ich ihn in vb ein setzen kann

    Ich hoffe Ihr könnt mir bei meinem Problem helfen

    lg Papst94
    ich weiß nicht, warum deine Funktion nicht gefunden wird, und dein Sql-Monster kann ich auch nicht reparieren.

    Sieht so aus, als würden da Daten von 3 Tabellen per Sql zusammengeführt.
    Von sowas rate ich ja ab, weil es günstiger ist, die Tabellen auch im Client getrennt zu halten, und die Abhängigkeiten ggfs. über Comboboxen zu präsentieren.
    Guggemol "JoiningView" auf Movie-Tuts
    kann ich denn im quellcode vom data set eine funktion definieren, die cih dann für die abfrage verwenden kann
    wenn ja ie spreche ich die dann an?

    @erfinderDesRades:
    Von sowas rate ich ja ab, weil es günstiger ist, die Tabellen auch im
    Client getrennt zu halten, und die Abhängigkeiten ggfs. über Comboboxen
    zu präsentieren.
    meinst du damit jede Tabelle einzeln in das DataSet zu laden? oder wie?
    wenn ja wie kann ich dann darauf eine abfrage aufbauen? da wenn ich eine query in dem dataset hinzufüge ist das ja nichts anderes als ich gemacht habe oder?
    Das wichtigste für mich ist das das dynamisch über den Code geht und nicht nur über den designer


    danke für die hilfe

    grüße papst94

    Papst94 schrieb:

    kann ich denn im quellcode vom data set eine funktion definieren, die cih dann für die abfrage verwenden kann
    wenn ja ie spreche ich die dann an?

    eigentlich kann man in einem Dataset keine Abfrage definieren, dann Dataset ist Dataset, für Abfragen sind DataAdapter zuständig.
    In DBExtensions habe ich aber ein paar Extension-Methods gebastelt, die einem typisierten Dataset einen sehr leistungsfähigen Abfrage-Generator anfügen.
    also die eckige klammer bezeichnet das feld
    die runden gehören zu funktion

    wenn du zweite schlieende klammer meinst, schließt die die funktion ganze jahre

    , GanzeJahre([tblPersonen].[perDatumGeburt],Now()) AS [Alter],
    Ganze jahre ist eine funktion in vba (selbstgeschrieben) die das alter aus dem geburtstag errechnet

    wiegesagt in access funktioniert die abfrage wunderbar un d zeigt alles richtig an

    nur wenn ich die abfrage von dem vb.net programm die anfrage über oledb an die datenbank schicke sagt er er kenne die funktion nicht

    ich vermute mal , das das daran liegt dass er dann keinen zugriff auf die in der datenbank enthaltenden Module hat

    grüße

    Papst

    ps im anhang findet ihr die datenbank mit den funktionen und abfragen

    pps an alle Datensachützer das sind natürlich keine echtendaten
    Dateien
    • bspdatabase.mdb

      (880,64 kB, 157 mal heruntergeladen, zuletzt: )

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Papst94“ ()