AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Suche: Suchstrings

Ein Thema von Kuckuckskind · begonnen am 18. Dez 2002 · letzter Beitrag vom 21. Dez 2002
Antwort Antwort
Seite 2 von 3     12 3      
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#11
  Alt 19. Dez 2002, 20:07
Hallo Thea

Du kannst einfach das WHERE mit einem AND ergänzen und den gewünschten Text suchen
Code:
SELECT * FROM TableName WHERE SearchField LIKE '%Text1%' AND SearchField LIKE '%Text2%'
Berücksichtige aber die schon gemachten Aussagen bezüglich der LIKE-Suche! Wichtig ist, dass OR mit Klammern entsprechen getrent sind
Beispiel:
Code:
WHERE (SField LIKE '% Freund%' OR SField LIKE '%Freund %') AND (SField LIKE '% Baum%' OR SField LIKE '%Baum %)
Eben wie gehabt....

Gruss
Xaver

PS: Musst einfach sehen, dass Du vor lauter Bäumen den Wald nicht mehr siehst oder so etaw...
  Mit Zitat antworten Zitat
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#12
  Alt 19. Dez 2002, 20:21
Dazu müsste ich den eingegebenen String aber irgendwie aufteilen, nach dme Prinzip

Code:
if irgendeinZeichen vom eingegebenenString =' ' dann
 teile den String in mehrere Teile
suche nach jedem Einzelstring
Gell? Und nun noch ein Code bitte, den Delphi auch versteht
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#13
  Alt 19. Dez 2002, 20:46
Na sonst noch Wünsche? Du hast Glück, dass ich heute gut drauf bin....

Also hier ein Beispiel wie ich es löschen würde:

1. Eingabefeld auf eine Form legen. Am besten ein TEdit
2. Button für die Suche ebenfalls auf das Form (hast Du sicher schon)

3. In OnButtonClick folgenden Code einfügen:
Code:
procedure .....
var
  xStr,
  xWord,
  xWhere : string;
  xPos  : integer;
begin
  xWhere := '';
  xStr := Trim(Edit1.Text);
  while xStr <> '' do
  begin
    xPos := Pos(' ', xStr);
    if xPos > 0 then
    begin
      xWord := Trim(Copy(xStr, 1, xPos));
      if xWord <> '' then
      begin
        if xWhere <> '' then
          xWhere := xWhere +' AND SearchField LIKE %'+ xWord + '%'
        else
          xWhere := ' SearchField LIKE %'+ xWord + '%';
      end;
      Delete(xStr, 1, xPos);
      xStr := Trim(xStr);
    end
    else if xStr <> '' then
    begin
      if xWhere <> '' then
        xWhere := xWhere +' AND SearchField LIKE %'+ xWord + '%'
      else
        xWhere := ' SearchField LIKE %'+ xWord + '%';
      xStr := '';
    end;
  end;
  if xWhere <> '' then
  begin
    Query.SQL.Text := 'SELECT * FROM TableName '+
                      'WHERE '+xWhere;
    .... und so weiter...
  end;
end;
Du musst das natürlich noch etwas ergänzen, mit dem was in den vorgängigen Nachrichten so alles gesagt wurde. Will Dir ja nicht gleich das ganze Programm liefern

Gruss
Xaver

PS: ich verwende x bei lokalen Variablen; hat aber nichts mit meinem Namen zu tun....
  Mit Zitat antworten Zitat
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#14
  Alt 20. Dez 2002, 01:14
Oh, danke schön, fühlte mich jetzt zeitweise etwas überfordert... ich schulde dir einen Glühwein
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#15
  Alt 20. Dez 2002, 06:52
Bitte gern geschehen, aber wie fühlt man sich nach einem virtuellen Glühwein? Etwa so?
Gruss
Xaver
  Mit Zitat antworten Zitat
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#16
  Alt 21. Dez 2002, 14:03
Nein, dann fühlt man sich so: *g*

Ähm, also, um noch mal zum Programm zurückzukehren:
Es klappt alles perfekt, wenn man nach zwei Suchbegriffen sucht, aber es geht nicht, wenn man nur einen Begriff eingibt! Dann bekommt man alle Datensätze ausgegeben, die in der Tabelle sind. Irgendwie muss man noch eine Überprüfung einbauen, ob sich in dem Suchstring überhaupt ein Leerzeichen befindet und daraus eine if-Bedingung ableiten.
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#17
  Alt 21. Dez 2002, 14:07
Ok, kannst Du einmal den Code, den Du hinein gehäckt hast hinein kopieren, dann sehe ich in mal an.

Gruss
Xaver
  Mit Zitat antworten Zitat
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#18
  Alt 21. Dez 2002, 14:27
Also, zu Testzwecken hab ich dafür ein neues Programm geschrieben:

Code:
unit usuche;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, XPMenu, Grids, DBGrids, DB, DBTables;

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Button1: TButton;
    DataSource1: TDataSource;
    Query1: TQuery;
    DBGrid1: TDBGrid;
    XPMenu1: TXPMenu;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
 var
  xStr, xWord, xWhere: String;
  xPos: Integer;
begin
 if Edit1.Text = '' then
  ShowMessage('Bitte Suchbegriff eingeben!')
 else begin

 xWhere := '';
 xStr := Trim(Edit1.Text);
 while xStr <> '' do
  begin
   xPos := Pos(' ', xStr);
   if xPos > 0 then
    begin
     xWord := Trim(Copy(xStr, 1, xPos));
     if xWord <> '' then
      begin
       if xWhere <> '' then
        xWhere := xWhere +' AND Titel LIKE "%'+ xWord + '%"'
       else
        xWhere := ' Titel LIKE "%'+ xWord + '%"';
      end;
      Delete(xStr, 1, xPos);
      xStr := Trim(xStr);
    end
   else
    if xStr <> '' then
     begin
      if xWhere <> '' then
       xWhere := xWhere +' AND Titel LIKE "%'+ xWord + '%"'
      else
       xWhere := ' Titel LIKE "%'+ xWord + '%"';
      xStr := '';
     end;
  end;
   if xWhere <> '' then
    begin
     Query1.Close;
     Query1.SQL.Clear;
     Query1.SQL.Text := 'SELECT * FROM buecher WHERE '+xWhere;
     Query1.Open;
    end;
   
end;
end;

end.
Müssen zwar noch ein paar Veränderungen vorgenommen werden, damit der Codein das richtige Programm übernommen werden kann, so müsste es aber trotzdem funktionieren!
  Mit Zitat antworten Zitat
xbu58

Registriert seit: 10. Dez 2002
Ort: Bäretswil / Schweiz
121 Beiträge
 
Delphi 7 Enterprise
 
#19
  Alt 21. Dez 2002, 14:43
Nein brucht keine zusätzliche if-Entscheidung. War mein Fehler. Die zweite Zuweisung an xWhere ist nicht korrekt

Wie es jetzt ist:
Code:
   ......
    end
   else
    if xStr <> '' then
     begin
      if xWhere <> '' then
       xWhere := xWhere +' AND Titel LIKE "%'+ xWord + '%"'
      else
       xWhere := ' Titel LIKE "%'+ xWord + '%"';
      xStr := '';
     end;
  end;
   if xWhere <> '' then
    begin
   ....
Wie es aussehen sollte:

Code:
   ......
    end
   else
    if xStr <> '' then
     begin
      if xWhere <> '' then
       xWhere := xWhere +' AND Titel LIKE "%'+ xStr + '%"'
      else
       xWhere := ' Titel LIKE "%'+ xStr + '%"';
      xStr := '';
     end;
  end;
   if xWhere <> '' then
    begin
   ....
An Stelle von xWord muss natürlich xStr stehen. xWord ist ja in Falle, dass nur ein Wort eingegeben wurde leer!

Übrigens, ich empfehle, dass Du bei der Einrückung darauf achtest, den Code immer um 2 Stellen einzurücken. Ist bei grösseren Programmen sehr hilfreich.
Beispiel:


Code:
procedure ......
var
  xVars....
begin
  if
  begin
  end
  else if ..
  begin
    while ...
    begin
    end;
  end;
end;
So kannst Du mit dem Cursor immer vom begin zu end fahren und weisst sofort, was zusammen gehört.

Gruss
Xaver
  Mit Zitat antworten Zitat
Benutzerbild von Kuckuckskind
Kuckuckskind

Registriert seit: 29. Nov 2002
65 Beiträge
 
Delphi 6 Enterprise
 
#20
  Alt 21. Dez 2002, 14:55
Danke schön! Wenn das jetzt klappt, bin ich für die nächsten drei Tage nicht mehr ansprechbar (-> dann hab ich nämlich zu tun...)

  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:50 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz