Deutsch
Forum

DBase Datenbanken - ähnliche Datensätze in einer Schleife aus verschiedenen Datenbanken l&

 
- Seite 1 -



holmol93
Hallo miteinander

Hier ist mir ja schon erstklassig bei meiner ersten Frage geholfen worden und auch wenn ich langsam aber sicher immer mehr hinter das ganze Thema steige, stehe ich doch mal wieder vor einem, für mich, unlösbaren Problem.

Zum Aufbau meines Programmes:
Es ist ein Programm um eine Schule zu verwalten. Für mich ein Projekt um ein paar Dinge dazuzulernen.
Lehrer und Schüler haben eigene Benutzerkonten, Funktionen und Rollen (zB. "Klassenlehrer";"Schulleiter","Klassensprecher") können verteilt werden und es gibt eine Rechteverwaltung, in welcher man den Benutzern auf ihren Accounts gewisse Lese und Schreibrechte beschränken kann.

Es gibt im Hintergrund verschiedene Datenbanken. Eine mit Benutzerdaten (Adresse,Alter,Rolle,Passwort,Name,Benutzername), eine mit den zugeteilten Rechten. Dazu hat jede Person ein eigenes Datenbankfile, was von der Software automatisch erstellt wird. Bei Lehrern enthält es die Klassen, die ihm zugeteilt wurden nach dem Schema "KLASSE","SCHÜLERNAME","FACH", bei den Schülern ihre Noten und Absenzen, nach dem Schema "LEHRER","FACH","NOTE", bzw: "ABSENZ"....

Jetzt soll es eine Funktion geben um Benutzerdaten zu ändern und Benutzer zu löschen.
Wenn ich einen Benutzer lösche, muss ich seinen Eintrag aus der Benutzerdatenbank, aus der Rechtedatenbank und sein eigenes DB File entfernen. Das klappt problemlos.

Jetzt wird den Lehrern aber in der Notenübersicht immer noch eine "Leiche" mit dem gelöschten Schülernamen angezeigt, da dieser ja im jeweiligen DB File des Lehrers mitverlinkt ist.

Diesen muss ich also herauslöschen.

Ich habe mir folgendes überlegt:
Das Programm liest in der Schülerdatenbank die Namen der Lehrer aus, die ihm Noten oder Absenzen eingetragen haben -> Fachlehrer.
Dann öffnet es das jeweilige DB File mit dem Lehrernamen und löscht alle Einträge in welcher der Name des Schülers vorkommt. Das muss mehrmals in Schleife passieren, da es ja mehrere Lehrer sind und ein Lehrer zT auch 2 Fächer unterrichten kann.

