Hallo Leute,
ich zerbreche mir ein bisschen den Kopf an einer Sache und hoffe auf Eure Hilfe und Vorschläge. Meine Datenbank erstellt aus mehreren Tabellen eine Art Produktkatalog. Eine entsprechende Abfrage fügt alle Informationen zusammen und packt das gesamte Ergebnis in eine leere Tabelle tbl_Produktkatalog. Das mache ich, da unterschiedliche Datenbanknutzer Inhalte des Produktkatalogs anhaken können, um die entsprechenden Inhalte dann in ihre Angebote aufnehmen zu können. Die Tabelle tbl_Produktkatalog besitzt also ein Ja/Nein Feld. Entsprechend angehakte Produkte bzw. deren Spalte werden dann mit Klick auf eine Schaltfläche in die Tabelle für die Angebotsinhalte kopiert und dann alle Haken aus dem Katalog wieder entfernt.
Nun ist die Zahl derer, die die Datenbank nutzen gestiegen und es kommt vor, dass zwei oder mehr Personen gleichzeitig den Produktkatalog aufrufen und nutzen. Damit wird von mehreren das Ja/Nein Feld genutzt und damit funktioniert das nicht mehr so wie gewünscht. :o
Leider finde ich keinen passenden Ansatz, wie ich das Problem lösen kann, außer ich erstelle für jeden User seinen eigenen Katalog, was die Datenbank aber sehr aufblähen würde. Optimal wäre es, ich könnte auf den Katalog ganz verzichten und die Auswahl über die Abfrage erledigen. Hier würde mir dann aber das Feld zum anhaken fehlen.
Habt Ihr da ne Idee wie man da rangehen könnte?
LG
datekk
Spontan fällt mir ein, daß Du ein ungebundenes Recordset erstellen kannst und dieses aus der Abfrage füllen kannst. Auf diese Weise würden die im Formular dargestellten Daten nicht mehr direkt an einer Abfrage/Tabelle hängen. Das ungebundene Recordset hätte alle Felder der Abfrage und zusätzlich ein Boolean-Feld, das an eine Checkbox gebunden werden kann. Damit bräuchte es auch die Zwischentabelle Produktkatalog nicht mehr.
Hallo,
db aufteilen in FE/BE. BE liegt auf dem Server die FE jeweils beim User. Alle Tabellen ausser der tbl_Produktkatalog liegen im BE. Damit hat jeder seine eigene Auswahl lokal.
btw eine Harke ist ein Gartengerät, als harken deine User nichts an, sondern sie haken es an.
@ Wuliwurm... klingt erstmal interessant.. Ungebundenes Recordset sagt mir erstmal nix. Muss ich mich mal einlesen aber vielleicht kannst Du mir mal einen Tipp geben, wie man das erstellt. Wäre es auch hier möglich die Daten wie in einem Endlosformular untereinander auszugeben? Wie wird ein Bolean Feld erstellt und wie binde ich es an eine Checkbox an? Du siehst, mit dem von Dir angesprochenen Thema kenne ich mich noch gar nicht aus und würde mich freuen, wenn Du mir hier ein bisschen hilfst.
@ el_gomero:
Besten Dank auch Dir. Das kommt davon, wenn man nur die Gartenarbeit im Sinn hat ;D
Meine DB ist in FE und BE aufgeteilt. Der Nachteil Deiner Variante ist, dass ich dann den Produktkatalog nicht zentral bearbeiten/verändern kann. Dies muss aber gewährleistet sein.
so wie ich das verstanden hatte, soll der Benutzer eine Auswahl treffen und diese dann für seinen Druck verwenden. Daher müsste die Auswahl lokal abgelegt werden. Es sollte reichen eine lokale Tabelle mit den FK und dem Auswahlfeld vorzuhalten. Dann kann am Server alles weiter gepflegt werden.
hth
Hallo,
ZitatDies muss aber gewährleistet sein.
erstelle eine lokale Tabelle mit zwei Feldern für den PK-Wert aus dem Produktkatalog und dem "Harken" ;-)
Übertrage (Insert) den Produktkatalog in die lokale Tabelle.
Mit einer 1:1 verknüpfenden Abfrage über beide Tabellen kann jetzt der individuelle Produktkatalog geharkt ( ;-) ) und weiter bearbeitet werden.
Lediglich beim Hinzufügen von neuen Produkten muss die Insert-Abfrage erneut ausgeführt werden.
Zitat von: datekk am März 29, 2016, 11:07:09
Wäre es auch hier möglich die Daten wie in einem Endlosformular untereinander auszugeben? Wie wird ein Bolean Feld erstellt und wie binde ich es an eine Checkbox an?
Gerne füge ich ein Beispiel bis heute nachmittag an. Ist keine Raketenwissenschaft und lohnt sich, sich da einzuarbeiten.
@ el_gomero: FK? Was meinst Du damit? Die Auswahl müsste in jedem Fall zentral abgelegt werden.
@ DF6GL: Mit PK Wert meinst Du die jeweilige Eintrags ID? Also alle IDs in eine lokale Tabelle kopieren und dahinter die ChkBox? Das könnte klappen. Beim Start der DB könnte ja z.B. die lokale Tabelle automatisch aktualisiert werden, oder ich hinterlege im "zentralen" Katalog ein Aktualisierungsdatum welches sich mit den lokalen Daten abgleicht und bei Abweichung eine Aktualisierung vornimmt. Eine Abfrage fügt dann lokale Auswahl mit dem zentralen Katalog zusammen. Über eine Insert Into Anweisung müsste ich dann die Abfrageergebnisse in die zentrale Angebotsinhalte-Tabelle übertragen können. Oder?
@ wuliwurm: ich freu mich drauf :)
mit FK meinte ich den Fremdschlüssel (Foreign-Key), wobei das eigentlich der PK (primary-Key) der Grundtabelle ist. Der Vorschlag von Franz und mir ist identisch ;)
Anbei ein Minimalbeispiel. Es gibt eine Tabelle mit zwei Feldern (ID und Bezeichnung), diese Tabelle entspricht der Originaltabelle. Es wird ein ungebundenes Recordset erzeugt, welches zusätzlich zu den beiden Felder noch ein Boolean-Feld hat. In einer Schleife wird das ungebundene Recordset gefüllt und anschließend die Daten im Formular dargestellt.
Das ungebundene Recordset hat keine Verbindung zur Datenquelle mehr und kann beliebig verändert werden, es kann auch keine Schreib/Lesekonflikte mehr geben. Es existiert nur im Hauptspeicher, um die getroffene Auswahl zu materialisieren in einer Tabelle, braucht es wieder SQL mit "INSERT INTO".
Danke Wuliwurm.. Jetzt habe ich erstmal was zu tun ;) Ist ein völlig neues Feld für mich.
Hallo Wuliwurm, ich wollte mich mal kurz zurück melden. Ich habe mich in den vergangenen Tagen und am Wochenende mal mit der Thematik beschäftigt und bin nun soweit, Deinen Code zu verstehen. Die Datenübernahme habe ich wie folgt gestaltet:
Public Sub TesteRecordset2(ByRef rsU As ADODB.Recordset)
Dim i As Integer
Dim sql As String
Dim strBez As String
rsU.MoveFirst
Do Until rsU.EOF
If rsU!Auswahl = True Then
strBez = rsU!Bezeichnung
sql = "INSERT INTO tblAufnahme (Bezeichnung) VALUES ('" & strBez & "')"
DoCmd.RunSQL sql
End If
rsU.MoveNext
Loop
End Sub
Ist es richtig, dass man den Recordsets immer mit einer Schleife ansprechen muss oder kann man auf dieses direkt in der Insert Into Anweisung wie auf eine Tabelle zugreifen? Wenn ja, wie?
Zitat von: datekk am April 11, 2016, 10:56:38
Ist es richtig, dass man den Recordsets immer mit einer Schleife ansprechen muss oder kann man auf dieses direkt in der Insert Into Anweisung wie auf eine Tabelle zugreifen? Wenn ja, wie?
Ich gehe immer in einer Schleife durch. Möglich, daß es Alternativen gibt, die habe ich aber nie ausprobiert.
Du könntest noch eine Zwischenstufe einbauen, und die SQL-Befehle in ein String-Array zwischenspeichern, und dieses Array dann als Eingabeparameter an eine extra Prozedur in einem Modul übergeben.
Ok... also vielen Dank erstmal. Damit kann ich arbeiten :)
.::gelöst::.