UPDATE Frage

UPDATE Frage

am 07.01.2006 21:28:38 von Nicolas Tade

Hallo,

finde irgendwie keine reine SQL-Gruppe, deshalb frage ich hier mal:
Kann man mit einem SQL-Statement folgendes bewerkstelligen:
Ich habe eine Filmdatenbank, lösche nun Film Nr. 6 und alle darauf folgenden
sollen nun eine Nummer hochrücken, also aus 7 wird 6, aus 8 wird 7, bis zum
Ende. Geht das irgendwie mit UPDATE, oder muss ich das in php
bewerkstelligen? Ich weiss nur wie das löschen geht, aber der Rest benötigt
irgendwie eine sequentielle Logik.

Tabelle: Filmnummer, Filmtitel, Aufnahmeformat

Vielen Dank für jede Hilfe!
Nico

Re: UPDATE Frage

am 07.01.2006 21:33:21 von Uwe Sauerbrey

-- Löschen eines Filmes mit der lfdNr 6:
delete from tbl_filme where lfdNr = 6;

-- alle Filme mit lfdNr >6 sollen aufrücken:
update tbl_filme set lfdNr = lfdNr - 1 where lfdNr > 6;

Sollte so funktionieren.
Grüße!

"Nicolas Tade" schrieb im Newsbeitrag
news:42amdrF1idnr2U1@individual.net...
> Hallo,
>
> finde irgendwie keine reine SQL-Gruppe, deshalb frage ich hier mal:
> Kann man mit einem SQL-Statement folgendes bewerkstelligen:
> Ich habe eine Filmdatenbank, lösche nun Film Nr. 6 und alle darauf
folgenden
> sollen nun eine Nummer hochrücken, also aus 7 wird 6, aus 8 wird 7, bis
zum
> Ende. Geht das irgendwie mit UPDATE, oder muss ich das in php
> bewerkstelligen? Ich weiss nur wie das löschen geht, aber der Rest
benötigt
> irgendwie eine sequentielle Logik.
>
> Tabelle: Filmnummer, Filmtitel, Aufnahmeformat
>
> Vielen Dank für jede Hilfe!
> Nico
>
>

Re: UPDATE Frage

am 07.01.2006 22:14:29 von Andreas Kretschmer

Andreas
--
Diese Message wurde erstellt mit freundlicher Unterstützung eines freilau-
fenden Pinguins aus artgerechter Freilandhaltung. Er ist garantiert frei
von Micro$oft'schen Viren. (#97922 http://counter.li.org) GPG 7F4584DA
Was, Sie wissen nicht, wo Kaufbach ist? Hier: N 51.05082°, E 13.56889° ;-)

Re: UPDATE Frage

am 07.01.2006 22:23:31 von Stefan Rybacki

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Andreas Kretschmer wrote:
> begin Nicolas Tade wrote:
>> Hallo,
>
>...
>
> Antwort hast Du ja, aber dennoch: wozu?
>
Sehr gute Frage! Genau das hatte ich mir auch gedacht, als ich sein Posting las.

Bis denn dann
Stefan

> end
> Andreas

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1rc2 (MingW32)

iD8DBQFDwDFTyeCLzp/JKjARAgboAJ9+MakJYDMXegUhzzE3z9xe5mok+ACe LuWI
wL3M54CXGPE/xINaV/QinEQ=
=VTze
-----END PGP SIGNATURE-----

Re: UPDATE Frage

am 08.01.2006 01:18:29 von Nicolas Tade

Hallo,

danke für die Antwort. So ähnlich hatte ich mir das auch gedacht. Leider
bringt diese dumme Access-Datenbank darauf:
"Filmnummer kann nicht aktualisiert werden; Feld nicht aktualisierbar"
Irgend ne Idee, was damit gemeint ist? Es handelt sich um ein Integerfeld,
und es ist der Primärschlüssel. Liegt es daran? Aber was soll man dann gross
machen?

Vielen Dank nochmal,
Nico

Re: UPDATE Frage

am 08.01.2006 08:38:10 von Dieter Strassner

Hallo Nicolas,

> "Filmnummer kann nicht aktualisiert werden; Feld nicht aktualisierbar"
> Irgend ne Idee, was damit gemeint ist? Es handelt sich um ein Integerfeld,
> und es ist der Primärschlüssel. Liegt es daran? Aber was soll man dann
> gross machen?

Primärschlüssel? Dann hast Du schlechte Karten für deine Aktion.

Im Grunde kommt dein Problem von der Tatsache, das Du ein Feld (hier "nr")
für zwei verschiedene Zwecke verwendest.
1. für die "Einlagerung" und Identifizierung der Daten (...Primärschlüssel)
2. für die Nummerierung innerhalb der Anzeige (..fortlaufende Nummer)
Beides läuft eben nicht immer syncron wie du bemerkt hast (...deshalb dein
Update-Würkaround).

Mein Vorschlag: Die Nummerierung zur Anzeige der GUI überlassen (ggfs. dort
explizit programmieren).
Alternativ ein weiteres Feld (evtl. temporär, nur im SELECT) in deiner
Tabelle für genau diesen Zweck definieren. (z.B. "LFDNR" o.ä.).
Ersterer Vorschlag würde ich favorisieren, sofern techn. möglich.

--

Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz

Re: UPDATE Frage

am 08.01.2006 19:50:32 von Nicolas Tade

> Primärschlüssel? Dann hast Du schlechte Karten für deine Aktion.

Hmm, das heisst jetzt genau?
Per Hand lässt sich der Schlüssel in Access doch anpassen (-1).
Ist es also per SQL grundsätzlich nicht möglich, den Primärschlüssel einer
Tabelle zu ändern?

Nico

Re: UPDATE Frage

am 08.01.2006 19:59:02 von Stefan Rybacki

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Nicolas Tade wrote:
>> Primärschlüssel? Dann hast Du schlechte Karten für deine Aktion.
>
> Hmm, das heisst jetzt genau?
> Per Hand lässt sich der Schlüssel in Access doch anpassen (-1).
> Ist es also per SQL grundsätzlich nicht möglich, den Primärschlüssel einer
> Tabelle zu ändern?

Doch grundsätzlich ist es möglich. Doch bei dir könnte ein doppeltes Schlüssel
Problem auftreten.

Bsp:

Schlüssel: 1,2,4,5,6
nun willst du da die 3 fehlt alle Schlüssel >3 um eins dekrementieren. Nun weißt
du aber nicht, wo die Datenbank anfängt, d.h. wenn sie mit der 6 anfängt
existiert die 5 zweimal und du bekommst einen Fehler.

Was du versuchen kannst ist etwas in der Art:

UPDATE table SET schluessel=schluessel-1 WHERE schluessel>3 ORDER BY schluessel

Ungetestet, aber vielleicht funktioniert es so.

Bis denn dann
Stefan

>
> Nico
>
>

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1rc2 (MingW32)

iD8DBQFDwWD2yeCLzp/JKjARAjtgAJ41bu4A8ubcZTYRkHf7oUy7rDj5KgCg jaQN
TzRWnGo5YbQPX8tPGXZM6tI=
=5nkg
-----END PGP SIGNATURE-----

Re: UPDATE Frage

am 08.01.2006 20:20:33 von Dieter Strassner

Hallo Stefan,

> Was du versuchen kannst ist etwas in der Art:
>
> UPDATE table SET schluessel=schluessel-1 WHERE schluessel>3 ORDER BY
> schluessel
>
> Ungetestet, aber vielleicht funktioniert es so.

.....das hat Uwe ihm schon gepostet. Aber dann stellte sich ja heraus, das es
sich um den Primarkey der Tabelle handelt.


@Nicolas

>>> Primärschlüssel? Dann hast Du schlechte Karten für deine Aktion.
>>
>> Hmm, das heisst jetzt genau?
>> Per Hand lässt sich der Schlüssel in Access doch anpassen (-1).
>> Ist es also per SQL grundsätzlich nicht möglich, den Primärschlüssel
>> einer
>> Tabelle zu ändern?

Ich vermute mal, ACCESS transformiert diese Benutzeraktion in mehrere
SQL-Statements.
So in etwa: PK löschen, Feld ändern, PK definieren.
Zumal bei einem Eintrag unter ACCESS ja nur genau *ein* Datensatz geändert
wird. Du müsstest das ganze in eine Schleife packen. Summa summarum wird das
ganze sicherlich nicht sehr performant.

Ich würde mich von diesem Würkaround einfach verabschieden und eine
"vernünftige" Lösung programmieren, siehe mein Posting.

--

Viele Grüße

Dieter


Rückfragen bitte nur in die Newsgroup!

EDV-Kommunikation Strassner e.K.
68623 Lampertheim
Internet: www.strassner.biz

Re: UPDATE Frage

am 08.01.2006 21:33:22 von NOSPAM_newsgroups

Hi

Nicolas Tade schrieb:
> =

> Hallo,
> =

> finde irgendwie keine reine SQL-Gruppe, deshalb frage ich hier mal:
> Kann man mit einem SQL-Statement folgendes bewerkstelligen:

[...]

> bewerkstelligen? Ich weiss nur wie das löschen geht, aber der Rest be=
nötigt
> irgendwie eine sequentielle Logik.
> =

> Tabelle: Filmnummer, Filmtitel, Aufnahmeformat

Ein Primärschlüssel wird nie geändert - Punkt.

der Aufbau deiner Tabelle lautet: ID, filmnummer, filmtitel, ...

wobei eine ID absolut einmalig ist, nie geändert und auch nach
einem löschen nie wieder neu vergeben wird.

Alles andere ist pfusch bzw. laienhaft.

und ja, bei 20 stellen numerisch muß du schon etliche tausend
DS pro Sekunde anlegen um in deinem Leben mal fertig zu werden.

gruß n.Olivier
-- =

Nachbagauer Olivier
Technologiezentrum Freilassing
D-83395 Freilassing
www.nOlivier.com
www.Reedb.com - Immobilien Online
www.Immofinder.de

Re: UPDATE Frage

am 08.01.2006 22:33:41 von Stefan Rybacki

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Dieter Strassner wrote:
> Hallo Stefan,
>
>> Was du versuchen kannst ist etwas in der Art:
>>
>> UPDATE table SET schluessel=schluessel-1 WHERE schluessel>3 ORDER BY
>> schluessel
>>
>> Ungetestet, aber vielleicht funktioniert es so.
>
> ....das hat Uwe ihm schon gepostet. Aber dann stellte sich ja heraus,
> das es sich um den Primarkey der Tabelle handelt.
>

Nicht ganz, ich habe noch eine ORDER BY Klausel angefügt, die unter Umständen
gesagtes Problem verhindern könnte. Wie gesagt ich habs jetzt nicht getestet,
aber wage mich zu erinnern, daß so schon mal bei MySQL probiert zu haben um
einen Primärschlüssel um eins zu erhöhen. (dort war es ein ORDER BY DESC was den
Unterschied gemacht hatte)


>...
>
> Ich vermute mal, ACCESS transformiert diese Benutzeraktion in mehrere
> SQL-Statements.
> So in etwa: PK löschen, Feld ändern, PK definieren.

Dazu kann ich nichts sagen, hab nie mit Access gearbeitet.

> Zumal bei einem Eintrag unter ACCESS ja nur genau *ein* Datensatz
> geändert wird. Du müsstest das ganze in eine Schleife packen. Summa
> summarum wird das ganze sicherlich nicht sehr performant.

Auch da muß ich dir glauben, weil ichs einfach nicht weiß.

>
> Ich würde mich von diesem Würkaround einfach verabschieden und eine
> "vernünftige" Lösung programmieren, siehe mein Posting.
>

Absolut deiner Meinung, ein Primärschlüssel gehört nicht geändert, weil ein
Eintrag gelöscht wird.

Bis denn dann
Stefan
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.1rc2 (MingW32)

iD8DBQFDwYU0yeCLzp/JKjARAjK5AKCOBWhZrX3i3m/mRHIwUD+Es9kWXACg rFSP
0GvAcmkj9FDOQhdZ8LQMCoo=
=jb1e
-----END PGP SIGNATURE-----