Einzelnen Beitrag anzeigen

OrNEC

Registriert seit: 6. Nov 2009
493 Beiträge
 
FreePascal / Lazarus
 
#1

In der DB suchen und eine Bedingung erfüllen?

  Alt 1. Feb 2014, 12:03
Datenbank: SQLite • Version: 3 • Zugriff über: SQLiteSimpleDelphi-Wrappers von Tim Anderson
Hallo Jungs,

ich habe folgendes Problem. Ich möchte in der DB nach einem Benutzerdefiniertem String suchen und dabei eine Bedingung erfüllen, nämlich, dass es nur Favorisierte Stationen angezeigt werden. Die Bedingung heißt "WHERE allStations.aFavorite=1", aber wie mache ich das, dass sie erfüllt wird sowie nur die Stationen angezeigt werden wo str gefunden wurde? Irgendwie komme ich nicht weiter... Danke euch!

Hier mein Code:

Delphi-Quellcode:
procedure TForm1.LoadallStationsFromDB();
var dbFile: String;
    db: TSQLiteDatabase;
    tb: TSQLIteTable;
    MyItem: TListItem;
    str, str1: String;
begin
  // ListView Eintraege loeschen
  allStationsListView.Clear;
  FavoriteListView.Clear;


  dbFile := ExtractFilePath(Application.ExeName) + 'Stations.db';
  db := TSQLiteDatabase.Create(dbFile);
  try
    str1:='';
    if SearchBEdit.Text=_('Search') then str:= '''%' + '' + str1+ '' + '%'''
    else str:= '''%' + '' + SearchBEdit.Text+ '' + '%''';

    // Datensaetze der allStations Tabelle in den StationsTab einlesen
    tb := db.GetTable('SELECT allStations.aId,'
    + 'allStations.aName, '
    + 'allStations.aStreamURL, '
    + 'allStations.aWebsiteURL, '
    + 'allStations.aScheduleURL, '
    + 'allStations.aFavorite, '
    + 'allStations.aFixed, '
    + 'allStations.aInfo, '
    + 'language.lName, '
    + 'category.cName '
    + 'FROM allStations '
    + 'LEFT JOIN language ON allStations.fk_language_id=language.lId '
    + 'LEFT JOIN category ON allStations.fk_category_id=category.cId '
    + 'WHERE allStations.aName LIKE '+str+' '
    + 'OR allStations.aStreamURL LIKE '+str+' '
    + 'OR allStations.aWebsiteURL LIKE '+str+' '
    + 'OR allStations.aScheduleURL LIKE '+str+' '
    // + 'OR allStations.aFavorite LIKE '+str+' '
    + 'OR allStations.aFixed LIKE '+str+' '
    + 'OR allStations.aInfo LIKE '+str+' '
    + 'OR language.lName LIKE '+str+' '
    + 'OR category.cName LIKE '+str+' ORDER BY allStations.aName ASC'); <- hier muss wohl die Where-Bedingung "WHERE allStations.aFavorite=1" hin, aber wie?
    try
      // Alle Datensaetze in die ListView einlesen
      if tb.Count > 0 then
      begin
        while not tb.EOF do
        begin
          MyItem := allStationsListView.Items.Add;
          MyItem.Data := Pointer(tb.FieldAsInteger(tb.FieldIndex['aId'])); // Data mit Ids fuellen
          MyItem.Caption := tb.FieldAsString(tb.FieldIndex['aName']);
          MyItem.SubItems.Add(tb.FieldAsString(tb.FieldIndex['aFavorite']));
          MyItem.SubItems.Add(tb.FieldAsString(tb.FieldIndex['lName']));
          MyItem.SubItems.Add(tb.FieldAsString(tb.FieldIndex['cName']));
          tb.Next;
        end;
      end;

    finally
      tb.Free;
    end;


  finally
    db.Free;
  end;

end;

Geändert von OrNEC ( 1. Feb 2014 um 12:12 Uhr)
  Mit Zitat antworten Zitat