SteffiMichi Geschrieben 21. Mai 2003 Geschrieben 21. Mai 2003 Hallo, ich stehe vor folgendem Problem: Ich soll ein Programm zum auswendig lernen von Telefonnummern schreiben. Es geht zwar nur um geringe Datenmengen, aber ich soll es aus Lernzwecken mit Hilfe einer InterBase-Datenbank realisieren. Folgende Frage: Wie kann ich aus der Tabelle TELNR den Inhalt einer Select Anweisung in ein Array einlesen und in edit-komponenten zufällig ausgeben? Z.B. select name, rufnummer from TELNR where ID <= 25 and ID > 0 // die mit diesem Select ausgelesene Datenmenge möchte ich in zufälliger Reihenfolge ausgeben manchmal nur den Namen, manchmal nur die Nummer und der User soll das fehlende jeweils ergänzen. Wie geht das, oder wie würdet Ihr das machen? Gruß SIMI Zitieren
progmaker Geschrieben 21. Mai 2003 Geschrieben 21. Mai 2003 Nimm eine TIBQuery, starte die Abfrage. Dann füllst du ein vordefiniertes Array mit Query.FieldByNAme('Feldname').Value in einer while not Query.Eof Schleife. Am Ende der Schleife machst du Query.Next. Einigermaßen verständlich? Wenn nicht, weiter nachfragen... Zitieren
SteffiMichi Geschrieben 21. Mai 2003 Autor Geschrieben 21. Mai 2003 ist verständlich! Nur noch eins: Irgend ne Idee, wie ich das mit dem "Zufall" hinkriege? Wenn die Nummern alle der Reihe nach abgefragt werden, ist das doch "langweilig"... Noch was anderes: Wenn ich in der Verwaltung der Telefonnummern einen Namen und eine Nummer eintragen will speichert der regelmäßig die Nummer nicht mit ab, obwohl alle Definitionen stimmen und auch die Feldname-Eigenschaft richtig ist (TDBEdit-Komponente). Bei einem Kollegen auf dem Rechner funktioniert das, allerdings nur mit Zahlen. Das ist komisch, weil der eigentliche Datentyp varchar(20) lautet. ??? Danke für die Hilfe :uli Zitieren
geloescht_JesterDay Geschrieben 22. Mai 2003 Geschrieben 22. Mai 2003 Original geschrieben von SteffiMichi Nur noch eins: Irgend ne Idee, wie ich das mit dem "Zufall" hinkriege? Wenn die Nummern alle der Reihe nach abgefragt werden, ist das doch "langweilig"... Ok, dann probieren wir mal ... var UsedNumbers: set of byte; // set darf maximal 256 Elemente haben procedure TForm1.create(Sender:TObject); begin [...]; randomize; // Wichtig für Zufallszahlen!! UsedNumbers:= []; //Initialisieren [...] end; function GetNewRandomID: Integer; var i: Integer; begin Result:= -1; i:= Random(256); while i in UsedNumbers do i:= Random(256); UsedNumbers:= UsedNumbers +[i]; Result:= i; end; Das ist jetzt nicht geprüft oder so, sollte aber funktionieren. Die Funktion GetNewRandomID liefert einen zufälligen Index aus deinem Array zurück. In diesem Code sind aber maximal 256 Einträge zulässig (wegen dem Set of). Wenn du mehr brauchst könntest du das erreichen indem du für UsedNumbers ein dynamisches Array of Integer erzeugst. Die Prüfung ob eine Zahl dadrin ist bzw. eine neue Hinzufügen ist dann aber ein bisschen aufwendiger, deswegen als Beispiel hier mit Set. Wenn ich mir das so ansehe könnte es vielleicht zu Problemen kommen, wenn schon viele Nummern genutzt sind. Ausserdem fehlt eine Prüfung ob UsedNumbers schon alle 256 Zahlen hat und es damit zu einer endlos Schleife kommen würde. Ist ja aber nur ein Beispiel. Zitieren
SteffiMichi Geschrieben 23. Mai 2003 Autor Geschrieben 23. Mai 2003 Erstmal DANKE für die Antworten, werde ich im Lauf des Tages gleich mal testen. Gestern war ich leider nicht da, deshalb konnt ichs da noch nicht testen. Falls ich noch weitere Fragen hab, wende ich mich vertrauensvoll an euch! :D SIMI Zitieren
SteffiMichi Geschrieben 23. Mai 2003 Autor Geschrieben 23. Mai 2003 Das Problem mit dem Nicht-Abspeichern von Rufnummern in die Tabelle ist gelöst! Ich hatte eine Prozedur MaskeSetzen in einer sbtnpost.click aufgerufen. Mein Aufruf erfolgte in folgender Reihenfolge: procedure TNUMMERNFORM.sbtnpostClick(Sender: TObject); begin MaskeSetzen(false); if cb_abschnitt.Text <> '' then DM.NUMMER.FieldValues['ABSCHNITT'] := cb_abschnitt.Text; DM.NUMMER.Post; SQLUpdate; DBGrid1.SetFocus; end; //Bei dieser Variante wurde jedesmal die Rufnummer nicht mit gespeichert... procedure TNUMMERNFORM.sbtnpostClick(Sender: TObject); begin if cb_abschnitt.Text <> '' then DM.NUMMER.FieldValues['ABSCHNITT'] := cb_abschnitt.Text; DM.NUMMER.Post; MaskeSetzen(false); SQLUpdate; DBGrid1.SetFocus; end; //Bei dieser Variante funktioniert es und wird gespeichert! Zitieren
SteffiMichi Geschrieben 27. Mai 2003 Autor Geschrieben 27. Mai 2003 Ich habe noch eine kleine Frage zum Abspeichern von Datensätzen in einer Tabelle: Wenn man Datensätze als Passwort speichern möchte, gibt es da die Möglichkeit, sie irgendwie verschlüsselt zu speichern? Oder kann der DB-User die immer lesen? Das Tool soll nämlich die Möglichkeit bieten einem Administrator Nutzer anzulegen und den Benutzern dann, sich einzuloggen. Theoretisch wäre es zwar nicht schlimm, wenn der Admin die Passworte lesen könnte, aber vielleicht gibt's da ja eine Möglichkeit, dieses zu unterbinden?! Bin jedenfalls für Hilfe dankbar!:bimei Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.