+1 800 256 3608 (toll-free in North America) or +49 7531 90 60 10| service@combit.com

Zugriff auf Access Views im Designer


(Carsten Ilwig) #1

Hallo alle zusammen,

gibt es eine Möglichkeit auch auf Views (Abfragen) in Access-Datenbanken zuzugreifen?
Wenn ich die OleDBConnection für eine Access-DB an den Designer übergebe, werden mir dann nur die Tabellen angezeigt und keine Views.
Ein Zugriff auch auf Views wäre aber sehr hilfreich.

Vielen Dank für Eure Antworten.
Carsten Ilwig


(combit Support - Christian Rauchfuß) #2

Hallo Herr Ilwig,

vielen Dank für Ihren Beitrag.

Ein Zugriff auf Access Abfragen ist nicht möglich. Es können ausschließlich Tabellen angemeldet werden.

Mit freundlichen Grüßen

Christian Rauchfuß
Technischer Support
combit GmbH


(Carsten Ilwig) #3

Hallo Herr Rauchfuß,

vielen Dank für die Rückmeldung.

Ich vermute mal, dass mit der Unterstützung für Access-Views auch in einer zukünftigen LL-Version wohl nicht zu rechnen ist, oder?
Das schränkt die Verwendung von LL in größeren Access-MDBs allerdings erhelblich ein,
oder gibt es aktuelle eine Möglichkeit auch eine Auswahl aus den in der DB enthaltenen Access-Tabellen zu übergeben?
Ich habe bisher nur die Möglichekit gefunden entweder eine, oder alle zu übergeben.

Mit freundlichen Grüßen
Carsten Ilwig


(combit Support - Christian Rauchfuß) #4

Hallo Herr Ilwig,

vielen Dank für Ihren Beitrag.

Leider handelt es sich bei meiner letzten Aussage um eine Fehlinformation. Dies möchte ich hiermit gerne richtig stellen.

Damit die Views aus der Access-Datenbank verwendet können, muss die Property SupportedElementTypes des OleDbConnectionDataProviders gesetzt werden:

[code]
OleDbConnection conn = new OleDbConnection(“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Program Files (x86)\combit\LL20\Programmierbare Beispiele und Deklarationen\NWIND.MDB”);
OleDbConnectionDataProvider provider = new OleDbConnectionDataProvider(conn);
try
{

	provider.SupportedElementTypes = DbConnectionElementTypes.View | DbConnectionElementTypes.Table;
        LL.DataSource = provider;
        LL.Design();
    }
catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }[/code]

Mit freundlichen Grüßen

Christian Rauchfuß
Technischer Support
combit GmbH


(Carsten Ilwig) #5

Hallo Herr Rauchfuß,

das sind ja tolle Nachrichten zum Wochenanfang.
Ich habe es auch gleich getestet und es hat funktioniert!

Die Einschränkung, dass entweder nur ein Element (Tabelle/View) aus der Access.MDB, oder alle an den Report übergeben werden können, bleibt aber weiterhin bestehten, oder gibt es da auch einen ‘Trick’, um eine Auswahl Access-Objecte zu übergeben?

Ich verwende derzeit folgenden Aufruf:
_printPreviewForm.SetDataSource(oleDBConnectionProvider, accessObjectName);

Der Wert von ‘accessObjectName’ ist entweder leer, dann werden alle Views/Tabellen an den Report übergeben,
oder er enthält genau einen Namen einer Tabelle/View.

Damit ist eine Übergabe mehrere Objectnamen leider nicht möglich.

Vielen Dank für Ihre Antwort.
Carsten Ilwig


(combit Support - Christian Rauchfuß) #6

Hallo Herr Ilwig,

vielen Dank für Ihren Beitrag.

Der Provider verfügt über einen DefineTable-Event. Hierüber können einzelne Views/Tables unterdrückt werden. Andersrum können natürlich auch alle die Views/Tabelle durchgelassen werden, die gewünscht sind.

private void button1_Click(object sender, EventArgs e)
{
    OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Program Files (x86)\\combit\\LL20\\Programmierbare Beispiele und Deklarationen\\NWIND.MDB");
    OleDbConnectionDataProvider provider = new OleDbConnectionDataProvider(conn);
        try
        {
			provider.SupportedElementTypes = DbConnectionElementTypes.View | DbConnectionElementTypes.Table;
            //DefineTable-Event 
            provider.DefineTable += provider_DefineTable;              
            LL.DataSource = provider;
            LL.Design();
        }
        catch (Exception ex)
        {
            MessageBox.Show(ex.Message);
        }
}

void provider_DefineTable(object sender, AddTableEventArgs e)
{
    if (e.TableName.StartsWith ("A"))
        e.Suppress = true ;          
}

Mit freundlichen Grüßen

Christian Rauchfuß
Technischer Support
combit GmbH


(Carsten Ilwig) #7

Hallo Herr Rauchfuß,

vielen Dank für die hilfreiche Antwort.
Es hat einwandfrei funktioniert.

Ich bin immer wieder erstaunt, was so nach und nach alles für nützliche Funktionen aus den Tiefen von LL auftauchen.
Ich bin schon gespannt, was sich mir in Zukunft noch so alles erschließen wird.

Mit freundlichen Grüßen
Carsten Ilwig