| |
|
|
- page 1 - |
|
holmol93 | allô miteinander
ici c'est moi oui déjà erstklassig chez meiner ersten Frage geholfen worden et si je lente mais sûrement toujours plus derrière cela ganze Thema steige, stehe je doch la fois wieder avant einem, pour mich, unlösbaren Problem.
Zum Aufbau meines Programmes: c'est un Programme um une une école trop verwalten. Pour mich un projet um un paire Dinge dazuzulernen. l'instituteur et Schüler avons eigene Benutzerkonten, Funktionen et Rollen (zB. "Klassenlehrer";"Schulleiter","Klassensprecher") peut verteilt volonté et il y a une Rechteverwaltung, dans quel on den Benutzern sur ihren Accounts gewisse Lese et Schreibrechte beschränken peux.
il y a im Hintergrund verschiedene Datenbanken. une avec Benutzerdaten (Adresse,Alter,rôle,Mot de passe,nom,Benutzername), une avec den zugeteilten Rechten. en supplément hat chacun personne un eigenes Datenbankfile, quoi de qui Software automatisch erstellt wird. chez Lehrern contient es qui Klassen, qui ihm zugeteilt wurden pour dem Schema "KLASSE","SCHÜLERNAME","FACH", chez den Schülern ses Noten et Absenzen, pour dem Schema "LEHRER","FACH","NOTE", bzw: "ABSENZ"....
maintenant soll es une Funktion donner um Benutzerdaten trop changement et Benutzer trop effacer. si je une Benutzer lösche, muss je seinen Eintrag aus qui Benutzerdatenbank, aus qui Rechtedatenbank et son eigenes DB File entfernen. cela klappt problemlos.
maintenant wird den Lehrern mais dans qui Notenübersicht toujours une "Leiche" avec dem gelöschten Schülernamen angezeigt, là cette oui im jeweiligen DB File des Lehrers mitverlinkt ist.
Diesen muss je alors herauslöschen.
j'ai mir folgendes überlegt: cela Programme liest dans qui Schülerdatenbank qui Namen qui l'instituteur aus, qui ihm Noten ou bien Absenzen eingetragen avons -> Fachlehrer. ensuite ouvrez es cela jeweilige DB File avec dem Lehrernamen et löscht alle Einträge dans quel qui nom des Schülers vorkommt. cela muss plusieurs fois dans Boucle passer, là es oui plusieurs l'instituteur sommes et un l'instituteur zT aussi 2 Fächer unterrichten peux.
dans meiner Boucle löscht es mais toujours seulement den Namen des Schülers aus qui banque de données des ersten Lehrers, qui ihm une Note gegeben hat et je suis vraie perplexe... qui Code (pas courir) sieht so aus:
db ("open",#1,dbuserdata$)' ouvrez qui Benutzerdatenbank
db ("use",#1)
db ("seek","USERNAME",personausw$,2)' cherchez den Namen des Schülers
db ("delete")' löscht ihn
db ("pack")
db ("close",#1)
db ("open",#2,dbrechte$)' ouvrez qui Rechtedatenbank
db ("use",#2)
db ("seek","USERNAME",personausw$,2)' cherchez den Schüler
db ("delete")' löscht seinen Eintrag
db ("pack")
db ("close",#2)
db ("open",#3,dbpendenzen$)' ouvrez qui banque de données pour cela Logfile
db ("AppendBlank")
db ("put","AN","SUPER-T")' hinterlässt une Logileeintrag pour cela Effacer 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")' ouvrez qui eigene DB des Schülers
db ("use",#4)
Whilenot %dbEof
satznr&= &dbreccount' Anzahl Datensätze en tout
db ("use",#4)
db ("go","Top")
Si Satznr& > 0
l'instituteur$=db("get","LEHRER")' Holt sich une Lehrernamen
db ("open",#5,"C:\XProfanX2\Datenbanken\"+$ Trim(l'instituteur$)+".DBF")' ouvrez qui DB avec dem Namen des Lehrers
db ("use",#5)
whilenot %dbEof
satznr2&=db ("seek","SCHUELER",personausw$,2)' cherchez den Namen des Schülers
si 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, si la fois quelqu'un drüberschauen pourrait... je crois je schnall irgendwas beim le bout qui Boucle pas :O
Grüessli
Danny |
|
|
| |
|
|
|
« cette Beitrag wurde comme Solution gekennzeichnet. » |
|
Thomas Freier | avec qui pcu ging's. Si maintenant mais aussi avec X2 possible son ou bien täusche je 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) OU (ABS(%MENUITEM)=204)
BREAK
ENDIF
Si (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
FIN
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
|
|
|
| |
|
|
|
|
Thomas Freier | je versuche es einmal. s'il te plaît toujours seulement chez Erfolg effacer. Seek endet beim letzten Datensatz et sollte rien trouvé volonté, pourquoi De toute façon, wird qui dernier Datensatz dans chaque piège gelöscht. KompilierenMarqueSéparationdb ("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) alors comment chez: KompilierenMarqueSéparationsatznr2&=db ("seek","SCHUELER",personausw$,2)' cherchez den Namen des Schülers
si satznr2& > 0
db ("delete")' löscht den Datensatz
db ("pack")
Endif
db ("close",#5)
cela Problem ist sûrement dans diesem partie KompilierenMarqueSéparationl'instituteur$=db("get","LEHRER")' Holt sich une Lehrernamen
db ("open",#5,"C:\XProfanX2\Datenbanken\"+$ Trim(l'instituteur$)+".DBF")' ouvrez qui DB avec dem Namen des Lehrers
db ("use",#5)
whilenot %dbEof
satznr2&=db ("seek","SCHUELER",personausw$,2)' cherchez den Namen des Schülers
si satznr2& > 0
db ("delete")' löscht den Datensatz
db ("pack")
db ("close",#5)
Endif
db("go","Next")
endwhile
Es soll wohl n-la fois qui Schüler beim l'instituteur gesucht volonté. Es wird mais pour dem 1. Fund qui #5=Lehrer.dbf geschlossen. là pouvoir qui Tandis que-Boucle keinen Sinn. Soll mais sûrement plus trouvé volonté, ensuite beim Fund seulement db ("delete")' löscht den Datensatz et pour endwhile qui comme gelöscht markierten Datensätze endgültig effacerdb ("pack") et banque de données schließen. |
|
|
| |
|
|
|
H.Brill | comment je es so beim Darüberfliegen votre Codes so vois, dois du KompilierenMarqueSéparation avant qui Boucle effectuer. cela darf pas dans deine Boucle. je denke la fois, qui qui données toujours im grenier stehen. KompilierenMarqueSéparation je serait es la fois so versuchen : KompilierenMarqueSéparation maintenant avec @db("Pack", ) effacer, DB schließen et récente ouvrir. maintenant devrait qui DB aktuell son. je sais aussi pas, comment sûrement %dbEof dans 2 Schleifen arbeitet. Du müßtest mais dans chacun DB aussi un sogen. Schlüsselfeld avons, avec cela on dans den anderen DBs ensuite aussi qui entsprechenden Einträge effacer peux. là reicht oui déjà un simple num. champ, cela aufsteigend jeden Datensatz numeriert. là fehlt mais XProfan un Join - Befehl en supplément. là wäre arrêt SQL besser approprié. |
|
|
| 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. | 07.05.2013 ▲ |
|
|
|
|
H.Brill | Habe dessus la fois genauer gelesen. là wäre cela Thema banque de données-Nomalisierung important. sommes qui DBs dir vorgegeben ou bien la hâte du vous récente erstellt ? Um Datenredundancen trop tourner autour de, pourrait on überlegen, qui DBs quelque chose umzugestalten. z.B. l'instituteur -> plusieurs Schüler Schüler wäre ensuite un Memofeld, dans dem comme Textzeilen ensuite qui Schüler untereinander stehen. avec MoveListToMem ou bien MoveListToStr ou bien Listboxliste direct peux on très joli qui liste kopieren et y chercher,effacer ou bien Travailler. Evtl. pourrait on aussi Strukturen avec Bereichen# nutzen. chez qui DB qui l'instituteur (super, Schüler, matière) z.B. : Struct l'instituteur = super$(5), matière$(20), Schueler#(400) cela wären 20 Schüler avec je 20 marque
peut-être aider dir solche Überlegungen quelque chose plus. |
|
|
| 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. | 07.05.2013 ▲ |
|
|
|
|
holmol93 | allô miteinander
Merci erstmal, dass son euch dem Thema angenommen avez.
@H.Brill,
dein dernier Beitrag hat mir trop penser gegeben. et comme je qui 2 Lösungen ausprobiert habe et beide mich pas entier zum but geführt avons, ist es mir comment Tomaten de den Augen plaisons: WIESO musste je qui Schülernamen dans qui l'instituteur DB enlever, si doch qui Schülernamen, velours ihrer zugeordneten super déjà im DB File avec den Benutzerdaten liegen oO Es ergibt viel plus Sinn, dans qui l'instituteur DB simple "FACH" et "KLASSE" abzulegen et sich qui Schülernamen qui super parallèle aus dem Benutzer DB File trop holen... Beim Effacer eines Benutzers aus dem BenutzerDB File verschwindet il alors aussi aus den Ansichten qui l'instituteur voila... et une Vorteil bringts encore: si on qui Schülerdaten editiert et dem Schüler une neue super zuweist, muss cela seulement im Benutzer DB File passer et il landet automatisch chez seinen "neuen" Fachlehrern. Sonst hätte on également encore Changements dans den Lehrerfiles vornehmen doit...
Ist maintenant angepasst et fonctionne prima... Frage mich seulement, wieso je là pas de vornherein sur elle gekommen suis...
suis arrêt encore Débutant sur dem région et vorallem dans Bezug sur Datenbanken
Im Grunde fand je Rechteverwaltungen spannend, là unser System im magasin sur Access Aufsetzt et une très genaue Rechteverwaltung hat, et voulais so quelque chose aussi einmal programmieren xD et so ist eigentlich qui concept qui Schulverwaltung entstanden, dans qui on qui Rechte également flexibel zuteilen peux
Merci viel viel la fois pour Eure Aider
... et si je encore une Frage se mettre pourrait, sans un nouveau Thema ouvert trop doit... comment lautet qui Befehl à Menüleiste trop "zerstören", avec cela on vous après récente appel peux?
Greeetz,
Danny |
|
|
| |
|
|
|
| Hi!
Avez- Du peut-être style de fenêtre 16 ? |
|
|
| |
|
|
|
holmol93 | Hallöchen trop so später heure
pas entier par qui Rechteverwaltung stehen gewisse Menüs et Menüpunkte seulement Personen zur Disposition, qui cet avoir raison. Ist aussi ne...aucune Problem, si on cela Programme chaque la fois neustartet, si sich un anderer Benutzer anmeldet. je voudrais mais une Login/Logout Funktion einbauen... et chaque la fois si je simple une neue Passwortabfrage fais et cela Programme qui Rechte zuteilt et qui Menüleiste invite wird cet ensuite doppelt angezeigt ou bien contient Menüpunkte vom Vorbenutzer, qui qui neue pas avons sollte
Pour la fenêtre gibts oui DestroyWindow, gibt es quelque chose ähnliches aussi pour qui Leiste dessus, avec cela on vous effacer et récente aufbauen peux sans dass Menüpunkte doppelt erscheinen?
Greetz, Danny |
|
|
| |
|
|
|
| Sorry, je sais scheinbar garnicht oui c'est ca quelle Leiste Du meinst.
Vlt. la fois une Screenshot montrer, simple à Beitrag anhängen. |
|
|
| |
|
|
|
holmol93 |
Heyho
Stimmt, hätt je grad de Anfang à mitschicken peut *g*
je crois aussi pas, cela es viele gibt, qui cet Possibilité chercher
mais comment tu vois, unterscheidet sich je pour dem, quelle Rechte qui Benutzer hat, cela menu dessus. si je qui meinen Logoutvorgang so einbaue, dass je simple cela menu récente aufbauen lasse, sommes zum partie après Menüpunkte doppelt. ou bien un l'instituteur, qui sich einloggt, pour dem qui Schulleiter eingeloggt était, hat soudain près de seinem menu aussi encore Zugriff aufs Master oO
c'est pourquoi möcht je qui Leiste "löschen" et récente initialisieren laisser
qui Menüpunkte volonté sur Si- Anweisungen aus et eingeblendet. Pour dem Motto, si droite SoundSo vorhanden -> zeige "Funktionen.Master" usw...
Greetz,
Danny |
|
|
| |
|
|
|
Thomas Freier | alors pour chacun Gruppe un eigenes menu? cela pourrait sur einem Dialog son et ensuite cela Zutreffende einblenden. ou bien siehe [...] simple qui Source einmal durchstöbern. |
|
|
| |
|
|
|
H.Brill | près siehste, maintenant savoir du aussi, quoi avec banque de données-Normalisierung gemeint ist. si es un normales menu ist, pourrait on doch un komplettes menu Montrer et je pour Rechten, avec EnableMenu chaque Auswahlpunkte désactiver bzw. aktivieren.
So, eh bien doit je zur travail. |
|
|
| 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 ▲ |
|
|
|
|
E.T. | ... ou bien arrêt un externes menu nutzen... ... et ensuite UseExtMenu...
là peux on joli entre den Menüs hin- et her échanger |
|
|
| 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 ▲ |
|
|
|