Frage

Beim Testen der folgenden SQL-Code für eine andere Antwort Stackoverflow, ich habe die folgenden Fehler:

  • mdb über OLE DB: „Katastrophale failure "
  • accdb über OLE DB: (leere Nachricht)
  • Access2007 Abfrage-Objekt: „Unknown Access-Datenbank Fehler "

Ich verwende eine neue, saubere Datenbankdatei. Die showplan.out Ausführungsplan enthält nichts nützlich; Ich habe den Inhalt gepostet unten.

Anders als die Access-Datenbank-Engine ungeeignet für den Zweck erklärt (!!), ist es etwas, was ich tun kann?

Sub Discon()

  Const USE_MDB As Long = 1
  Const USE_ACCDB As Long = 2

  Dim version As Long

  ' Hard code which version of the
  ' Access Database Engine to use

  version = USE_MDB

  Dim fullFileName As String
  Dim conString As String

  If version = USE_MDB Then

    fullFileName = Environ$("temp") & "\DropMe.mdb"
    conString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & fullFileName

  Else

    fullFileName = Environ$("temp") & "\DropMe.accdb"
    conString = _
        "Provider=Microsoft.ACE.OLEDB.12.0;" & _
        "Data Source=" & fullFileName

  End If

  On Error Resume Next
  Kill fullFileName
  On Error GoTo 0

  Dim cat
  Set cat = CreateObject("ADOX.Catalog")
  With cat

    ' Create a new database file in user's temp folder
    .Create conString

    With .ActiveConnection

      Dim Sql As String

      ' Create a new base base with data (required to
      ' be able to later create a virtual table)

      Sql = _
      "CREATE TABLE Customers (" & _
      "CustomerID CHAR(5) NOT NULL UNIQUE);"
      .Execute Sql

      Sql = _
      "INSERT INTO Customers (CustomerID)" & _
      " VALUES ('ANTON');"
      .Execute Sql

      ' Create a virtual (viewed) table
      Sql = _
      "CREATE VIEW TableA AS  " & _
      "SELECT DT1.ID, DT1.[Date], DT1.Supplier_ID " & _
      "FROM ( " & _
      "      SELECT DISTINCT 1 AS ID, '2009-10-23 00:00:00' AS [Date], " & _
      "             1 AS Supplier_ID FROM Customers " & _
      "      UNION ALL  " & _
      "      SELECT DISTINCT 2, '2009-10-23 00:00:00', 1 FROM Customers" & _
      "      UNION ALL  " & _
      "      SELECT DISTINCT 3, '2009-10-24 00:00:00', 2 FROM Customers " & _
      "      UNION ALL  " & _
      "      SELECT DISTINCT 4, '2009-10-25 00:00:00', 2 FROM Customers " & _
      "      UNION ALL  " & _
      "      SELECT DISTINCT 5, '2009-10-26 00:00:00', 1  FROM Customers " & _
      "     ) AS DT1;"
      .Execute Sql

      ' Create VIEWs based on the virtual table

      Sql = _
      "CREATE VIEW TableA_StartDates (Supplier_ID, start_date) " & _
      "AS " & _
      "SELECT T1.Supplier_ID, T1.[Date] " & _
      "  FROM TableA AS T1 " & _
      " WHERE NOT EXISTS ( " & _
      "                   SELECT * " & _
      "                     FROM TableA AS T2 " & _
      "                    WHERE T2.Supplier_ID = T1.Supplier_ID " & _
      "                          AND DATEADD('D', -1, T1.[Date]) = T2.[Date] " & _
      "                  );"
      .Execute Sql

      Sql = _
      "CREATE VIEW TableA_EndDates (Supplier_ID, end_date) " & _
      "AS " & _
      "SELECT T3.Supplier_ID, T3.[Date] " & _
      "  FROM TableA AS T3 " & _
      " WHERE NOT EXISTS ( " & _
      "                   SELECT * " & _
      "                     FROM TableA AS T4 " & _
      "                    WHERE T4.Supplier_ID = T3.Supplier_ID " & _
      "                          AND DATEADD('D', 1, T3.[Date]) = T4.[Date] " & _
      "                  );"
      .Execute Sql

      Sql = _
      "CREATE VIEW TableA_Periods (Supplier_ID, start_date, end_date) " & _
      "AS " & _
      "SELECT DISTINCT T5.Supplier_ID, " & _
      "       ( " & _
      "        SELECT MAX(S1.start_date) " & _
      "          FROM TableA_StartDates AS S1 " & _
      "         WHERE S1.Supplier_ID = T5.Supplier_ID " & _
      "               AND S1.start_date <= T5.[Date] " & _
      "       ), " & _
      "       ( " & _
      "        SELECT MIN(E1.end_date) " & _
      "          FROM TableA_EndDates AS E1 " & _
      "         WHERE E1.Supplier_ID = T5.Supplier_ID " & _
      "               AND T5.[Date] <= E1.end_date " & _
      "       )         " & _
      "  FROM TableA AS T5;"
      .Execute Sql

      ' Attempt to use the nested VIEWs in a query

      Sql = _
      "SELECT * FROM TableA_Periods AS P1;"

      Dim rs

      On Error Resume Next
      Set rs = .Execute(Sql)

      If Err.Number = 0 Then
        MsgBox rs.GetString
      Else
        MsgBox _
            Err.Number & ": " & _
            Err.Description & _
            " (" & Err.Source & ")"
      End If

      On Error GoTo 0

    End With
    Set .ActiveConnection = Nothing
  End With
End Sub

Dies ist der Inhalt von showplan.out:

--- temp query ---

- Inputs to Query -
- End inputs to Query -

01) Insert into 'Customers'



--- temp query ---

- Inputs to Query -
- End inputs to Query -

01) Insert into 'Customers'



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
05) Restrict rows of result of 04)
      by scanning
      testing expression "Not "



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
05) Restrict rows of result of 04)
      by scanning
      testing expression "Not "



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
05) Restrict rows of result of 04)
      by scanning
      testing expression "Not "



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
05) Restrict rows of result of 04)
      by scanning
      testing expression "Not "



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
      store result in temporary table



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
      store result in temporary table



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
      store result in temporary table



--- temp query ---

- Inputs to Query -
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
Table 'Customers'
- End inputs to Query -

      store result in temporary table
      store result in temporary table
01) Union result of '00)' and result of '00)'
      store result in temporary table
02) Union result of '01)' and result of '01)'
      store result in temporary table
03) Union result of '02)' and result of '02)'
      store result in temporary table
04) Union result of '03)' and result of '03)'
      store result in temporary table
War es hilfreich?

Lösung

Deklarieren Sie die Access-Datenbank-Engine nicht für den Zweck (!!). Dies sind Vanille-Abfragen und sollte ohne Fehler arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top