Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Suchfunktion in einem DBGrid (https://www.delphipraxis.net/186491-suchfunktion-einem-dbgrid.html)

Krupi 7. Sep 2015 11:33

Datenbank: Firebird • Version: 2.5 • Zugriff über: TSQL

Suchfunktion in einem DBGrid
 
Hallo DP-Gemeinde

ich hoffe ihr könnt mir helfen bei meinem problem.

Ich habe eine DBGrid mit folgenden spalten :

Name Telefon Email Ort Straße

Das DBGrid ist mit einer DatenBank verbunden und die Daten kann ich schon rein ziehen in das DBGrid. Jedoch wollte ich per Button und Edit FEld in meinem DBGRid etwas suchen und falls bei gefundenen eintrag, sollte nur dieser eintrag im DBGRid angezeigt werden.
Ich weis leider aber nicht wie ich es realisieren soll.

Danke im Vorraus für jede Hilfe :)

Sherlock 7. Sep 2015 11:38

AW: Suchfunktion in einem DBGrid
 
Du suchst in dem angebundenen DataSet und erhältst dadurch automatisch den fraglichen Datensatz im Grid markiert - sofern du den Rowindicator (ich glaube so heisst das) anzeigst.

Sherlock

mkinzler 7. Sep 2015 12:03

AW: Suchfunktion in einem DBGrid
 
Mit <DataSet>.Locate() kannst Du die Datenmenge durchsuchen und der 1. gefundene Datensatz wird dann zum aktiven im DataSet.

Perlsau 7. Sep 2015 12:13

AW: Suchfunktion in einem DBGrid
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von Krupi (Beitrag 1314947)
Jedoch wollte ich per Button und Edit FEld in meinem DBGRid etwas suchen und falls bei gefundenen eintrag, sollte nur dieser eintrag im DBGRid angezeigt werden.

Da gibt es mehrere Möglichkeiten. Daß du nicht im DBGrid, sondern im zugrundeliegenden Dataset/Query/Table suchen mußt, wurde bereits mitgeteilt.
  1. Du kannst die Filterfunktion deines Datasets verwenden und dort den Filter eingeben.
  2. Du kannst das SQL-Property deines Datasets verwenden und den Select-Befehl um eine entsprechende Where-Klausel erweitern
  3. Wenn ich – entgegen deiner Anforderung – nur zum gesuchten Datensatz im DBGrid springen will, realisiere ich das mit eine Tastaturabfrage im DBGrid:

Delphi-Quellcode:
Procedure TFormMain.DbGrid_ViewKeyPress(Sender: TObject; var Key: Char);
Var
  C : Integer;

begin
  C := Ord(Key);
  Case C Of
     27      : DatMod.EintragFinden_View(Key); // Esc
     32      : DatMod.EintragFinden_View(Key); // Space
     45      : DatMod.EintragFinden_View(Key); // -
     46      : DatMod.EintragFinden_View(Key); // .
     48..57  : DatMod.EintragFinden_View(Key); // 0-9
     65..90  : DatMod.EintragFinden_View(Key); // A-Z
     97..122 : DatMod.EintragFinden_View(Key); // a-z
    129      : DatMod.EintragFinden_View(Key); // ü
    132      : DatMod.EintragFinden_View(Key); // ä
    148      : DatMod.EintragFinden_View(Key); // ö
  End;
end;

Procedure TDatMod.EintragFinden_View(Const Taste: Char);
Var
  Spalte : String;
begin
  If Taste = #27                    Then
     GLD.URec.Praxen_SuchText := '' Else
  Begin
    GLD.URec.Praxen_SuchText := GLD.URec.Praxen_SuchText + Taste;
    Case GLd.URec.Praxen_SortId Of
    0 : Spalte := 'PRAXIS';
    1 : Spalte := 'STRASSE';
    2 : Spalte := 'HNR';
    3 : Spalte := 'PLZ';
    4 : Spalte := 'ORT';
    5 : Spalte := 'HOME';
    6 : Spalte := 'MAIL';
    7 : Spalte := 'TELEFON';
    8 : Spalte := 'ANWEND';
    End;
    If GLd.URec.Praxen_SortId < 9 Then
       DatMod.View_Praxis.Locate(Spalte, GLD.URec.Praxen_SuchText, [loCaseInsensitive,loPartialKey]);
  End;
  If Assigned(fUpdateStatusbar) Then fUpdateStatusbar;
