LabVIEWForum.de - was ist das gegenteil von fetch?

LabVIEWForum.de

Normale Version: was ist das gegenteil von fetch?
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hallo,

ich möchte in allen Zeilen (Records) einer Datenbanktabelle einen String verändern. Bis zum String bin ich auch schon gekommen (fetch) aber wie schreibe ich das geänderte Zeug wieder in die DB? In SQL gibt es klarerweise (?) kein next (record). Irgendwie stehe ich an. Die ganze Spalte einlesen? Das sind aber 164000 Werte..., OK aber wie schreiben?

LV 8.5

Danke

Gottfried

PS.: in der Tabelle habe ich keine Werte mit denen ich den "nächsten" Record bestimmen könnte
' schrieb:Hallo,

ich möchte in allen Zeilen (Records) einer Datenbanktabelle einen String verändern. Bis zum String bin ich auch schon gekommen (fetch) aber wie schreibe ich das geänderte Zeug wieder in die DB? In SQL gibt es klarerweise (?) kein next (record). Irgendwie stehe ich an. Die ganze Spalte einlesen? Das sind aber 164000 Werte..., OK aber wie schreiben?

LV 8.5

Danke

Gottfried

PS.: in der Tabelle habe ich keine Werte mit denen ich den "nächsten" Record bestimmen könnte


ich würd das gar nicht über cursors, sondern über einen Query machen:

Code:
UPDATE tabellenname SET spaltenname=neuerwert WHERE (irgend eine Bedingung, oder auch keine ...)

Wie das mit SQL funktioniert sieht kannst du dir hier anschauen
Danke

Aber das Problem ist dass ich in SQL nicht zum nächsten Record gehen kann. Ich könnte eine laufende Recordnummer einführen... na ja. Und der neue Wert entsteht aus dem alten wert der in der Spalte steht (falsche Datumsformatiuerung)

Danke

Gottfried
' schrieb:Und der neue Wert entsteht aus dem alten wert der in der Spalte steht (falsche Datumsformatiuerung)

auch das geht mit SQL ...z.B. SET spaltenname=spaltenname+1 wenn die Spalte die geändert werden soll ein numerisches Format hat. Wie's bei Datums-Feldern aussieht müsst ich nun auch nachschauen ...

aber um nochmal auf die Frage einzugehen: ein Gegenteil von Fetch gibt es sogesehen nicht weil ein Recordset keinen direkten Zugriff auf die zugrundeliegenden Tabellen hat. Wenn du die Daten in der DB ändern willst, dann geht das mit einem UPDATE-Statement.
Verstehe ich das richtig: mit dem fetch bekomme ich eine Liste. Dises Liste merken, das Recordset schliessen und dann anhand der Liste die Records in Spalte x verändern?

Habe ich das so richtig?

Ich dachte (wie in Access, wo ich in einer Abfrage auch die darunter liegenden Daten ändern kann) ich könnte das auch mit einem Fetch machen.

Vielen Dank

Gottfried
' schrieb:Verstehe ich das richtig: mit dem fetch bekomme ich eine Liste. Dises Liste merken, das Recordset schliessen und dann anhand der Liste die Records in Spalte x verändern?

Habe ich das so richtig?

Ich dachte (wie in Access, wo ich in einer Abfrage auch die darunter liegenden Daten ändern kann) ich könnte das auch mit einem Fetch machen.

Vielen Dank

Gottfried

ja, in Access geht das weil es im Hintergrund ein SQL-Statement generiert und ausführt, mit ADO geht das nicht bzw. du musst das Statement halt selbst entwickeln. Für deine Aufgabenstellung gibt es 2 Möglichkeiten:

a) du kannst alle Timestamps mit EINEM Update-Query "erschlagen", das wäre dann die einfache Methode,
oder
b) du musst für jede Zeile den Timestamp separat aktualisieren, dann holst du dir alle betroffenen Zeilen in einem Recordset nach LabVIEW, wandelst die Daten in einer For-Schleife (Anzahl der Zeilen im Recordset ...) in einen LV Zeitstempel um, manipulierst deinen Wert und schickst ein Update-Statement ab. Dabei ist es sehr hilfreich, wenn du jede Zeile mit einer ID (Typ i32, in Access ist das der Auto-Wert) als Primärschlüssel ausstattest und dann dein Update-Statement mit der Where-Clause "WHERE meinIDSpaltenName = ID ausführtst. Damit die ADO API nicht "überfordert" wird solltest du die While-Schleife mit einem Timer bremsen ... nach meinen Beobachtungen verkraftet ADO ca. 100 UPDATEs per Sekunde ...
Referenz-URLs