Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Pomoc oko pretrage u DBGrid

[es] :: C/C++ programiranje :: Pomoc oko pretrage u DBGrid

[ Pregleda: 1265 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Pomoc oko pretrage u DBGrid07.06.2010. u 11:18 - pre 169 meseci
Da ne bi pisao brdo teksta evo slika.



Znaci kada su selektovani svi shecboxovi, popunjeni editi, kada stisnes na trazi treba da pretrazuje u bazi, znaci ako to ime i prezime sadrzi tu adresu onda da ga nadje...ili ako selektiras prvi i treci checkbox onda da trazi to ime dal sadrzi tu adresu i sl. Da ne kazete da sam ljenivac i samo trazim pomos...za pretrazivanje samo po jednoj koloni koristim ovaj kod

Code:

void __fastcall TForm1::Button4Click(TObject *Sender)
{
TLocateOptions SearchOptions;
SearchOptions << loPartialKey;
 bool locateSuccess = ADOTable1->Locate("Ime", Edit1->Text,SearchOptions);
if(locateSuccess)
  ShowMessage("Pronajdeno!");
else
  ShowMessage("Ne postoi");
}





Kude tumbe i tri bandere
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
212.200.65.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko pretrage u DBGrid07.06.2010. u 12:24 - pre 169 meseci
Ovde imas primer kako iskoristiti vise od jedne kolone za pretrazivanje:
Citat:

VCL Help:
TCustomADODataSet::Locate

Searches the dataset for a specified record and makes that record the current record.

virtual bool __fastcall Locate(const AnsiString KeyFields, const System::Variant &KeyValues, TLocateOptions Options);

Description

Call Locate to search a dataset for a specific row and make it the current row.

KeyFields is a string containing a semicolon-delimited list of field names on which to search.

KeyValues is a variant that specifies the values to match in the key fields. If KeyFields lists a single field, KeyValues specifies the value for that field on the desired row. To specify multiple search values, pass a variant array as KeyValues, or construct a variant array on the fly using the VarArrayOf routine. For example:

TLocateOptions Opts;

Opts.Clear();
Opts << loPartialKey;
Variant locvalues[2];
locvalues[0] = Variant("Sight Diver");
locvalues[1] = Variant("P");

CustTable->Locate("Company;Contact", VarArrayOf(locvalues, 1), Opts);

Options is a set that optionally specifies additional search latitude when searching on string fields. If Options contains the loCaseInsensitive setting, then Locate ignores case when matching fields. If Options contains the loPartialKey setting, then Locate allows partial-string matching on strings in KeyValues. If Options is an empty set, or if KeyFields does not include any string fields, Options is ignored.

Locate returns true if it finds a matching row, and makes that row the current one. Otherwise Locate returns false.

U gornjem primeru, pretraga se vrsi po poljima: "Company" i "Contact", a trazi se "Sight Driver" i "P", odnosno ono sto pocinje na te sadrzaje, jer je postavljeno "loPartialKey".

Dakle, dinamicki, na osnovu check boxova i njihovog sadrzaja treba da kreiras recimo string:
Kolone = "Ime;Prezime;Adresa"

... i da postavis:
locvalues[0] = Variant(Edit1->Text);
locvalues[1] = Variant(Edit2->Text);
locvalues[2] = Variant(Edit3->Text);

Pretraga (broj 2 znaci da imas 3 elementa:0,1,2):
ADOTable1->Locate( Kolone, VarArrayOf(locvalues, 2), Opts );



Ipak, taj dizajn nije bas najidealniji za pretragu. Bolje je da DBGrid (preko DataSource ili DataSet, zaboravio sam) bude u u vezi sa nekim TADOQuery-jem, i da dinamicki u OnChange dogadjaju kreiras upit koji odgovara sadrzajima Edit polja.

U principu, sve se svodi na dinamicko generisanje upita:
SELECT IDDen, Ime, Prezime, Adresa
FROM TaTabela
WHERE Ime LIKE '%I%' and Prezime LIKE '%C%' and Adresa LIKE '%S%'

Ovime bi pretraga suzavala izbor pred tvojim ocima, dok ne dodjes do rezultata.


[Ovu poruku je menjao X Files dana 07.06.2010. u 13:36 GMT+1]
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
212.200.65.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko pretrage u DBGrid07.06.2010. u 12:35 - pre 169 meseci
To dinamicko formiranje pretrage bi moglo da se izvede ovako nekako

// netestirano

--- BUTTON ---
Code:


// ovde tvoj kod za za SearchOptions
// ...

AnsiString Kolona;
int brojac=0;

if ( CheckBox1->Checked )
{
    Kolona = Kolona + "Ime;";
    locvalues[brojac] = Variant( Edit1->Text );
    ++brojac;
}

if ( CheckBox2->Checked )
{
    Kolona = Kolona + "Prezime;";
    locvalues[brojac] = Variant( Edit2->Text );
    ++brojac;
}
    

if ( CheckBox3->Checked )
{
    Kolona = Kolona + "Adresa;";
    locvalues[brojac] = Variant( Edit3->Text );
    ++brojac;
}
    
//  da se otarasis poslednjeg tacka, zarez
Kolona.SetLength( Kolona.Length()-1 );

// da se indeksni opseg svede u meru
--brojac;


ADOTable1->Locate( Kolone, VarArrayOf(locvalues, brojac), SearchOptions );
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Re: Pomoc oko pretrage u DBGrid07.06.2010. u 13:38 - pre 169 meseci
Sacu da vidim sta i kako ce da izadje... PUNOOOO HVAAAALA :)
Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Re: Pomoc oko pretrage u DBGrid07.06.2010. u 17:03 - pre 169 meseci
Kad stavim locvalues, 1 onda on pretrazuje samo locvalues[1]....ustvari ovde jednu vrednost pretrazuje u vise kolone?
ADOTable1->Locate("Kolona", VarArrayOf(locvalues, 1), Opts );
Kude tumbe i tri bandere
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Re: Pomoc oko pretrage u DBGrid08.06.2010. u 02:45 - pre 169 meseci
Mucio sam se do sada i nece i nece....evo jos jedno pitanje da skratim svoje muke :)