end;
Falls du den Code nicht gleich verstehst: Die Variable GLD.URec.Praxen_SuchText enthält den Suchtext, der durch die ESC-Taste gelöscht wird.

Für die genaue Suche in mehreren Feldern gleichzeitig ist natürlich etwas mehr Aufwand notwendig. Hier verwende ich eine spezielle Suchmaske und werte beim Klick auf den Suchen-Button die einzelnen Felder und Checkboxen aus:

Delphi-Quellcode:
UNIT UnitSuchPrax;

INTERFACE

USES
  Winapi.Windows, Winapi.Messages,
  System.SysUtils, System.Variants, System.Classes,
  Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.CheckLst, Vcl.ExtCtrls, Vcl.ComCtrls,
  JvExComCtrls, JvDateTimePicker;

TYPE
  TFormSuchPrax = CLASS(TForm)
    Panel_Such        : TPanel;
    Ed_Praxisname     : TEdit;
    Ed_Strasse        : TEdit;
    Ed_PLZ            : TEdit;
    Ed_Ort            : TEdit;
    Ed_Homepage       : TEdit;
    Ed_Email          : TEdit;
    Ed_Telefon        : TEdit;
    Check_Anfrage     : TCheckBox;
    Check_Antwort     : TCheckBox;
    Lbl_Praxisname    : TLabel;
    Lbl_Strasse       : TLabel;
    Lbl_PLZ           : TLabel;
    Lbl_Ort           : TLabel;
    Lbl_Homepage      : TLabel;
    Lbl_Email         : TLabel;
    Lbl_Telefon       : TLabel;
    Check_SuchResAktiv : TCheckBox;
    CheckList_SuchPrax : TCheckListBox;
    Check_GrossKlein  : TCheckBox;
    Check_Exakt       : TCheckBox;
    Panel_SuchTool    : TPanel;
    Btn_Such          : TButton;
    Btn_Clear         : TButton;
    Btn_Close         : TButton;
    Memo_Anleit       : TMemo;

    Procedure FormShow(Sender                    : TObject);
    Procedure FormClose(Sender                   : TObject; var Action: TCloseAction);
    Procedure CheckList_SuchPraxClickCheck(Sender : TObject);
    Procedure Ed_PraxisnameKeyPress(Sender       : TObject; var Key: Char);
    Procedure Btn_ClearClick(Sender              : TObject);
    Procedure Btn_CloseClick(Sender              : TObject);
    Procedure Btn_SuchClick(Sender               : TObject);

  PRIVATE { Private-Deklarationen }
    Const
      MemoText1 = 'Gesucht wird nur nach jenen Feldern, die in der Liste rechts markiert sind.';
      MemoText2 = ' Für das Feld "Praxisname" gilt zusätzlich, daß auch ein Suchtext im Eingabefeld stehen muß,';
      MemoText3 = ' denn in der Datenbank darf der Praxisname nicht leer sein.';
      MemoText4 = ' In den anderen Feldern kann somit auch danach gesucht werden, ob sie leer sind.';

    Procedure EinstellungenLesen;
    Procedure EinstellungenSchreiben;
    Procedure SuchSQLerzeugen;
    Procedure SucheStarten;

  PUBLIC { Public-Deklarationen }


  END;

VAR
  FormSuchPrax: TFormSuchPrax;

IMPLEMENTATION
{$R *.dfm}
{ TFormSuchPrax }

Uses
  UnitData, GLD;

// ##### PRIVATE METHODEN ###############################################################################################################

// ---------- Einstellungen lesen ------------------------------------------------------------------------------------------------ Privat
Procedure TFormSuchPrax.EinstellungenLesen;
Var
  SCheck : String;
  i     : Integer;

