Access Abfragen via VB ausführen!

  • VB.NET

Es gibt 10 Antworten in diesem Thema. Der letzte Beitrag () ist von raist10.

    Access Abfragen via VB ausführen!

    Hallo!

    Ich habe ein Problem mit einer Access Abfrage die ich in VB aufrufe und aus Performance Gründen in der DB ausführen möchte.

    Diese Abfrage ist eine Tabellen Erstellungsabfrage mit dem Namen "tab_adr_erst" und liegt in der Access Datenbank.
    Wenn ich diese in Access ausführe "Doppelklicke" funktioniert diese Wunderbar.
    Über VB erstellt mir diese zwar die Tabelle doch ohne Daten

    Ich rufe diese Abfrage mit folgenden Code auf:


    VB.NET-Quellcode

    1. Dim sqcmd0 As New OleDbCommand
    2. sqcmd0.Connection = Menue.conn1
    3. sqcmd0.CommandType = CommandType.StoredProcedure
    4. sqcmd0.CommandText = "[tab_adr_erst]"
    5. Menue.conn1.open
    6. sqcmd0.ExecuteNonQuery()
    7. Menue.conn1.close


    Kann mir jemand sagen was ich Falsch mache? ?(
    @ Wega

    Wenn Du direkt auf Access zugreifen willst, dann wäre es vielleicht besser mit dem DAO-Object-Modell zu arbeiten. Da wird alles was Du tust direkt in der Acces-DB ausgeführt.

    Einfach über Verweise den Verweis "dao" einfügen und Du hast das komplette Access-DAO-Modell in VB.NET zur Verfügung. Allerdings habe ich mal irgendwo gelesen das das nicht so sonderlich perfomant ist. Aber probiere es mal aus.

    Zu Deinem Problem:

    Versuche es mal so:

    VB.NET-Quellcode

    1. Dim sqcmd0 As New OleDbCommand
    2. Menue.conn1.open
    3. sqcmd0.Connection = Menue.conn1
    4. sqcmd0.CommandType = CommandType.StoredProcedure
    5. sqcmd0.CommandText = "[tab_adr_erst]"
    6. sqcmd0.ExecuteNonQuery()
    7. Menue.conn1.close


    Also zuerstg die DB-Connection öffnen bevor Du sie dem Command-Object als Verbindung zuweisst.

    Gruß

    Rainer
    Vieln Dank für Hilfen!

    Ich habs jetzt mal mit ADO probiert, aber es passiert genau das selbe, die Abfrage wird zwar Grundsätlich ausgeführt aber die Tabelle bleibt leider leer.
    Beispiel von raist10 habe ich ausprobiert, liefert leider auch das selbe Ergebniss.

    Die Tabellen Erstellung wird durchgeführt aber die Daten werden nicht eingfügt.
    Habe mir eine Test Tab in der DB angelegt und füge da mit eine Testabfrage Daten ein, das funktioniert mit beiden Connections
    Kann es sein das dass auf irgend eine Weise unterdrückt od. unterbunden wird?

    Hier aber mein Beispiel mit ADO:

    VB.NET-Quellcode

    1. Dim ConnA As New ADODB.Connection
    2. ConnA.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" & Menue.DB1 & ";"
    3. ConnA.Open()
    4. ConnA.Execute("exec tab_adr_erst")
    5. ConnA.Close()
    Die Tabellen Erstellungs Abfrage prüft 2 Tabellen auf Inkonsistenz und generiert mir aus der Differenz eine neue Tab Namens " tab_adr".
    Die in gespeicherte Abfrage heist "tab_adr_erst"

    Code VB, der funzt auch

    VB.NET-Quellcode

    1. Dim sql0 As String = "SELECT DtblADR1.* INTO tab_adr
    2. FROM DtblADR RIGHT JOIN DtblADR1 ON DtblADR.[ad_aa] = DtblADR1.[ad_aa]
    3. WHERE (((DtblADR.ad_aa) Is Null)) AND DtblADR1.ad_ab LIKE '90%';


    Das ganze In Access (funktioniert auch direkt in Access):

    VB.NET-Quellcode

    1. SELECT DtblADR1.* INTO tab_adr FROM
    2. DtblADR RIGHT JOIN DtblADR1 ON DtblADR.[ad_aa] = DtblADR1.[ad_aa]
    3. WHERE (((DtblADR.ad_aa) Is Null)) AND DtblADR1.ad_ab LIKE '90*';


    Hoffe das Hilft!

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

    Wega schrieb:


    Hoffe das Hilft!


    Juup ... die Infos helfen, aber vermutlich dürfte Dir nicht gefallen woran das Problem liegen könnte. ^^

    Access arbeitet mit Ansi 89 und SQL-Server mit Ansi 92.Ich vermute das es daran liegt weil Du über eine Verbindung die SQL-Server orientiert ist eine Access-Abfrage öffnest und daher die Umsetzung Ansi 89 Syntax in der Abfrage schief läuft. Das würde erklären wieso die Tabelle erstellt wird aber keine Daten zum Einfüllen gefunden werden da Ansi 92 eben bei der Bedingung LIKE '90*' das Sternchen nicht als Placeholder übersetzt sondern als zu suchendes Zeichen und daher keinen Treffer produziert und deswegen gibt es keine Einfüllung von DS in das Table.

    Prüfen kannst Du das Ganze in dem Du die Abfrage in Access mal von LIKE '90*' auf eine LIKE-Bedingung OHNE Placeholder umstellst, z.B. Like '90403' oder so (stell aber sich das es DS gibt die die Kriterien erfüllen ... da bin ich schonmal fast daran verzweifelt wieso die Test-Abfrage nicht funzt obwohl die Syntax richtig ist ... gab halt keine Treffer ^^).

    Wenn es das sein sollten, dann kannst Du das in Access umstellen. Bei Access 2007 kannst Du es so umstellen: Access-Optionen -> Objekt-Designer und dann auf der rechten unter dem Punkt Abfrageentwurf die Option 'SQL-Server-kompatibel Syntax(Ansi-92 )' das Kästchen 'in dieser Datenbank verwenden' anhakeln.

    ALLERDINGS kannst Du dann Deine kompletten SQL-Statements überarbeiten, da dann Dinge wie das hier " ... LIKE '90*'" in Access nicht mehr funktionieren da dann Access auch mit den SQL-Server Platzhaltern arbeitet.

    Dazu kommt aber noch das Problem das Access sich manchmal "verschluckt" (zumindest in 2007 und zuvor) und dann gibt es Chaos weil dann trotz Umstellung auf Ansi 92 das '%' nicht als Placeholder erkannt wird sondern das '*'. Passiert ab und an, ich habe da aber noch keine Gesetzmäßigkeit gefunden ... aber egal wie, ist natürlich absolut scheizse wenn Deine Abfragen deswegen dann mal funzen und mal nicht.

    Es gibt aber auch dagegen eine Abhilfe:

    Anstatt unter Ansi 92 LIKE zu verwenden, nimmst Du ALIKE und '%' als Placeholder. Das hat jetzt bei mir zu 99,9% zuverlässig funktioniert wogegen die Verwendung von LIKE mit '%' nur zu (gefühlten) 80% zuverlässig funktinioniert.

    Soweit mal meine Erfahrungen mit dem Thema ... vermutlich dürften die Dich nicht wirklich begeistern, aber dafür kann ich nix. *g*

    Gruß

    Rainer

    ES Funktioniert!!!!

    Lieber Rainer!

    Genau das war es, unvorstellbar!!

    Habe in Access auf ANSI 92 umgestellt, die Abfragen nachgezogen und schon habe ich auch Daten.
    Wenn du wüsstest wieviele Leute nicht mal Ansatzweise wussten was ich da eigendlich mache bzw. machen will.

    Vielen, Vielen Dank!! :D

    Wega schrieb:

    Lieber Rainer!

    Genau das war es, unvorstellbar!!

    Habe in Access auf ANSI 92 umgestellt, die Abfragen nachgezogen und schon habe ich auch Daten.
    Wenn du wüsstest wieviele Leute nicht mal Ansatzweise wussten was ich da eigendlich mache bzw. machen will.

    Vielen, Vielen Dank!! :D


    Freut mich das ich Dir weiterhelfen konnte. ;)

    Aber glaub mir ... Du willst nicht wissen wieviel Zeit es mich damals gekostet hat das rauszufinden. :D

    Gruß

    Rainer