SELECT IDDen, Ime, Prezime, Adresa
FROM TaTabela
WHERE Ime LIKE '%I%' and Prezime LIKE '%C%' and Adresa LIKE '%S%' -Moze li mesto %I% Da mu zadam ja odakle da uzima vredost? Probo sam kao sto sam znao al nije radilo :)
Kude tumbe i tri bandere
 
Odgovor na temu

X Files
Vladimir Stefanovic
Pozarevac

SuperModerator
Član broj: 15100
Poruke: 4902
212.200.65.*

Jabber: xfiles@elitesecurity.org


+638 Profil

icon Re: Pomoc oko pretrage u DBGrid08.06.2010. u 07:50 - pre 169 meseci
Pogledaj ovaj primer:

Code:

__fastcall TForm1::TForm1(TComponent* Owner)
        : TForm(Owner)
{
        ADOQuery1->ConnectionString =
                "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +
        ExtractFilePath( Application->ExeName )+
        "baza.mdb;Persist Security Info=False";

}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormActivate(TObject *Sender)
{
        ZajednickiEditChange( this );
}
//---------------------------------------------------------------------------
void __fastcall TForm1::ZajednickiEditChange(TObject *Sender)
{
        ADOQuery1->Close();
        ADOQuery1->SQL->Clear();
        AnsiString Upit = "SELECT * FROM rasa WHERE naziv_lok LIKE '%" + Edit1->Text + "%' AND naziv_int LIKE '%" + Edit2->Text + "%'";
        ADOQuery1->SQL->Add( Upit );
        ADOQuery1->Open();

        DBGrid1->Columns->Items[0]->Width  = 30*8;
        DBGrid1->Columns->Items[1]->Width  = 30*8;
}

Prikačeni fajlovi
 
Odgovor na temu

ik0
Ivan Cekov
Information System Developer
Planning Authority Malta
Floriana, Malta

Član broj: 222385
Poruke: 158
95.180.190.*



+3 Profil

icon Re: Pomoc oko pretrage u DBGrid08.06.2010. u 17:08 - pre 168 meseci
E sada sam se snasao. Hvala svima (osim onima koji su trazili novac za pomos) X Files nemas pojma koliko si mi pomogo :)
Kude tumbe i tri bandere
 
Odgovor na temu

[es] :: C/C++ programiranje :: Pomoc oko pretrage u DBGrid

[ Pregleda: 1265 | Odgovora: 7 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.