In meiner Schleife löscht es aber immer nur den Namen des Schülers aus der Datenbank des ersten Lehrers, der ihm eine Note gegeben hat und ich bin echt ratlos... Der Code (nicht lauffähig) sieht so aus:
db ("open",#1,dbuserdata$)' öffnet die Benutzerdatenbank
db ("use",#1)
db ("seek","USERNAME",personausw$,2)' sucht den Namen des Schülers
db ("delete")' löscht ihn
db ("pack")
db ("close",#1)
db ("open",#2,dbrechte$)' öffnet die Rechtedatenbank
db ("use",#2)
db ("seek","USERNAME",personausw$,2)' sucht den Schüler
db ("delete")' löscht seinen Eintrag
db ("pack")
db ("close",#2)
db ("open",#3,dbpendenzen$)' öffnet die Datenbank für das Logfile
db ("AppendBlank")
db ("put","AN","SUPER-T")' hinterlässt einen Logileeintrag für das Löschen des Schülers
db ("put","MESSAGE",dt("getdate",6)+" "+trim$(benutzer$)+" // löscht Schüler "+trim$(personausw$))
db ("putrec",0)
db ("pack")
db ("close",#3)
db ("open",#4,"C:\XProfanX2\Datenbanken\"+trim$(personausw$)+".DBF")' öffnet die eigene DB des Schülers
db ("use",#4)

Whilenot %dbEof

    satznr&= &dbreccount' Anzahl Datensätze insgesamt
    db ("use",#4)
    db ("go","Top")

    If Satznr& > 0

        lehrer$=db("get","LEHRER")' Holt sich einen Lehrernamen
        db ("open",#5,"C:\XProfanX2\Datenbanken\"+trim$(lehrer$)+".DBF")' öffnet die DB mit dem Namen des Lehrers
        db ("use",#5)

        whilenot %dbEof

            satznr2&=db ("seek","SCHUELER",personausw$,2)' sucht den Namen des Schülers

            if satznr2& > 0

                db ("delete")' löscht den Datensatz
                db ("pack")
                db ("close",#5)

            Endif

            db("go","Next")

        endwhile

    Endif

    db("go","Next")

endwhile

db ("close",#4)

Wär cool, wenn mal jemand drüberschauen könnte... Ich glaube ich schnall irgendwas beim Ablauf der Schleife nicht :O

Grüessli

Danny
 
06.05.2013  
 



« Dieser Beitrag wurde als Lösung gekennzeichnet. »

- Seite 2 -



Thomas
Freier
Mit der pcu ging's. Sollte jetzt aber auch mit X2 möglich sein oder täusche ich mich?
 $H Windows.ph
DECLARE MENU&,MENU2&
 $U DLGMENU.PCU=MENU.
WINDOWSTYLE 4+8
CLS
BUILDMENU2 %hwnd
BUILDMENU %hwnd
var menu%=1

WHILENOT (%KEY=2)

    WAITINPUT

    IF (ABS(%MENUITEM)=104) OR (ABS(%MENUITEM)=204)

        BREAK

    ENDIF

    If (ABS(%MENUITEM)=102)

        ~SetMenu(%hwnd,0)
        ~DrawMenuBar(%hwnd)
        ~SetMenu(%hwnd,menu2&)
        ~DrawMenuBar(%hwnd)

    ElseIf (ABS(%MENUITEM)=202)

        ~SetMenu(%hwnd,0)
        ~DrawMenuBar(%hwnd)
        ~SetMenu(%hwnd,menu&)
        ~DrawMenuBar(%hwnd)

    EndIf

WEND

END

PROC BUILDMENU

    PARAMETERS DLG&
    MENU&=MENU.NEW(DLG&)
    MENU.SETNICEBACKGROUND
    MENU.POPUP "&Datei"
    MENU.APPENDMENU 100,"Neu"
    MENU.APPENDMENU 101,"Öffnen"
    MENU.APPENDMENU 102,"Menü 2"
    MENU.APPENDMENU 104,"Beenden"

endproc

PROC BUILDMENU2

    PARAMETERS DLG&
    MENU2&=MENU.NEW(DLG&)
    MENU.SETNICEBACKGROUND
    MENU.POPUP "&Dokument"
    MENU.APPENDMENU 200,"Speichern"
    MENU.APPENDMENU 201,"Drucken"
    MENU.APPENDMENU 202,"Menü 1"
    MENU.APPENDMENU 204,"Beenden"

endproc


383 kB
Hochgeladen:10.05.2013
Ladeanzahl132
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
10.05.2013  
 



 
- Seite 1 -


Sorry, ich weiß scheinbar garnicht genau welche Leiste Du meinst.

Vlt. mal einen Screenshot zeigen, einfach an Beitrag anhängen.
 
08.05.2013  
 




holmol93


Heyho

Stimmt, hätt ich grad von Anfang an mitschicken können *g*

Ich glaube auch nicht, das es viele gibt, die diese Möglichkeit suchen

Aber wie du siehst, unterscheidet sich je nach dem, welche Rechte der Benutzer hat, das Menü oben.
Wenn ich die meinen Logoutvorgang so einbaue, dass ich einfach das Menü neu aufbauen lasse, sind zum Teil danach Menüpunkte doppelt. Oder ein Lehrer, der sich einloggt, nach dem der Schulleiter eingeloggt war, hat plötzlich neben seinem Menü auch noch Zugriff aufs Master oO

Deshalb möcht ich die Leiste "löschen" und neu initialisieren lassen

Die Menüpunkte werden über If- Anweisungen aus und eingeblendet. Nach dem Motto, Wenn Recht SoundSo vorhanden -> zeige "Funktionen.Master" usw...

Greetz,

Danny

175 kB
Kurzbeschreibung: Screenshot der Menüleisten
Hochgeladen:08.05.2013
Ladeanzahl1151
Herunterladen
 
08.05.2013  
 




Thomas
Freier
Also für jede Gruppe ein eigenes Menü? Das könnte auf einem Dialog sein und dann das Zutreffende einblenden. Oder siehe [...] 
Einfach die Quelltexte einmal durchstöbern.
 
Gruß Thomas
Windows XP SP2, XProfan X2
08.05.2013  
 




H.Brill
Nah siehste, jetzt weißt du auch, was mit Datenbank-Normalisierung
gemeint ist.
Wenn es ein normales Menü ist, könnte man doch ein komplettes
Menü anzeigen und je nach Rechten, mit EnableMenu die einzelnen
Auswahlpunkte deaktivieren bzw. aktivieren.

So, nun muß ich zur Arbeit.
 
Benutze XPROFAN X3 + FREEPROFAN
Wir sind die XProfaner.
Sie werden von uns assimiliert.
Widerstand ist zwecklos!
Wir werden alle ihre Funktionen und Algorithmen den unseren hinzufügen.

Was die Borg können, können wir schon lange.
08.05.2013  
 



 
- Seite 2 -



E.T.
... oder halt ein externes Menü nutzen...
... und dann UseExtMenu...

da kann man schön zwischen den Menüs hin- und her wechseln
 
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
08.05.2013  
 




holmol93
Hallo zusammen,

habe mal ein paar Möglichkeiten durchprobiert, aber nichts funktioniert so, wie es soll

Überlegung ist:
Eine Person meldet sich an und das Menü passt sich je nach ihren Benutzerrechten an. Das klappt.
Was nicht klappt:
Es gibt eine Logoutfunktion, welche einen Benutzer neu authentifiziert und die Rechte (auch fürs Menü) neu zuteilt.
Wenn ich das Menü danach einfach noch einmal neu erstelle, habe ich gewisse Menüpunkte doppelt, nämlich noch die von der Vorperson. Macht man das ein paar Mal hat man ein 3-Zeiliges Menü...

Ausblenden und wieder einblenden bringt nichts, da alles ein Menü ist, in dem gewisse "AppendMenu" Punkte mit If-Then-Else ausgeblendet sind. Die bleiben beim Wiedereinblenden im gleichen Status... Also in dem, von der Person, die sich als erstes angemeldet hat.

Wenn ich das Menü mit Destroymenu(%HWnd) zerstöre, verschwindet es zwar, aber ich kann es danach nicht noch einmal neu laden (ist bei mir eine Prozedur.). Fehlermeldung: "Fehler beim erstellen des Menüs."

What can I do?

Das ist das einzige Problem, was ich von Anfang an nicht lösen konnte... Jetzt hat mein Programm soweit alle Funktionen und ich habe das bis zum Schluss aufgeschoben und brings einfach nicht zum laufen... es muss doch da irgend einen Weg geben, das bestehende Menü entweder noch einmal neu zu laden ohne doppelte und dreifache Menüpunkte oder es zu löschen und noch einmal ganz neu zu "definieren"...

Ich weiss, mein Problem ist ein Luxusproblem xD Klar könnt ich die Menüpunkt einfach "ausgrauen", aber es gibt gewisse Sachen, da möchte ich einfach nicht, dass jemand, der kein Recht hat sie zu sehn, sie sieht Und was bringt es dem Schüler, wenn er auch noch die Menüpunkte der Lehrer sieht xD
 
10.05.2013  
 



Schau mal, Dir könnte die dlgmenu helfen:  [...]  -

zwar schon alt aber Code ist bei.
 
10.05.2013  
 




Thomas
Freier
Mit der pcu ging's. Sollte jetzt aber auch mit X2 möglich sein oder täusche ich mich?
 $H Windows.ph
DECLARE MENU&,MENU2&
 $U DLGMENU.PCU=MENU.
WINDOWSTYLE 4+8
CLS
BUILDMENU2 %hwnd
BUILDMENU %hwnd
var menu%=1

WHILENOT (%KEY=2)

    WAITINPUT

    IF (ABS(%MENUITEM)=104) OR (ABS(%MENUITEM)=204)

        BREAK

    ENDIF

    If (ABS(%MENUITEM)=102)

        ~SetMenu(%hwnd,0)
        ~DrawMenuBar(%hwnd)
        ~SetMenu(%hwnd,menu2&)
        ~DrawMenuBar(%hwnd)

    ElseIf (ABS(%MENUITEM)=202)

        ~SetMenu(%hwnd,0)
        ~DrawMenuBar(%hwnd)
        ~SetMenu(%hwnd,menu&)
        ~DrawMenuBar(%hwnd)

    EndIf

WEND

END

PROC BUILDMENU

    PARAMETERS DLG&
    MENU&=MENU.NEW(DLG&)
    MENU.SETNICEBACKGROUND
    MENU.POPUP "&Datei"
    MENU.APPENDMENU 100,"Neu"
    MENU.APPENDMENU 101,"Öffnen"
    MENU.APPENDMENU 102,"Menü 2"
    MENU.APPENDMENU 104,"Beenden"

endproc

PROC BUILDMENU2

    PARAMETERS DLG&
    MENU2&=MENU.NEW(DLG&)
    MENU.SETNICEBACKGROUND
    MENU.POPUP "&Dokument"
    MENU.APPENDMENU 200,"Speichern"
    MENU.APPENDMENU 201,"Drucken"
    MENU.APPENDMENU 202,"Menü 1"
    MENU.APPENDMENU 204,"Beenden"

endproc


383 kB
Hochgeladen:10.05.2013
Ladeanzahl132
Herunterladen
 
Gruß Thomas
Windows XP SP2, XProfan X2
10.05.2013  
 




holmol93
hey IF&Thomas

Merci für Eure Antworten. Werde es daheim grad mal ausprobieren

Also ich habe ja XProfan X2 aber damit ist (soweit ich es feststellen konnte) nichts
Vergleichbares möglich... Habe rumprobiert und etwas ist garantiert immer schief gegangen...

Ich berichte morgen mal drüber, ob es geklappt hat

Greetz,

Danny
 
10.05.2013  
 




Thomas
Freier

Also ich habe ja XProfan X2 aber damit ist (soweit ich es feststellen konnte) nichts
Vergleichbares möglich.


Doch. Wechselmenüs unter 29.1.3 - CreateMenu, AppendMenu, SetMenu und DestroyMenu
 
Gruß Thomas
Windows XP SP2, XProfan X2
11.05.2013  
 




E.T.

...
Es gibt eine Logoutfunktion, welche einen Benutzer neu authentifiziert und die Rechte (auch fürs Menü) neu zuteilt.
...


Also Logout  heist m.E., das der akt. Benutzer abgemeldet und niemand mehr angemeldet ist. Also Benutzer abmelden, das Menü komplett zestören und dann im Programm ein Standard - Menü mit einer Login - Funktion setzen.

So wie du das beschreibst, ist es eher ein "Benutzer wechseln". Ich denke, da geraten die Menü's durcheinander. Würde ich eher den Benutzer komplett abmelden vom Programm, Standard-Menü setzen und ggf. bei einem klick auf z.B. einen Button "Benutzer wechseln"  gleich wieder eine Auswahl für reg. Benutzer anbieten.

Und dann das Menü je nach Rechten wieder "zusammenbauen" und anzeigen...
 
XProfan X2
Grüße aus Sachsen... Mario
WinXP, Win7 (64 Bit),Win8(.1),Win10, Win 11, Profan 6 - X4, XPSE, und 'nen schwarzes, blinkendes Dingens, wo ich das alles reinschütte...
11.05.2013  
 




holmol93
Hallo miteinander!

Habe mein Menü auf die Alternative Möglichkeit mit der Unit angepasst... Funktioniert! Ich kann das Menü jederzeit zerstören und neu aufbauen, ohne Fehlermeldung! Genial.

@Mario,

Jap, genau so verstehe ich Logout eigentlich auch Ich hab mich anfangs an unserem Datenbanksystem im Geschäft orientiert, auf dem man sich nur mit einem Passwort authentifiziert. Sobald man auf "Logout" geht, kommt sofort ein Logindialog, zum schnellen Benutzerwechsel.
Habe es jetzt allerdings so angepasst, wie du vorgeschlagen hast:
2 Menüs. Eins mit allen Funktionen und Funktionen werden nach Rechten angezeigt und ausgeblendet und eines, was nach einem Logout angezeigt wird und wo man nur die Optionen "Beenden" und "Anmelden" hat.

Funzt problemlos ;) Damit ist jetzt auch endlich die Funktion "Als Benutzer ausgeben" möglich geworden ;)

Gruess aus Bern und noch einen schönen Sonntagnachmittag!
 
12.05.2013  
 




Antworten


Thementitel, max. 100 Zeichen.
 

Systemprofile:

Kein Systemprofil angelegt. [anlegen]

XProfan:

 Beitrag  Schrift  Smilies  ▼ 

Bitte anmelden um einen Beitrag zu verfassen.
 

Themenoptionen

21.998 Betrachtungen

Unbenanntvor 0 min.
Manfred Barei08.10.2023
Member 007717917.10.2018
RudiB.27.08.2018
Ernst01.06.2016
Mehr...

Themeninformationen



Admins  |  AGB  |  Anwendungen  |  Autoren  |  Chat  |  Datenschutz  |  Download  |  Eingangshalle  |  Hilfe  |  Händlerportal  |  Impressum  |  Mart  |  Schnittstellen  |  SDK  |  Services  |  Spiele  |  Suche  |  Support

Ein Projekt aller XProfaner, die es gibt!


Mein XProfan
Private Nachrichten
Eigenes Ablageforum
Themen-Merkliste
Eigene Beiträge
Eigene Themen
Zwischenablage
Abmelden
 Deutsch English Français Español Italia
Übersetzungen

Datenschutz


Wir verwenden Cookies nur als Session-Cookies wegen der technischen Notwendigkeit und bei uns gibt es keine Cookies von Drittanbietern.

Wenn du hier auf unsere Webseite klickst oder navigierst, stimmst du unserer Erfassung von Informationen in unseren Cookies auf XProfan.Net zu.

Weitere Informationen zu unseren Cookies und dazu, wie du die Kontrolle darüber behältst, findest du in unserer nachfolgenden Datenschutzerklärung.


einverstandenDatenschutzerklärung
Ich möchte keinen Cookie