Einzelnen Beitrag anzeigen

Shubit

Registriert seit: 17. Mai 2009
64 Beiträge
 
#10

Re: Speichern eines großen Arrays

  Alt 1. Apr 2010, 12:03
@Teekeks: etwas sehr kurzes Beispiel, da ist mir das von DeddyH doch lieber

Zu dem Syntax Fehler:
Das geht:
Delphi-Quellcode:
    SQL.Add('INSERT INTO VocabularyList (Language1, Article1, Language2, ' +
        'Article2, Note, Chance, AddedOn, LastTraining, Mistakes, Trials, Box) '
        + 'VALUES (:Language1,:Article1,:Language2,:Article2,:Note,' +
        ':Chance,:AddedOn,:LastTraining,:Mistakes,:Trials,:Box);');
    ParamByName('Language1').Value := 'Wort';
    ParamByName('Article1').Value := 'das';
    ParamByName('Language2').Value := 'word';
    ParamByName('Article2').Value := 'the';
    ParamByName('Note').Value := 'Notiz';
    ParamByName('Chance').AsFloat := 0.5;
    ParamByName('AddedOn').AsDateTime := Now;
    ParamByName('LastTraining').AsDateTime := Now;
    ParamByName('Mistakes').AsInteger := 0;
    ParamByName('Trials').AsInteger := 0;
    ParamByName('Box').AsInteger := 0;
    ExecSQL;
Das geht nicht:
Delphi-Quellcode:
    SQL.Add('INSERT INTO VocabularyList (Language1, Article1, Language2, ' +
        'Article2, Note, Chance, AddedOn, LastTraining, Mistakes, Trials, Box) '
        + 'VALUES (:Language1,:Article1,:Language2,:Article2,:Note,' +
        ':Chance,:AddedOn,:LastTraining,:Mistakes,:Trials,:Box);');
    ParamByName('Language1').AsString := 'Wort';
    ParamByName('Article1').AsString := 'das';
    ParamByName('Language2').AsString := 'word';
    ParamByName('Article2').AsString := 'the';
    ParamByName('Note').AsString := 'Notiz';
    ParamByName('Chance').AsFloat := 0.5;
    ParamByName('AddedOn').AsDateTime := Now;
    ParamByName('LastTraining').AsDateTime := Now;
    ParamByName('Mistakes').AsInteger := 0;
    ParamByName('Trials').AsInteger := 0;
    ParamByName('Box').AsInteger := 0;
    ExecSQL;
Scheinbar funktioniert die AsString procedure nicht, weshalb die Datenbank dann meckert das da 5 Kommas ohne Strings dazwischen sind.



Zufälliger Eintrag:
a) Array mit allen gültigen ID's erstellen und über zufälligen Index des Arrays ...
b) Alle Zeilen aus der Datenbank holen und dann eine zufällige Anzahl an Schritten weiter gehen. gibt es sowas wie ZQuery.Count (Anzahl der Zeilen)?
c) Ich denke das macht man zwar eher nicht, aber man könnte ja auch beim Löschen eines Eintrages alle größeren ID's anpassen und dann hätte man direkt eine zufällige ID nehmen, weil man wüsste das alle ID's von 1 bis zur Anzahl Zeilen vergeben sind.

Ich brauch den zufälligen Eintrag für das Vokabeltraining, derzeit wird das ganze so ermittelt:
Delphi-Quellcode:
        repeat
          mNeuerIndex := random(Length(mVokabelListe));
          x := random;
        until (x < mVokabelListe[mNeuerIndex].Chance) and
          (mNeuerIndex <> mLetzterIndex);
(die Chance gibt also die Wahrscheinlichkeit an mit der die Vokabel ausgewählt wird)
Cool wär halt: 'SELECT * FROM VokabelListe WHERE Chance > :Zufallszahl AMD id <=> :LetzteID AMD id = .ZufaelligeID'
  Mit Zitat antworten Zitat