| |
|
|
- Página 1 - |
|
holmol93 | ¡Hola miteinander
Hier me está sí ya erstklassig en meiner ersten Cuestión geholfen worden y si yo langsam aber sicher siempre mehr hinter todos Thema steige, stehe Todavía veces otra vez antes una, para mich, unlösbaren Problema.
Zum Aufbau meines Programmes: Es una Programa una Schule a verwalten. Für mich una Projekt en unos pocos Dinge dazuzulernen. Lehrer y Schüler haben propio Benutzerkonten, Características y Rollen (zB. "Klassenlehrer";"Schulleiter","Klassensprecher") puede verteilt y ser lo son una Rechteverwaltung, en welcher uno el Benutzern en ihren Accounts gewisse Lese y Schreibrechte beschränken kann.
Lo son en el Hintergrund verschiedene Datenbanken. Un con Benutzerdaten (Adresse,Alter,Papel,Contraseña,Name,Benutzername), una con el zugeteilten Rechten. Dazu ha jede Person una propio Datenbankfile, de lo que el Software automáticamente erstellt se. En Lehrern enthält lo el Klassen, el ihm zugeteilt fueron después de el Schema "KLASSE","SCHÜLERNAME","FACH", en el Schülern ihre Noten y Absenzen, después de el Schema "LEHRER","FACH","NOTE", o: "ABSENZ"....
Jetzt se lo una Función geben en Benutzerdaten a ändern y Benutzer a löschen. Cuando tengo un Benutzer lösche, muss Yo seinen Eintrag de el Benutzerdatenbank, de el Rechtedatenbank y ser propio DB File entfernen. Das klappt problemlos.
Jetzt se el Lehrern aber en el Notenübersicht siempre ni "Leiche" con el gelöschten Schülernamen adecuado, como dieser sí en el jeweiligen DB File des Lehrers mitverlinkt es.
Diesen muss Yo also herauslöschen.
Yo habe me folgendes überlegt: Das Programa liest en el Schülerdatenbank el Namen el Lehrer de, el ihm Noten oder Absenzen eingetragen haben -> Fachlehrer. Dann öffnet lo el jeweilige DB File con el Lehrernamen y löscht todos Einträge en welcher el Name des Schülers vorkommt. Das muss mehrmals en Bucle passieren, como lo sí mehrere Lehrer son y una Lehrer zT auch 2 Fächer unterrichten kann.
In meiner Bucle löscht lo aber siempre sólo el Namen des Schülers de el Datenbank des ersten Lehrers, el ihm una Note gegeben ha y yo bin echt ratlos... Der Code (no lauffähig) sieht así de:
db ("open",#1,dbuserdata$)' öffnet el Benutzerdatenbank
db ("use",#1)
db ("seek","USERNAME",personausw$,2)' sucht el Namen des Schülers
db ("delete")' löscht ihn
db ("pack")
db ("close",#1)
db ("open",#2,dbrechte$)' öffnet el Rechtedatenbank
db ("use",#2)
db ("seek","USERNAME",personausw$,2)' sucht el Schüler
db ("delete")' löscht seinen Eintrag
db ("pack")
db ("close",#2)
db ("open",#3,dbpendenzen$)' öffnet el Datenbank para el Logfile
db ("AppendBlank")
db ("put","AN","SUPER-T")' hinterlässt una Logileeintrag para el 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 el propio DB des Schülers
db ("use",#4)
Sinestar encargado %dbEof
satznr&= &dbreccount' Anzahl Datensätze total
db ("use",#4)
db ("go","Top")
If Satznr& > 0
lehrer$=db("get","LEHRER")' Holt se una Lehrernamen
db ("open",#5,"C:\XProfanX2\Datenbanken\"+trim$(lehrer$)+".DBF")' öffnet el DB con el Namen des Lehrers
db ("use",#5)
whilenot %dbEof
satznr2&=db ("seek","SCHUELER",personausw$,2)' sucht el Namen des Schülers
if satznr2& > 0
db ("delete")' löscht el Datensatz
db ("pack")
db ("close",#5)
Endif
db("go","Next")
endwhile
Endif
db("go","Next")
endwhile
db ("close",#4)
Wär fresco, si veces alguien drüberschauen podría... Yo glaube Yo schnall algo beim Ablauf el Bucle no :O
Grüessli
Danny |
|
|
| |
|
|
|
« Dieser Contribución wurde como Solución gekennzeichnet. » |
|
Thomas Freier | Mit el pcu ging's. Si ahora aber auch con X2 posible ser oder täusche Yo 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) O (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
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 | Yo versuche lo una vez. Bitte siempre sólo en Erfolg löschen. Seek endet beim letzten Datensatz y debería nichts gefunden voluntad, por qué De todos modos, se el letzte Datensatz en cada Falle gelöscht. KompilierenMarcaSeparacióndb ("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) Also como en: KompilierenMarcaSeparaciónsatznr2&=db ("seek","SCHUELER",personausw$,2)' sucht el Namen des Schülers
if satznr2& > 0
db ("delete")' löscht el Datensatz
db ("pack")
Endif
db ("close",#5)
Das Problema es sicher en diesem Teil KompilierenMarcaSeparaciónlehrer$=db("get","LEHRER")' Holt se una Lehrernamen
db ("open",#5,"C:\XProfanX2\Datenbanken\"+trim$(lehrer$)+".DBF")' öffnet el DB con el Namen des Lehrers
db ("use",#5)
whilenot %dbEof
satznr2&=db ("seek","SCHUELER",personausw$,2)' sucht el Namen des Schülers
if satznr2& > 0
db ("delete")' löscht el Datensatz
db ("pack")
db ("close",#5)
Endif
db("go","Next")
endwhile
Lo se wohl n-veces el Schüler beim Lehrer gesucht voluntad. Lo se aber después de el 1. Fund el #5=Lehrer.dbf geschlossen. Como macht el Mientras que-Bucle no Sinn. Soll aber sicher mehr gefunden voluntad, entonces beim Fund sólo db ("delete")' löscht el Datensatz y después de endwhile el como gelöscht markierten Datensätze endgültig löschendb ("pack") y Datenbank schließen. |
|
|
| |
|
|
|
H.Brill | Como Yo así beim Darüberfliegen su Codes así sehe, mußt du KompilierenMarcaSeparación antes del bucle ausführen. Das darf no en deine Bucle. Yo denke veces, daß el Daten siempre aún en Speicher posición. KompilierenMarcaSeparación Yo sería lo veces así versuchen : KompilierenMarcaSeparación Jetzt con @db("Pack", ) löschen, DB schließen y neu abierto. Jetzt müßte el DB aktuell ser. Yo weiß auch no, como sicher %dbEof en 2 Schleifen arbeitet. Usted müßtest aber en cada DB auch una sogen. Schlüsselfeld haben, así uno en el otro DBs entonces auch el entsprechenden Einträge löschen kann. Como reicht sí ya una einfaches num. Feld, el aufsteigend cada Datensatz numeriert. Como fehlt aber XProfan una Join - Befehl dazu. Como wäre sólo SQL mejor geeignet. |
|
|
| 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 | Posesiones oben veces genauer gelesen. Como wäre el Thema Datenbank-Nomalisierung wichtig. Sind el DBs dir vorgegeben oder hast du ellos neu erstellt ? Um Datenredundancen a umgehen, podría uno überlegen, el DBs algo umzugestalten. z.B. Lehrer -> mehrere Schüler Schüler wäre entonces una Memofeld, en el como Textzeilen entonces el Schüler untereinander posición. Mit MoveListToMem oder MoveListToStr oder Listboxliste direkt puede ser muy schön el Liste kopieren y en él suchen,löschen oder bearbeiten. Evtl. podría uno auch Estructuras con Bereichen# nutzen. En DB el Lehrer (Klasse, Schüler, Fach) z.B. : Struct Lehrer = Klasse$(5), Fach$(20), Schueler#(400) Das wären 20 Schüler con je 20 Signo
Tal vez helfen dir solche Überlegungen algo más. |
|
|
| 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 | ¡Hola miteinander
Merci primero, dass ihr euch el Thema angenommen habt.
@H.Brill,
dein letzter Contribución ha me a Denken gegeben. Und como Yo el 2 Lösungen ausprobiert habe y beide mich no bastante para Ziel geführt haben, es me como Tomaten de los Augen gefallen: WIESO musste Yo el Schülernamen en el Lehrer DB ablegen, si doch el Schülernamen, samt ihrer zugeordneten Klasse ya en el DB File con el Benutzerdaten mentira oO Lo ergibt viel mehr Sinn, en el Lehrer DB simplemente "FACH" y "KLASSE" abzulegen y el Schülernamen el Klasse parallel de el Benutzer DB File a holen... Beim Löschen uno Benutzers de el BenutzerDB File verschwindet él also auch de el Ansichten el Lehrer voila... Und una Vorteil bringts todavía: Wenn uno el Schülerdaten editiert y el Schüler una neue Klasse zuweist, muss el sólo en el Benutzer DB File passieren y él landet automáticamente en seinen "neuen" Fachlehrern. Sonst hätte uno ebenfalls todavía Los cambios en el Lehrerfiles vornehmen necesario...
Ist ahora adaptado y se ejecuta prima... Cuestión mich sólo, wieso Yo como no de vornherein en él gekommen bin...
Bin sólo todavía Principiante en el Gebiet y vorallem en Bezug en Datenbanken
Im Grunde fand Yo Rechteverwaltungen spannend, como unser Sistema en el Geschäft en Access Aufsetzt y una muy genaue Rechteverwaltung ha, y quería así algo auch una vez programa xD y así es eigentlich el Concepto el Schulverwaltung entstanden, en el uno el Rechte ebenfalls flexibel zuteilen kann
Merci viel viel Tiempo para Eure Ayuda
... Und si yo ni Cuestión stellen dürfte, sin una neues Thema eröffnen tener... Como lautet el Befehl a Menüleiste a "zerstören", así uno ellos danach neu aufrufen kann?
Greeetz,
Danny |
|
|
| |
|
|
|
| Hi!
¿Te ha tal vez windowstyle 16 ? |
|
|
| |
|
|
|
holmol93 | Hallöchen a así später Stunde
No bastante Durch el Rechteverwaltung posición gewisse Menüs y Menüpunkte sólo Personen disponible, el dieses Recht haben. Ist auch kein Problema, si al Programa cada vez neustartet, si se una otro Benutzer anmeldet. Yo möchte aber una Login/Logout Función einbauen... Und cada vez si yo simplemente una neue Passwortabfrage mache y el Programa el Rechte zuteilt y el Menüleiste lädt se esta entonces doppelt adecuado oder enthält Menüpunkte vom Vorbenutzer, el el neue no haben debería
Für Ventana gibts sí DestroyWindow, hay algo ähnliches auch para el Leiste oben, así uno ellos löschen y neu aufbauen kann sin dass Menüpunkte doppelt erscheinen?
Greetz, Danny |
|
|
| |
|
|
|
| Sorry, Yo weiß scheinbar garnicht genau welche Leiste ¿Quieres decir que.
Vlt. veces a la Screenshot zeigen, simplemente a Contribución anhängen. |
|
|
| |
|
|
|
holmol93 |
Heyho
Stimmt, hätt Yo grad de Anfang a mitschicken puede *g*
Yo glaube auch no, el lo viele son, el esta Möglichkeit suchen
Aber como du siehst, unterscheidet se je después de el, welche Rechte el Benutzer ha, el Menü oben. Wenn Yo el media Logoutvorgang así einbaue, dass Yo simplemente el Menü neu aufbauen lasse, son para Teil danach Menüpunkte doppelt. Oder una Lehrer, el se einloggt, después de el el Schulleiter eingeloggt war, ha plötzlich neben seinem Menü auch todavía Zugriff aufs Master oO
Deshalb möcht Yo el Leiste "löschen" y neu inicializar dejar
El Menüpunkte voluntad encima If- Anweisungen de y eingeblendet. Nach el Motto, Wenn Recht SoundSo disponible -> zeige "Funktionen.Master" usw...
Greetz,
Danny |
|
|
| |
|
|
|
Thomas Freier | Also para jede Gruppe una propio Menü? Das podría en una Diálogo ser y luego el Zutreffende einblenden. Oder siehe [...] Einfach el Fuente una vez durchstöbern. |
|
|
| |
|
|
|
H.Brill | Nah siehste, ahora weißt du auch, qué con Datenbank-Normalisierung gemeint es. Wenn lo una normales Menü es, podría uno doch una komplettes Menü Mostrar y je después de Rechten, con EnableMenu cada Auswahlpunkte deaktivieren o. aktivieren.
So, nun muß Yo a 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 ▲ |
|
|
|
|
E.T. | ... oder sólo una externes Menü nutzen... ... y luego UseExtMenu...
como puede ser schön zwischen el Menüs hin- y 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 ▲ |
|
|
|