0

このフォームでは、paradox 7 データベースに接続してTable1(「ZEMLJA」、「KATEGORIJA」、および「NAZIV」の 3 つの列) を使用しています。DataSource1にもDBGrid1接続されていDataSource1ます。ここにも 3 つの編集ボックス ( Edit1Edit2およびEdit3) があります。

ヘッダーファイルに次を入れました:

public: // User declarations    
__fastcall TForm4(TComponent* Owner);    
void Filtriraj(AnsiString szZemljaAsterix, AnsiString szKategorijaAsterix, AnsiString szNazivAsterix, AnsiString szNoviAsterix);    

私の cpp ファイルは次のようになります。

#include <vcl.h>
#pragma hdrstop

#include “Unit4.h”
//—————————————————————————
#pragma package(smart_init)
#pragma resource “*.dfm”
TForm4 *Form4;
//—————————————————————————
__fastcall TForm4::TForm4(TComponent* Owner): TForm(Owner)
{
}
//—————————————————————————
void TForm4::Filtriraj(AnsiString szZemljaAsterix, AnsiString szKategorijaAsterix, AnsiString szNazivAsterix, AnsiString szNoviAsterix)
{
    AnsiString szUslov=””;

    if( !Edit3->Text.IsEmpty() )
    {
        szUslov = “ZEMLJA = ‘” + Edit3->Text + szZemljaAsterix + “‘”;
    }


    if( (!Edit4->Text.IsEmpty()) && (!Edit3->Text.IsEmpty()) )
    {
        szUslov = szUslov + “and KATEGORIJA = ‘” + Edit4->Text + szKategorijaAsterix + “‘”;
    }
    else if( (!Edit4->Text.IsEmpty()) && (Edit3->Text.IsEmpty()) )
    {
        szUslov = “KATEGORIJA = ‘” + Edit4->Text + szKategorijaAsterix +”‘”;
    }

    if( !Edit5->Text.IsEmpty() )
    {
        if(szUslov!=””)
            szUslov = szUslov + “and NAZIV = ‘” + Edit5->Text + szNazivAsterix + “‘”;
        else
            szUslov = szUslov + “NAZIV = ‘” + Edit5->Text + szNazivAsterix + “‘”;
    }

    Table3->Filter = szUslov;
    Table3->Filtered = true;
}
//—————————————————————————
void __fastcall TForm4::Edit3Change(TObject *Sender)
{
    Filtriraj(“*”,””,””,””);
}
//—————————————————————————
void __fastcall TForm4::Edit4Change(TObject *Sender)
{
    Filtriraj(“”,”*”,””,””);
}
//—————————————————————————
void __fastcall TForm4::Edit5Change(TObject *Sender)
{
    Filtriraj(“”,””,”*”,””);
}
//—————————————————————————
void __fastcall TForm4::Edit3KeyPress(TObject *Sender, char &Key)
{
    if( Key==13 )
    {
        Edit4->SetFocus();
        if(Edit3->Text==””)
            Edit3->Text =””;
        else
            Edit3->Text = Edit3->Text + “*”;
        Filtriraj(“”,””,””,””);
    }
}
//—————————————————————————
void __fastcall TForm4::Edit4KeyPress(TObject *Sender, char &Key)
{
    if( Key==13 )
    {
        Edit5->SetFocus();
        if(Edit4->Text==””)
            Edit4->Text =””;
        else
            Edit4->Text = Edit4->Text + “*”;
        Filtriraj(“”,””,””,””);
    }
}
//—————————————————————————
void __fastcall TForm4::Edit5KeyPress(TObject *Sender, char &Key)
{
    if( Key==13 )
    {
        DBGrid1->SetFocus();
        if(Edit5->Text==””)
            Edit5->Text =””;
        else
            Edit5->Text = Edit5->Text + “*”;

        Filtriraj(“”,””,””,””);
    }
}    
//—————————————————————————    

このコードはうまく機能し、各編集ボックスは正しくフィルタリングDBGridされ、単語の一部だけを入れたい場合は完全に機能しますが、このフィルターは のセルの先頭から機能しDBGridます。

セル内のどこにでも単語を見つけるフィルターを作成したいと思います。たとえば、多くのセルを意味する行がたくさんあり、1 つのセルに「I WILL GO TO THE SCHOOL TOORRROW」と書かれています。編集ボックス SCHOOL に入力すると、セルに SCHOOL という単語が表示され、それが表示されます。何らかの方法で問題ではありません (行セレクターまたはフィルターは気にしません)。

誰かがこの問題を解決する簡単な方法を知っている場合。

4

2 に答える 2