begin
  Self.Left                 := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_LEFT').AsInteger;
  Self.Top                  := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_TOP').AsInteger;
  Self.Width                := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_WIDTH').AsInteger;
  Self.Height               := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_HEIGHT').AsInteger;
  Check_SuchResAktiv.Checked := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_SUCHRESAKTIV').AsBoolean;
  Check_GrossKlein.Checked  := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_GROSSKLEIN').AsBoolean;
  Check_Exakt.Checked       := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_EXAKT').AsBoolean;
  Ed_Praxisname.Text        := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_PRAXIS').AsString;
  Ed_Strasse.Text           := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_STRASSE').AsString;
  Ed_PLZ.Text               := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_PLZ').AsString;
  Ed_Ort.Text               := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_ORT').AsString;
  Ed_Homepage.Text          := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_HOME').AsString;
  Ed_Email.Text             := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_EMAIL').AsString;
  Ed_Telefon.Text           := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_TELEFON').AsString;
  Check_Anfrage.Checked     := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_GEMAILT').AsBoolean;
  Check_Antwort.Checked     := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_GEANTWORTET').AsBoolean;
  SCheck                    := DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_CHECKLIST').AsString;

  If SCheck <> '' Then
  Begin
    i := 0;
    Repeat
      Inc(i);
      CheckList_SuchPrax.Checked[i-1] := SCheck[i] = '1';
    Until (i = CheckList_SuchPrax.Count) Or (i = Length(SCheck));
  End;

  Memo_Anleit.Lines.Text := MemoText1+MemoText2+MemoText3+MemoText4;
end;

// ---------- Einstellungen schreiben -------------------------------------------------------------------------------------------- Privat
Procedure TFormSuchPrax.EinstellungenSchreiben;
Var
  SCheck : String;
  i     : Integer;
begin
  SCheck := '';
  For i := 0 To CheckList_SuchPrax.Count -1 Do
    If CheckList_SuchPrax.Checked[i] Then
       SCheck := SCheck + '1'       Else
       SCheck := SCheck + '0';

  DatMod.Qset_Benutzer.Edit;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_LEFT').AsInteger              := Self.Left;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_TOP').AsInteger               := Self.Top;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_WIDTH').AsInteger             := Self.Width;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_HEIGHT').AsInteger            := Self.Height;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_SUCHRESAKTIV').AsBoolean      := Check_SuchResAktiv.Checked;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_GROSSKLEIN').AsBoolean        := Check_GrossKlein.Checked;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_EXAKT').AsBoolean             := Check_Exakt.Checked;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_PRAXIS').AsString             := Ed_Praxisname.Text;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_STRASSE').AsString            := Ed_Strasse.Text;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_PLZ').AsString                := Ed_PLZ.Text;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_ORT').AsString                := Ed_Ort.Text;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_HOME').AsString               := Ed_Homepage.Text;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_EMAIL').AsString              := Ed_Email.Text;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_TELEFON').AsString            := Ed_Telefon.Text;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_GEMAILT').AsBoolean           := Check_Anfrage.Checked;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_GEANTWORTET').AsBoolean       := Check_Antwort.Checked;
  DatMod.Qset_Benutzer.FieldByName('SUCHPRAX_CHECKLIST').AsString          := SCheck;
  DatMod.Qset_Benutzer.Post;
end;

// ---------- Suchstring erzeugen ------------------------------------------------------------------------------------------------ Privat
Procedure TFormSuchPrax.SuchSQLerzeugen;
Const
  SqlW = ' where ';
  SqlA = ' and ';
Var
  Aus : String;
  W  : Integer;

begin
  GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL;
// Praxisname
  If CheckList_SuchPrax.Checked[0] And (Ed_Praxisname.Text <> '')   Then
  Begin
     If Check_Exakt.Checked                                         Then
        Aus := SqlW + 'PRAXIS = '   + QuotedStr(Ed_Praxisname.Text) Else
        Aus := SqlW + 'PRAXIS like ' + QuotedStr('%' + Ed_Praxisname.Text + '%');
     GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// Straße
//  If CheckList_SuchPrax.Checked[1] And (Ed_Strasse.Text <> '')      Then
  If CheckList_SuchPrax.Checked[1]                                  Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
     If Check_Exakt.Checked                                         Then
        Aus := 'STRASSE = '   + QuotedStr(Ed_Strasse.Text)         Else
        Aus := 'STRASSE like ' + QuotedStr('%' + Ed_Strasse.Text + '%');
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// PLZ
//  If CheckList_SuchPrax.Checked[2] And (Ed_PLZ.Text <> '')          Then
  If CheckList_SuchPrax.Checked[2]                                  Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
     If Check_Exakt.Checked                                         Then
        Aus := 'PLZ = '   + QuotedStr(Ed_PLZ.Text)                 Else
        Aus := 'PLZ like ' + QuotedStr('%' + Ed_PLZ.Text + '%');
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// Ort
//  If CheckList_SuchPrax.Checked[3] And (Ed_Ort.Text <> '')          Then
  If CheckList_SuchPrax.Checked[3]                                  Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
     If Check_Exakt.Checked                                         Then
        Aus := 'ORT = '   + QuotedStr(Ed_Ort.Text)                 Else
        Aus := 'ORT like ' + QuotedStr('%' + Ed_Ort.Text + '%');
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// Homepage
//  If CheckList_SuchPrax.Checked[4] And (Ed_Homepage.Text <> '')     Then
  If CheckList_SuchPrax.Checked[4]                                  Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
     If Check_Exakt.Checked                                         Then
        Aus := 'HOME = '   + QuotedStr(Ed_Homepage.Text)           Else
        Aus := 'HOME like ' + QuotedStr('%' + Ed_Homepage.Text + '%');
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// Email
//  If CheckList_SuchPrax.Checked[5] And (Ed_Email.Text <> '')        Then
  If CheckList_SuchPrax.Checked[5]                                  Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
     If Check_Exakt.Checked                                         Then
        Aus := 'MAIL = '   + QuotedStr(Ed_Email.Text)              Else
        Aus := 'MAIL like ' + QuotedStr('%' + Ed_Email.Text + '%');
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// Telefon
//  If CheckList_SuchPrax.Checked[6] And (Ed_Telefon.Text <> '')      Then
  If CheckList_SuchPrax.Checked[6]                                  Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
     If Check_Exakt.Checked                                         Then
        Aus := 'TELEFON = '   + QuotedStr(Ed_Telefon.Text)         Else
        Aus := 'TELEFON like ' + QuotedStr('%' + Ed_Telefon.Text + '%');
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// Wurde bereits eine Anfrage verschickt?
  If CheckList_SuchPrax.Checked[7] And Check_Anfrage.Checked        Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
    If Check_Anfrage.Checked Then
       W := 1                Else
       W := 0;
    Aus := 'GEMAILT = ' + IntToStr(W);
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
// Wurde die Anfrage bereits beantwortet?
  If CheckList_SuchPrax.Checked[8] And Check_Antwort.Checked        Then
  Begin
    If GLD.URec.Praxen_SQL = GLD.PraxenDefaultSQL                   Then
       GLD.URec.Praxen_SQL := GLD.PraxenDefaultSQL + SqlW           Else
       GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + SqlA;
    If Check_Antwort.Checked Then
       W := 1                Else
       W := 0;
    Aus := 'ANTWORT = ' + IntToStr(W);
    GLD.URec.Praxen_SQL := GLD.URec.Praxen_SQL + Aus;
  End;
end;

// ---------- Suche starten ------------------------------------------------------------------------------------------------------ Privat
Procedure TFormSuchPrax.SucheStarten;
Var
  i : Integer;
begin
  SuchSQLerzeugen;
  If Check_SuchResAktiv.Checked Then
  Begin
    i := GLD.URec.Praxen_Id;
    DatMod.View_Praxis.Active  := False;
    DatMod.View_Praxis.SQL.Text := GLD.URec.Praxen_SQL;
    DatMod.View_Praxis.Open;
    DatMod.View_Praxis.Locate('ID',i,[]);
  End;
  ModalResult := mrOk;
end;

// ##### PUBLIC METHODEN ################################################################################################################

// ---------- -------------------------------------------------------------------------------------------------------------------- Public

// ##### EREIGNISSE #####################################################################################################################

// ---------- On Show -------------------------------------------------------------------------------------------------------- Ereignisse
Procedure TFormSuchPrax.FormShow(Sender: TObject);
begin
  EinstellungenLesen;
  Ed_Praxisname.SetFocus;
end;

// ---------- On Close ------------------------------------------------------------------------------------------------------- Ereignisse
Procedure TFormSuchPrax.FormClose(Sender: TObject; var Action: TCloseAction);
begin
  EinstellungenSchreiben;
end;

// ---------- Status eines Kontrollkästchens geändert ------------------------------------------------------------------------ Ereignisse
Procedure TFormSuchPrax.CheckList_SuchPraxClickCheck(Sender: TObject);
Var
  i : Integer;
begin
  If CheckList_SuchPrax.Checked[9] Then
  For i := 0 To CheckList_SuchPrax.Count-1 Do
      CheckList_SuchPrax.Checked[i] := False;
end;

// ---------- On KeyPress Editfelder ----------------------------------------------------------------------------------------- Ereignisse
Procedure TFormSuchPrax.Ed_PraxisnameKeyPress(Sender: TObject; var Key: Char);
begin
  If Key = #13 Then
  Begin
    Key := #0;
    SucheStarten;
  End;
end;

// ---------- Button Suche starten gedrückt ---------------------------------------------------------------------------------- Ereignisse
Procedure TFormSuchPrax.Btn_SuchClick(Sender: TObject);
begin
  SucheStarten;
end;

// ---------- Edits leeren --------------------------------------------------------------------------------------------------- Ereignisse
Procedure TFormSuchPrax.Btn_ClearClick(Sender: TObject);
begin
  Ed_Praxisname.Clear;
  Ed_Strasse.Clear;
  Ed_PLZ.Clear;
  Ed_Ort.Clear;
  Ed_Homepage.Clear;
  Ed_Email.Clear;
  Ed_Telefon.Clear;
  Check_Anfrage.Checked    := False;
  Check_Antwort.Checked    := False;
end;

// ---------- Suchfenster schließen ------------------------------------------------------------------------------------------ Ereignisse
Procedure TFormSuchPrax.Btn_CloseClick(Sender: TObject);
begin
  ModalResult := mrCancel;
end;

end.

Krupi 7. Sep 2015 12:51

AW: Suchfunktion in einem DBGrid
 
Danke für die ausführlichen Hilfen!

ich werde es mir jetzt in ruhe angucken :)

Sir Rufo 7. Sep 2015 13:01

AW: Suchfunktion in einem DBGrid
 
Wird gerne vergessen geht aber auch sehr schön Delphi-Referenz durchsuchenTDataSet.OnFilterRecord wenn die Suche auf die bereits gelesenen Datensätze erfolgen soll.

Sigi55 7. Sep 2015 13:45

AW: Suchfunktion in einem DBGrid
 
Hi,

oder man nimmt:

http://www.scalabium.com/smdbgrid.htm

Da kann man oben im Grid eine "Suchzeile" einblenden.

Gruß

Sigi

Krupi 8. Sep 2015 11:40

AW: Suchfunktion in einem DBGrid
 
danke nochmals für die guten vorschläge
hab diese auch verwendet jedoch ohne gutes ergebnis
jetzt bin ich total planlos

könnte mir vllt jemand ein beispiel geben mit code, wie ich in meiner anwendung auf meine datenbank zugreife und somit eine abfrage stellen kann?

Jumpy 8. Sep 2015 11:48

AW: Suchfunktion in einem DBGrid
 
Zitat:

Zitat von Krupi (Beitrag 1315089)
danke nochmals für die guten vorschläge
hab diese auch verwendet jedoch ohne gutes ergebnis
jetzt bin ich total planlos

könnte mir vllt jemand ein beispiel geben mit code, wie ich in meiner anwendung auf meine datenbank zugreife und somit eine abfrage stellen kann?

Es wurden dir doch massig Stichworte genannt.
Es wurde dir massig Code gezeigt von Perlsau.

Klar, dass das nicht so 100% zu deiner Anwendung passt, wie auch? Wir wissen nicht was du an Code bisher hast, wie sollen wir dir da zu einem Plan verhelfen?

mkinzler 8. Sep 2015 11:55

AW: Suchfunktion in einem DBGrid
 
Es kommt auch darauf an, ob Du das Ergebnis nur lokal filtern, im Grid zu einem bestimmten DS spingen oder eine neue Abfrage starten möchtest.

