Inhalte einer DB auf Beamer scrollen
Moderator: Moderatoren
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Inhalte einer DB auf Beamer scrollen
Hallo,
ich möchte verschiedene Inhalte einer Datenbank auf einem Beamer scrollend darstellen.
Es sind einige-100 Datensätze, die regelmäßig aktualisiert werden.
Die Anzahl der Datesätz ändert sich nicht, sondern nur deren Inhalt.
Die Darstellung soll fortlaufend aktualisert, als Endlosschleife laufen.
Meine Idee dazu wäre es
1. die Datenbank in eine eine temporärte Datenbank kopieren -> edit: ist vermutlich nicht nowendig, wozu?
2. den Inhalt der Datenbank in eine Listbox einlesen
3. den Listboxinhalt "scrollend" anzeigen
4. wenn alles durch ist wieder mit 1. beginnen
Damit wäre das mit dem Aktualisieren eigenlich erledigt - nur wie kann ich die Listbox "scrollend " auf dem Monitor bzw. Beamer anzeigen?
Hat vielleicht jemand schon etwas in dieser Art gemacht und kann mir Tipps dazu geben?
ich möchte verschiedene Inhalte einer Datenbank auf einem Beamer scrollend darstellen.
Es sind einige-100 Datensätze, die regelmäßig aktualisiert werden.
Die Anzahl der Datesätz ändert sich nicht, sondern nur deren Inhalt.
Die Darstellung soll fortlaufend aktualisert, als Endlosschleife laufen.
Meine Idee dazu wäre es
1. die Datenbank in eine eine temporärte Datenbank kopieren -> edit: ist vermutlich nicht nowendig, wozu?
2. den Inhalt der Datenbank in eine Listbox einlesen
3. den Listboxinhalt "scrollend" anzeigen
4. wenn alles durch ist wieder mit 1. beginnen
Damit wäre das mit dem Aktualisieren eigenlich erledigt - nur wie kann ich die Listbox "scrollend " auf dem Monitor bzw. Beamer anzeigen?
Hat vielleicht jemand schon etwas in dieser Art gemacht und kann mir Tipps dazu geben?
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Inhalte einer DB auf Beamer scrollen
hi,
bei Listbox oder Browse würde ich einen Thread verwenden.
bei einer Listbox gibt es o:NumItems() als EOF
bei einer DBF / Browse muss man darauf achten das der Thread in einem anderen Workspace arbeitet d.h. er sieht die DBF nicht
bei Listbox oder Browse würde ich einen Thread verwenden.
bei einer Listbox gibt es o:NumItems() als EOF
Code: Alles auswählen
oListbox := oListBox := XbpListbox():new(Da ,, {300, 100}, {200, 150} )
...
oListBox:create()
oListBox:addItem( ...)
...
oThread:setInterval(100) // jede Sekunde
oThread:start( "showList", oListbox )
* ------------------------------------ *
PROCEDURE ShowList(oListbox)
LOCAL iMax := oListbox:NumItems()
STATIC nLast := 0
nLast ++
IF nLast > iMax
nLast := 1
ENDIF
oListbox:SetData({nLast})
RETURN
gruss by OHR
Jimmy
Jimmy
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Inhalte einer DB auf Beamer scrollen
Vielen Dank,
funtioniert prima
Jetzt muss ich mich nur noch mit den Presentations-Parametern und den TabStops der ListBox befassen.
PS: in deinem Code fehlt
funtioniert prima
Jetzt muss ich mich nur noch mit den Presentations-Parametern und den TabStops der ListBox befassen.
PS: in deinem Code fehlt
Code: Alles auswählen
oThread := Thread():New()
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Inhalte einer DB auf Beamer scrollen
Da ich bisher weder mit Threads noch mit verschiedenen Workspace gearbeitet habe tue ich mir damit sehr schwer.
Ich will eigentlich etwas ganz einfaches:
- in meinem Hauptprogramm (Thread-1) ist eine DBF shared geöffnet
- in dem Anzeigethread (Thread-2) soll ein Teil dieser DBF regelmäßig in eine tmp-Datenbank kopiert werden, woraus dann die Anzeige in der Listbox generiert wird.
Ich "merke" mir dazu den Alias der geöffneteten DB und öffne diese im 2. Thread ebenfalls shared.
Damit scheine ich aber etwas falsch zu machen, denn es knallt regelmäßig in einem der beiden Threads...
- AUGE_OHR
- Marvin
- Beiträge: 12913
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 46 Mal
Re: Inhalte einer DB auf Beamer scrollen
hi,
deshalb kann man NICHT aus einem Thread von einer DBF in einen anderen Thread "schreiben/lesen"
---
Ich arbeite gerne mit UserDef Event d.h. ich definiere selbst einen Event.
einen Event kann ich über verschiedene Thread schicken
Thread2 :
Thread1 :
ich schicke die Auswahl ( RECNO() ) des 2nd Thread an den 1st Thread wo dann eine Aktion in "dem" Thread ausgeführt wird.
jeder Thread hat seine eigne Workspace d.h. wenn muss man die selbe DBF im SHARE Modus betreiben.
deshalb kann man NICHT aus einem Thread von einer DBF in einen anderen Thread "schreiben/lesen"
---
Ich arbeite gerne mit UserDef Event d.h. ich definiere selbst einen Event.
einen Event kann ich über verschiedene Thread schicken
Code: Alles auswählen
#define MyGotToRec xbeP_User + 1
Code: Alles auswählen
Postappvent(MyGotToRec, Thread2->(RECNO()),,oThread1)
Code: Alles auswählen
nEvent := 0
DO WHILE !lExit
nEvent := APPEVENT( @mp1, @mp2, @oXbp )
DO CASE
CASE nEvent == MyGotToRec
SyncMyDBF(mp1)
gruss by OHR
Jimmy
Jimmy
- Werner_Bayern
- Der Entwickler von "Deep Thought"
- Beiträge: 2128
- Registriert: Sa, 30. Jan 2010 22:58
- Wohnort: Niederbayern
- Hat sich bedankt: 30 Mal
- Danksagung erhalten: 75 Mal
Re: Inhalte einer DB auf Beamer scrollen
Warum so umständlich?peternmb hat geschrieben: ↑Do, 27. Dez 2018 16:34 - in dem Anzeigethread (Thread-2) soll ein Teil dieser DBF regelmäßig in eine tmp-Datenbank kopiert werden, woraus dann die Anzeige in der Listbox generiert wird.
Ich "merke" mir dazu den Alias der geöffneteten DB und öffne diese im 2. Thread ebenfalls shared.
Du hast hier sicherlich nicht mehrere GB an Daten, die der 2. Thread mit einem Aufruf anzeigen soll? Übergib dem Thread halt einfach - z. B. per Array - die anzuzeigenden Daten. Dann brauchst keine Daten in temporäre DBFs hin- und herschaufeln. Geht viel schneller, eleganter und sicherer.
es grüßt
Werner
<when the music is over, turn off the lights!>
Werner
<when the music is over, turn off the lights!>
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Inhalte einer DB auf Beamer scrollen
Ja, war auch meine erste Idee, aberWerner_Bayern hat geschrieben: ↑Do, 27. Dez 2018 23:49 Warum so umständlich?
Du hast hier sicherlich nicht mehrere GB an Daten, die der 2. Thread mit einem Aufruf anzeigen soll? Übergib dem Thread halt einfach - z. B. per Array - die anzuzeigenden Daten. Dann brauchst keine Daten in temporäre DBFs hin- und herschaufeln. Geht viel schneller, eleganter und sicherer.
- auch um das Array regelmäßig zu aktualisieren müsste ich doch ebenfalls auf die Datenbank in Thread 1 zugreifen
- die temporäre Datenmbank wird mit verschiedenen - auch in anderen Bereichen genutzten - Funktionen bearbeitet, die ich dann alle auf Array umschreiben müsste
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Inhalte einer DB auf Beamer scrollen
es muss doch möglich sein, die im Thread 1 shared geöffnete DBF auch im Thread 2 shared zu öffnen.
Um die DBF zu kopieren muss ich diese ja nicht exclusiv öffen.
Bei meinem Programm ist diese DBF immer shared geöffnet, bei Schreiboperationen werden nur die entsprechenden Datensätze kurz gesperrt.
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Inhalte einer DB auf Beamer scrollen
Peter,
selbstverständlich kannst Du die gleiche dbf mehrfach shared öffnen. Auch in unterschiedlichen Threads.
Fragt sich nur - warum? Die beiden geöffneten wissen halt nichts voneinander. Wenn DU also z. B. im ersten Thread auf die dbf einen Scope oder Filter setzt, ist der nur im ersten Trhead wirksam. Der zweite weiß da nichts von. Außer Du trickst.
Trotzdem: Warum?
Jan
selbstverständlich kannst Du die gleiche dbf mehrfach shared öffnen. Auch in unterschiedlichen Threads.
Fragt sich nur - warum? Die beiden geöffneten wissen halt nichts voneinander. Wenn DU also z. B. im ersten Thread auf die dbf einen Scope oder Filter setzt, ist der nur im ersten Trhead wirksam. Der zweite weiß da nichts von. Außer Du trickst.
Trotzdem: Warum?
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Inhalte einer DB auf Beamer scrollen
ich möchte, die in meiner Listbox angezeigten Daten vor jedem Füllen aktualisieren.Jan hat geschrieben: ↑Fr, 28. Dez 2018 11:13 Fragt sich nur - warum? Die beiden geöffneten wissen halt nichts voneinander. Wenn DU also z. B. im ersten Thread auf die dbf einen Scope oder Filter setzt, ist der nur im ersten Trhead wirksam. Der zweite weiß da nichts von. Außer Du trickst.
Trotzdem: Warum?
Jan
- dazu mache ich eine Kopie der DBF
- schließe die Orginal-DBF
- bearbeite die DBF-Kopie
- lese die Daten der DBF-Kopie in meine Listbox ein
- wenn alles durchgescrollt wurde beginnt wieder alles von vorne
Ich sehe eigentlich keinen einfacheren Weg, um in meiner Listbox immer die aktuellsten Daten zu zeigen.
Filter, Scopes usw. spielen dabei keinerlei Rolle.
- Tom
- Der Entwickler von "Deep Thought"
- Beiträge: 9394
- Registriert: Do, 22. Sep 2005 23:11
- Wohnort: Berlin
- Hat sich bedankt: 104 Mal
- Danksagung erhalten: 364 Mal
- Kontaktdaten:
Re: Inhalte einer DB auf Beamer scrollen
Es muss doch ein Kriterium dafür geben, welche Daten die aktuellsten sind. Beispielsweise diejenigen am Ende der Tabelle (Erfassungsreihenfolge) oder die mit einer bestimmten Timestamp. So oder so, diese Umkopiererei verstehe ich auch nicht. Wenn ich ein Browse habe, das immer auf dem Ende der Tabelle steht (oder, wenn sich was ändert, dorthin navigiert), dann löst ein :RefreshAll() die :Datalink-Codeblöcke aus und aktualisiert die Tabellenanzeige entsprechend.
Herzlich,
Tom
Tom
- Jan
- Marvin
- Beiträge: 14662
- Registriert: Fr, 23. Sep 2005 18:23
- Wohnort: 49328 Melle
- Hat sich bedankt: 21 Mal
- Danksagung erhalten: 88 Mal
- Kontaktdaten:
Re: Inhalte einer DB auf Beamer scrollen
Peter,
wenn Du partout irgend eine Zwischen-dbf brauchst zur Bearbeitung der Daten vor dem Anzeigen: Warum liest Du die nicht in ein Array ein (geht z. B. sehr einfach und schnell mit SELECT FROM cDbf INTO OBJECTS aObject WHERE filterausdruck), in dem Du die Daten bearbeiten kannst. Und das Du dann in die Listbox überträgst. Wenn Du dieses Array als PUBLIC einrichtest dann mußt Du in Thread 2 nicht die dbf noch mal öffnen inkl. dem ganze Synchronisationszeugs.
Ansonsten finde ich Toms Vorschlag sehr ansprechend. Weil simpel und unkompliziert und übersichtlich.
Jan
wenn Du partout irgend eine Zwischen-dbf brauchst zur Bearbeitung der Daten vor dem Anzeigen: Warum liest Du die nicht in ein Array ein (geht z. B. sehr einfach und schnell mit SELECT FROM cDbf INTO OBJECTS aObject WHERE filterausdruck), in dem Du die Daten bearbeiten kannst. Und das Du dann in die Listbox überträgst. Wenn Du dieses Array als PUBLIC einrichtest dann mußt Du in Thread 2 nicht die dbf noch mal öffnen inkl. dem ganze Synchronisationszeugs.
Ansonsten finde ich Toms Vorschlag sehr ansprechend. Weil simpel und unkompliziert und übersichtlich.
Jan
Mitglied der XUG Osnabrück
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
Mitglied der XUG Berlin/Brandenburg
Mitglied des Deutschsprachige Xbase-Entwickler e. V.
-
- Rekursionen-Architekt
- Beiträge: 162
- Registriert: So, 16. Apr 2006 11:12
- Wohnort: Öhringen
- Danksagung erhalten: 1 Mal
Re: Inhalte einer DB auf Beamer scrollen
Hallo.
Vielleicht verstehe ich das Problem nicht richtig, aber wir haben ein ähnliches Problem schon mal so gelöst.
Z. B. eine Kundendatei.
Hauptprogramm (main)
select 1 // Selectbereiche im Hauptprogramm habe ich kleiner 100
use kunden shared
arbeite an der Kundendatei, öffne schließe, wenn notwendig auch kurzzeitig exclusive
******************************************************
Thread1
do while .t.
select 101 // extra Workspace habe ich selectbereiche > 100 damit es keine Konflikte gibt.
use kunden shared
if filelock loop ( falls mal das Hauptprogramm die Datei kurzzeitig exclusive benötigt dann zeigen wir einfach die alten daten an
kopiere jeden record in das array
use // falls die Datenbank nicht offen sein soll
Zeige daten auf beamer
sleep(Wartezeit)
nGlobalTimerThread1++ // habe ich zum überwachen ob der Thread auch noch läuft. Wenn Wert immer gleich dann ist der Thread nicht mehr aktiv.
if lGlobalExitAlleThread // habe ich als Kenner damit ich den Thread vom Hauptprogramm kontrolliert beenden kann.
exit
endif
enddo
Damit müssen innerhalb der Thread keine Nachrichten ausgetauscht werden. Das Array könnte auch Global sein, so das lesend alle
Threads die aktuellen Daten haben.
Kann man so sehen, als ob es zwei völlig getrennte Programme (exe) sind.
Gruß
Bernd
Vielleicht verstehe ich das Problem nicht richtig, aber wir haben ein ähnliches Problem schon mal so gelöst.
Z. B. eine Kundendatei.
Hauptprogramm (main)
select 1 // Selectbereiche im Hauptprogramm habe ich kleiner 100
use kunden shared
arbeite an der Kundendatei, öffne schließe, wenn notwendig auch kurzzeitig exclusive
******************************************************
Thread1
do while .t.
select 101 // extra Workspace habe ich selectbereiche > 100 damit es keine Konflikte gibt.
use kunden shared
if filelock loop ( falls mal das Hauptprogramm die Datei kurzzeitig exclusive benötigt dann zeigen wir einfach die alten daten an
kopiere jeden record in das array
use // falls die Datenbank nicht offen sein soll
Zeige daten auf beamer
sleep(Wartezeit)
nGlobalTimerThread1++ // habe ich zum überwachen ob der Thread auch noch läuft. Wenn Wert immer gleich dann ist der Thread nicht mehr aktiv.
if lGlobalExitAlleThread // habe ich als Kenner damit ich den Thread vom Hauptprogramm kontrolliert beenden kann.
exit
endif
enddo
Damit müssen innerhalb der Thread keine Nachrichten ausgetauscht werden. Das Array könnte auch Global sein, so das lesend alle
Threads die aktuellen Daten haben.
Kann man so sehen, als ob es zwei völlig getrennte Programme (exe) sind.
Gruß
Bernd
Bernd Reinhardt
fa.reinhardt@gmx.de
fa.reinhardt@gmx.de
-
- 1000 working lines a day
- Beiträge: 525
- Registriert: Mi, 01. Feb 2006 16:22
- Wohnort: 06618 Naumburg
Re: Inhalte einer DB auf Beamer scrollen
Hallo,
ja, so ähnlich habe ich es jetzt auch gelöst - funktioniert wunderbar.
Die Darstellung der Daten in der Listbox lässt sich auch noch während der Laufzeit problemlos größenmäßig anpassen.
Ich kann das Scrollen anhalten, fortsetzen oder die Geschwindigkeit verändern.
ja, so ähnlich habe ich es jetzt auch gelöst - funktioniert wunderbar.
Die Darstellung der Daten in der Listbox lässt sich auch noch während der Laufzeit problemlos größenmäßig anpassen.
Ich kann das Scrollen anhalten, fortsetzen oder die Geschwindigkeit verändern.