none
SQL für mdb/accdb RRS feed

  • Frage

  • Hallo,

    ich habe für den SQL-Server einen kompakten SQL-String, der einen Datensatz in der Tabelle z.B.: 'Adressen' kopiert.

    ' - nAdrNr wird vorab gesetzt
    ' - Select into Temp from Adressen,
    ' - Update Temp,
    ' - und abschließend Insert into Adressen from Temp

    cSQL="SELECT * INTO #tmp FROM adressen WHERE IndexNr =" & nAdrNr.ToString & "; "
    cSQL = cSQL & "UPDATE #tmp SET IndexNr=" & nAdrNrNeu.ToString & ", kds=1, i_trace=1;"
    cSQL = cSQL & "INSERT INTO adressen SELECT * FROM #tmp;"

    Leider ist es mir nicht gelungen, o.g. SQL mit einer mdb/accdb Access-Datenbank zum Laufen zu bringen.
    Ich verwende vb.net 2012, Oledb und Datenbanken von Access 2013.

    Donnerstag, 21. August 2014 11:44

Antworten

  • Hallo,

    aus deinem Skript wird erkenntlich, dass du temporäre Tabellen verwendest (#tmp). Diese gibt es meines Erachtens in Access nicht.

    Ein Ansatz wäre, die TEMP-Tabelle vorher zu erstellen:

    SELECT * INTO TMP FROM Adressen WHERE 1=2

    Das #-Zeichen müsstest du dann aber auch überall entfernen.


    Gruß, Mathias


    • Bearbeitet Mathias Liefke Donnerstag, 21. August 2014 12:04
    • Als Antwort markiert HaBa1957 Donnerstag, 21. August 2014 12:22
    Donnerstag, 21. August 2014 12:04
  • Hallo,

    zum einen: Access kennt keine temporären Tabellen. Du wirst "#tmp" als permanente Tabelle anlegen müssen, d. h. entweder einen eindeutigen Namen verwenden bzw. eine vorher bestehende vor löschen.

    Wobei man die obigen SQL Orgie auch durch eine einzelne Anweisung ersetzen könnte (sowohl bei Access als auch beim SQL Server):

    INSERT INTO Adressen (IndexNr, kds, i_trace, weitere felder>)
    SELECT ? AS IndexNr, 1, 1, <weitere Felder>
    FROM addressen
    WHERE IndexNr = ?;
    

    wobei Parameter1  ann nAdrNrNeu und Parameter 2 nAdrNr wäre, siehe Konfigurieren von Parametern und Parameterdatentypen

    <weitere felder> wäre der Platzhalter für die übrige Feldliste aus Adressen.

    Gruß Elmar

    • Als Antwort markiert HaBa1957 Donnerstag, 21. August 2014 12:22
    Donnerstag, 21. August 2014 12:08
    Beantworter

Alle Antworten

  • Hallo,

    aus deinem Skript wird erkenntlich, dass du temporäre Tabellen verwendest (#tmp). Diese gibt es meines Erachtens in Access nicht.

    Ein Ansatz wäre, die TEMP-Tabelle vorher zu erstellen:

    SELECT * INTO TMP FROM Adressen WHERE 1=2

    Das #-Zeichen müsstest du dann aber auch überall entfernen.


    Gruß, Mathias


    • Bearbeitet Mathias Liefke Donnerstag, 21. August 2014 12:04
    • Als Antwort markiert HaBa1957 Donnerstag, 21. August 2014 12:22
    Donnerstag, 21. August 2014 12:04
  • Hallo,

    zum einen: Access kennt keine temporären Tabellen. Du wirst "#tmp" als permanente Tabelle anlegen müssen, d. h. entweder einen eindeutigen Namen verwenden bzw. eine vorher bestehende vor löschen.

    Wobei man die obigen SQL Orgie auch durch eine einzelne Anweisung ersetzen könnte (sowohl bei Access als auch beim SQL Server):

    INSERT INTO Adressen (IndexNr, kds, i_trace, weitere felder>)
    SELECT ? AS IndexNr, 1, 1, <weitere Felder>
    FROM addressen
    WHERE IndexNr = ?;
    

    wobei Parameter1  ann nAdrNrNeu und Parameter 2 nAdrNr wäre, siehe Konfigurieren von Parametern und Parameterdatentypen

    <weitere felder> wäre der Platzhalter für die übrige Feldliste aus Adressen.

    Gruß Elmar

    • Als Antwort markiert HaBa1957 Donnerstag, 21. August 2014 12:22
    Donnerstag, 21. August 2014 12:08
    Beantworter