Perlsau 8. Sep 2015 11:59

AW: Suchfunktion in einem DBGrid
 
Zitat:

Zitat von Krupi (Beitrag 1315089)
... jedoch ohne gutes ergebnis

Was bedeuted denn "ohne gutes ergebnis" genau?

Zitat:

Zitat von Krupi (Beitrag 1315089)
jetzt bin ich total planlos

Jetzt erst :?: :stupid:

Zitat:

Zitat von Krupi (Beitrag 1315089)
könnte mir vllt jemand ein beispiel geben mit code, wie ich in meiner anwendung auf meine datenbank zugreife und somit eine abfrage stellen kann?

Kannst du mit meinem Beispiel wirklich gar nichts anfangen? Dort wird doch ganz konkret gezeigt, wie man SQL-Befehle zusammensetzt (könnte man sicher noch optimieren) und eine Query an die Datenbank absetzt. Falls du mich damit beauftragen willst, deinen Code zu schreiben: Die Stunde kostet 50 Euro, Auftragsannahme nur gegen Vorauszahlung.

Im Grunde sagst du hier ja nur eines: "Egal was ihr mir hier erzählt, ich blick das alles nicht." Wenn das so richtig interpretiert ist, dann empfiehlt es sich, erst einmal mit leichteren Aufgaben zu beginnen und später, wenn die Grundlagen soweit erarbeitet und gefestigt wurden, schwierigere Themen wie Datenbankentwicklung anzugehen.

nahpets 8. Sep 2015 12:01

AW: Suchfunktion in einem DBGrid
 
Suchst Du sowas in der Art?
Delphi-Quellcode:
procedure Tform1.ButtonSuchmalwasClick(Sender: TObject);
var
  sSuchbegriff : String;
begin
  // Wenn es eine separate Eingabe sein soll:
  sSuchbegriff := InputBox('Nach Namen suchen','zu suchender Name:','');
  if sSuchbegriff <> '' then begin
    tabelle.Locate('Name',sSuchbegriff,[loCaseInsensitive,loPartialKey]);
  end;
end;

procedure Tform1.ButtonSuchmalwasClick(Sender: TObject);
begin
  // Suchen, was im Editfeld steht:
  if Editfeld.Text <> '' then begin
    tabelle.Locate('Name',Editfeld.Text,[loCaseInsensitive,loPartialKey]);
  end;
end;

procedure Tform1.ButtonSuchmalwasClick(Sender: TObject);
begin
  // Nur die Sätze anzeigen, bei denen der Name mit der Eingabe im Editfeld übereinstimmt.
  tabelle.Filtered    := False;
  tabelle.Filter      := Format('Name = %s ',[QuotedStr(Editfeld.Text]);
  tabelle.Filtered    := True;
end;
oder eher eine neue Abfrage für die Datenbank?
Delphi-Quellcode:
procedure Tform1.ButtonSuchmalwasClick(Sender: TObject);
begin
  qry.Close;
  qry.SQL.Text := Format('select * from Tabelle where name like %s',[QuotedStr(Editfeld.text]);
  qry.Open;
end;

mkinzler 8. Sep 2015 12:10

AW: Suchfunktion in einem DBGrid
 
Zitat:

oder eher eine neue Abfrage für die Datenbank?
markieren
Delphi-Quellcode:
Delphi-Quellcode:
procedure Tform1.ButtonSuchmalwasClick(Sender: TObject);
begin
  qry.Close;
  qry.SQL.Text := Format('select * from Tabelle where name like %s',[QuotedStr(Editfeld.text]);
  qry.Open;
end;

Dann würde ich mit einer parametrisierten Abfrage arbeiten

SQL-Code:
select
  <Feldliste>
from
  Tabelle
where
  (suchbegriff = '') or (name like :suchbegriff);
Delphi-Quellcode:
  if Trim(sSuchbegriff) <> '' then begin
    qry.ParamByName('suchbegriff').Value := '%'+Trim(sSuchBegriff)+'%';
  else
    qry.ParamByName('suchbegriff').Value := '';
  qry.Refresh;


Alle Zeitangaben in WEZ +1. Es ist jetzt 13:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz