Benutzer mit den meisten Antworten
SQL für mdb/accdb

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.
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
-
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
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
-
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