Supportnet Computer
Planet of Tech

Supportnet / Forum / Datenbanken

Datensatzposition ändern





Frage

Hallo Leute, Ich habe eine Access 2000 Datenbank. Ich habe eine Listbox in der Datensätze zugrunde liegen. Inhalt der Tabelle ID, FeldID, Spaltennamen. ok ... jetzt mein Problem wie kann ich den Datensatz mit der ID2 so verschieben, dass er jetzt ID1 hat? und auch Umgekehert ... also einen Datensatz hoch... bin echt schon voll auf der Suche finde aber nix ... vll kann mir jemand von euch helfen! vielen Dank im Vorraus daniel

Antwort 1 von oliverV

Hallo Daniel,

willst du einzelne Datensätze „umsortieren“ oder grundsätzlich 2 nebeneinanderliegende Datensätze „tauschen“.
Wenn du sie beliebig „umsortieren“ willst, benötigst du ein weiteres Feld in deiner Tabelle als „Sortierfeld“, dieses Feld ist dann das Sorterkriterium für dein Listenfeld.
Empfehlen würde ich dir „größere“ Sortierschritte also z.B. 10, 20, 30 , usw., dadurch kannst du dann in Zukunft Datensätze immer noch „dazwischen sortieren“ z.B. 15, 18, usw.

Wenn du Datensätze grundsätzlich „tauschen“ willst, was ist dann das Kriterium dafür ?

Gruß

Oliver


Antwort 2 von KuQua

Hallo Oliver,

Das Kriterium ist die ID ...
Die Daten im Datensatz brauch ich für ein Formulart um bestimmte Felder anzusprechen.
Jenachdem an welcher Position in der Tabelle blendet mein Formular das Feld an der in der Tabelle befindlichen Position ein ...
hmm mir fällt grad auf ... das meine Frage etwas weit formuliert ist. Entschuldigung.
Also z.B. in der tabelle mit ID "1" stehen die Werte für Vorname und mit ID "2" die Straße und mit ID "3" der Nachname.
Ich will jetzt den Datensatz mit "Nachname" vor dem mit "Straße" stellen. d.h. ID "2" ist jetzt der Nachname und ID "3" die Straße.

Ich hoffe du verstehst mich jetzt... alles läuft über zwei Buttons "Datensatz hoch" und "Datensatz runter". d. h. es wäre ein VBA Code benötigt um die Funktion auszuführen. Danke

Antwort 3 von oliverV

Verstehe ich dich richtig, du hast in einem Tabellenfeld die Feldinhalte „Vorname“, „Nachname“ und „Straße“ und die willst du jetzt in der beschriebenen Reichenfolge zu einem Feld „zusammenfassen“, das als Datenherkunft für dein Listenfeld dient ?

Aber mal grundsätzlich, was macht es für einen Sinn 3 verschiedene Feldinhalte in einem Tabellenfeld zu speichern (halt verteilt auf 3 Datensätze) ?
Mir fällt dazu spontan kein „sinnvoller“ Grund ein – bei längerem Nachdenken bekomme ich nur ein steifes Genick vom Kopfschütteln.

Bevor du irgendetwas weiters machst solltest du meiner Ansicht nach diese Konstruktion ändern, du wirst in Zukunft permanent darüber stolpern – also erstelle 3 Tabellenfelder „Vorname“, Nachname“ und „Straße“ und speichere deine Inhalte somit in einem Datensatz.

(Bist du „normalerweise“ Excel-Anwender und hast noch die „zweidimensionale Denkweise “?)

Die ganze Geschichte mit einem VBA-Code zu „bereinigen“ dürfte nur funktionieren, wenn deine ID „durchgängig“ ist, d.h. das keine Lücken in der Reihenfolge vorhanden sind, dann könntest du wahrscheinlich eine Schleife durchlaufen lassen und jeden 3. Feldinhalt in ein bestimmtes anderes Feld schreiben – aber ein gutgemeinter Tipp „lass die Finger davon“ und überarbeite erst mal die Datenstruktur, früher oder später wirst du es eh machen müssen.

Gruß

Oliver


Antwort 4 von KuQua

Ahhh ... Nein ... nicht so wie du denkst hmmpf...

also Tabelle, auf der das Listenfeld Zugrunde liegt sieht, vereinfacht, so aus ...


[ID] [Spaltenname]
1 Vorname
2 Straße
3 Nachname

so ich will jetzt aber das es so aussieht ...

[ID] [Spaltenname]
1 Vorname
2 Nachname
3 Straße

d.h. Datensatz 3 wird 2 und Datensatz 2 wird drei ... hmmpf ... mehr will ich doch nicht ... :-( und das soll per VBA-Code erldigt werden!!!

Antwort 5 von oliverV

Ja, das habe ich auch wirklich so verstanden, eine Tabelle muss aber so aussehen:

ID – Vorname – Nachname – Straße
1 – Karl – Test – Phantasiefeld 1
2 – Walter – Meier – Hauptstzr. 12
3 - ….

Jeder Datensatz hat verschieden Felder.

Gruß

Oliver


Antwort 6 von mapet

Hallo

Bitte beherzige die Angaben von oliver und erstelle die Tabelle mit folgenden Spalten:

Adressen_ID (Autowert)
Nachname
Vorname
Adresse
Plz
Ort
usw.

Ansonsten wird es nie eine Datenbank

mapet

Antwort 7 von oliverV

Noch einfacher, schau doch mal in die Nordwind.mdb, vielleicht wird's dann deutlicher.

Gruß

Oliver

Antwort 8 von KuQua

Irgendwie rede ich an euch vorbei ... Naja ...

also meine Tabelle sieht so aus wie Oliver beschrieben, lassen wir die einzelnen Inhalte einfach ausser acht ... ok ...

Also gehen wir davon aus ... dass Adressen_ID kein Autowert ist, damit ich die Anordnung vornehmen kann ...
Gehen wir davon aus, dass die tabelle momentan so aussieht:
ID – Vorname – Nachname – Straße
1 – Karl – Test – Phantasiefeld 1
2 – Walter – Meier – Hauptstzr. 12
3 - Otto - Hindelmann - Hinterhof 7

Wie mache ich das per VBA den Datensatz 3 mit DS 2 zu tauschen??
Damit die Tabelle so aussieht ...

ID – Vorname – Nachname – Straße
1 – Karl – Test – Phantasiefeld 1
2 – Otto - Hindelmann - Hinterhof 7
3 - Walter – Meier – Hauptstzr. 12

Wenn ich das weiß bin ich zufrieden *gg*
Entschuldigen will ich mich nochmal für meine Umständliche und unübersichtliche Erklärung ...




Antwort 9 von mapet

Hallo

Was Du hier machst widerspricht meiner Datenbank Logik. Du darfst NIE die ID der Datensätze tauschen. Entweder machst Du dies über Sortierung wie Oliver es vorgeschlagen hat mit einem Sortier Feld oder lass es. In der Tabelle sind die DS in der Regel sowieso immer unsortiert und der Benutzer sieht die DS in den Formularen oder Berichten in der richtigen Filtrierung und Sortierung.

Wenn Du die ID tauschst stimmen nachher Deine ganzen Verknüpfungen in der DB nicht mehr

mapet

Antwort 10 von KuQua

Hmm ... naja ... passt schon ... dankeschön für eure Aufklärung, werde mal ne Lösung wo anders suchen ...

Aber nochmals Danke für eure Hilfe ...

schönen Abend noch

Antwort 11 von El Bobbele

Hallo KuQua!

Ich denke, ich verstehe, was du meinst. Die besagte Tabelle enthält keine Benutzerdaten oder Bezüge zu Benutzerdaten im üblichen Sinne, sondern Systemdaten, die ausschliesslich zur Steuerung eines Formulars herangezogen werden:

Zitat:
Die Daten im Datensatz brauch ich für ein Formulart um bestimmte Felder anzusprechen.
Jenachdem an welcher Position in der Tabelle blendet mein Formular das Feld an der in der Tabelle befindlichen Position ein ...
...
alles läuft über zwei Buttons "Datensatz hoch" und "Datensatz runter". d. h. es wäre ein VBA Code benötigt um die Funktion auszuführen.


Ob diese Herangehensweise das Gelbe vom Ei ist, sei mal dahingestellt. Ich finde es jedenfalls lobenswert, dass du einen Teil der Programmsteuerung in Tabellen auslagerst, das ist flexibler als hartverdrahteter Code. In diesem Fall kannst du natürlich mit dem Tabelleninhalt machen, was du willst, wie z.B. Aktualisierungsabfragen darauf ansetzen.


Dim db As Database

Set db = CurrentDb
With db
    .Execute "UPDATE <Tabelle> SET Spaltenname = 'Nachname' WHERE ID = 2;"
    .Execute "UPDATE <Tabelle> SET Spaltenname = 'Straße' WHERE ID = 3;"
End With


Alternativ könnte der Inhalt der Tabelle komplett gelöscht und anschliessend mit INSERT-Anweisungen Zeile für Zeile gefüllt werden.

Mit herkömmlichen Daten kannst du aber so nicht umspringen, das wollte ich auch nochmal gesagt haben. Da bin ich mit Oliver und mapet jeweils einer Meinung.

Gruss
El Bobbele

Antwort 12 von KuQua

Hallo El Bobbele

danke für deine Antwort.

Hat mir geholfen, ich habe jetzt nur das Problem
Wenn mehrere Benutzer diese Änderungen vornehmen, dass es nicht mehr funktioniert.

Gibt es ne möglichkeit diese Tabelle, z.B. in ein Recordset zu packen und das Formular dieses Recordset oder ähnliches auslesen zu lassen?

Die einstellungen dieser Tabelle sollen nur für die Zeit der Benutzung zur Verfügung stehen.
Im Single-Use ist das kein Problem aber wie schon gesagt im Multi-Use ...

Antwort 13 von El Bobbele

Also jetzt muss ich aber auch die Notbremse ziehen. Ich hatte angenommen, dass du eine Art einmalige Systemaktualisierung durchführst und jetzt führen mehrere Benutzer diese Änderung aus? Das finde ich jetzt gar nicht mehr gut. Ausserdem würde mich es interessieren, wieviel von meinen Vermutungen in Antwort 11 überhaupt stimmen?

Du musst das mal so sehen: Deine Schilderungen wirken grundsätzlich haarsträubend, nur besagte Systemaktualisierung würde ich durchgehen lassen. Jetzt reiten Benutzer ständig drauf herum -> haarsträubend. Wenn du weitere Unterstützung willst, dann solltest du vielleicht noch etwas weiter ausholen und dein Vorhaben von Grund auf erläutern. Ich wüsste keinen Grund, warum zur Navigation ("Datensatz hoch, Datensatz runter") der Tabelleninhalt von jedem Anwender geändert werden muss.

Gruss
El Bobbele

Antwort 14 von KuQua

Hallo El Bobbele

Ich habe eine Datenbank, in der Sich Daten von Mitarbeitern befinden. Vorname, Nachname, Dienstlaufbahn, Benutzername, Telefon, Beamter(Ja/Nein), Aktiv(Ja/Nein), Dienststelle.

Ok. Nun habe ich ein Endlosformular(Formular1) in denen diese Daten aufgeführt werden.

Da diese Datenbank mehreren Personen zur Verfügung gestellt werden soll, habe ich ein zweites Formular(Formular2) erstellt.

In diesem Formular habe ich zwei Listenfelder.
Listenfeld_eins und Listenfeld_zwei.
In Listenfeld_eins stehen die Verfügbaren Spalten aus dem Formular. Die Feldnamen aus dem Formular habe ich in eine Tabelle geschrieben, welcher Listbox_1 zu Grunde liegt.

Da mir momentan keine andere Lösung eingefallen ist, schreibe ich mittels Recordset die Werte aus dem einen Listenfeld in ein anderes, also in Tabelle_2.
Hier mal der Code wie ich die Datenübergebe, Aktion wir per click auf einen Button ausgelöst:

Private Sub Benutzer_hinzufuegen()
Dim dbs As Database
Dim rst As Recordset
Dim element As Variant

Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("Tabelle_2", dbOpenDynaset)

For Each element In Listbox_1.ItemsSelected
rst.AddNew
rst!AuswahlID = Listbox_1.Column(0, element)
rst!FelderNamen = Listbox_1.Column(1, element)
rst.Update
Next element

rst.Close
dbs.Close

Me.Recalc

End Sub

Die Tabelle2 hat folgende Felder, momentan:
ID(Autowert)
AuswahlID
FelderNamen

Beim öffnen von Formular1 werden die werte aus Tabelle2 abgerufen und sichtbar geschalten.
Jetzt kommt das Problem...
Wenn ich in der Auswahl z.B. als erstes Telefonnummer an Tabelle2 übergeben habe öffnet sich das Feld mit der Telefonnummer an erster stelle. Die Benutzer sollen dann, wenn alle Daten in Tabelle2 schon geschrieben sind die Reihenfolge der Felder ändern können.

Da meine Anwender zum großenteil, keine großen PC Kenntnisse haben, werden ich sie damit überfordern, wenn sie die Felder gleich in richtiger Reihenfolge auswählen müssen. Deshalb sollen sie nachdem sie die Felder schon ausgewählt haben die Reihenfolge noch ändern können. d.h. Sie drücken auf eine Schaltfläche und der markierte Datensatz verschiebt sich nach oben ... oder nach unten ... das wäre meine Lösung.

Das mit der MultiUserUmgebung kann aber noch warten, möchte jetzt erstmal die Lösung zum Verschieben per Schaltfläche eins nach oben oder unten ...

Ich hoffe das ich jetzt alles so beschrieben habe, damit ihr was anfangen könnt! Über eine Lösung würde ich mich freuen!



Antwort 15 von El Bobbele

Jetzt ist es schon klarer, was du willst. Ich mache mir mal Gedanken darüber, wie das am geschicktesten gelöst werden kann. Vor morgen wird es aber nichts, ich bin heute noch beruflich gebunden. Mir schwebt da ein Endlosformular mit Ja/Nein-Spalte und Sortierspalte vor, das wie ein Listenfeld formatiert ist (Steuerelemente transparent, Formularhintergrund weiss).

Das Mehrbenutzerproblem verschwindet von alleine, wenn du deine Datenbank in Frontend/Backend aufgeteilst. Die besagte Tabelle liegt dann im Frontend und da jeder Anwender sein eigenes Frontend hat, gibt es da auch keinen Konflikt.


Gruss
El Bobbele

Antwort 16 von El Bobbele

Hallo KuQua!

Ich habe zwischenzeitlich eine geeignete Lösung gebastelt. Wenn du mir deine EMail-Adresse gibst, schicke ich dir die Datenbank zu.

Gruss
El Bobbele

Antwort 17 von oliverV

Hallo El Bobbele,

ich bin zwar nicht der „Bedürftige“, deine Lösung würde mich aber dennoch interessieren, wäre schön wenn du mir die DB auch mal mailen könntest.

ovogelei@web.de

Ich nutze A2000.

Gruß + Dank

Oliver


Antwort 18 von El Bobbele

Hi Oliver!

Ich schicke dir die Datenbank, sobald ich wieder an sie herankomme. Am Wochenende war ich nicht zuhause und habe sie auf einem fernen PC erstellt, auf den ich unter der Woche keinen Zugriff habe. Du erhältst sie demnach frühestens Freitag abend oder Samstag mittag, wenn ich wieder dort bin. :-(

Es handelt sich jedenfalls um ein Endlosformular, das vom Design her aussieht wie ein normales Listenfeld. Es bietet ein Kontrollkästchen und eine Textspalte an und die Zeilen können mit den danebenliegenden Hoch-/Runter-Schaltflächen beliebig verschoben werden, wobei der Datensatzfokus stets mit dem ursprünglich ausgewählten Datensatz mitwandert.

Gruss
El Bobbele

Ich möchte kostenlos eine Frage an die Mitglieder stellen:


Ähnliche Themen:


Suche in allen vorhandenen Beiträgen: