|
[ MarkoBalkan @ 31.05.2007. 18:39 ] @
| imam bazu u kojoj su neki podaci.baza je access 2003, a VS je 2005.
recimo htio bi filtrirati po 5 razlicitih parametara.
znaci na formi imam 5 textboxeva.
filtriranje kao takvo nije problem.
ono sto je problem je velik broj kombinacija.
znaci gleda se svaki textbox sa svakim.
1 popunjeni 1,2,3,4,5 5 kom.
2 popunjena 12,13,14,15,23,24,25,34,35,45 10 kom.
3 popunjena 123,124,125,134,135,145,234,235,245,345 10 kom.
4 popunjena 1234,1235,1245,1345,2345 5 kom.
5 popunjena 12345 1 kom.
ukupno 31 kombinacija. i svaku bi mi morali stavljati u uvjet.a sta recimo da imamo 10 textboxeva.nekoliko tisuca kombinacija.
pa me zanima, kako se to rjesava jednostavnije? znam da postoji neki nacin, ali ne znam kako.
|
[ aleksandarpopov @ 31.05.2007. 18:52 ] @
Imas vise resenja :
1. Dinamicki generises sql (tj. uslove u where) upit i parametre za upit u zavisnosti od stanja txt boxova
2. Napravis npr. ovakav upit
Code:
SELECT [sifraIzdavaca]
,[nazivIzdavaca]
,[adresaIzdavaca]
,[mestoIzdavaca]
,[telefonIzdavaca]
,[email]
FROM [Izdavac]
WHERE
sifraIzdavaca = ( case @sifraIzdavaca when -1 then sifraIzdavaca else @sifraIzdavaca end)
AND nazivIzdavaca LIKE ( case @nazivIzdavaca when '' then nazivIzdavaca else @nazivIzdavaca end)
ORDER BY nazivIzdavaca
i dodelis parametrima neku default vrednost npr ovde je -1 i "" mada moze biti koju hoces i ako je vrednost u txt boxu razlicita od "" tada popunis vrednost parametra inace okidas upit sa default vrednosti parametra. Samo pazi da default ne moze da bude neka vrednost koju ces stvarno jednom da trazis :) Ne znam da li Access podrzava ovakve konstrukcije upita... proveri.
Pozdrav
[ MarkoBalkan @ 31.05.2007. 20:08 ] @
puno hvala, isprobat cu.jel ovo pod 1 drugi nacin ili je sve skupa?
ako je posebno jel mozes dati primjer i za ovo prvo?
[ aleksandarpopov @ 01.06.2007. 18:34 ] @
Da, to su posebna resenja...
Za resenje pod 1 ... to je malo komplikovanije resenje, treba da prodjes kroz kolekciju txt boxova na formi ili nekom panelu, usercontroli cemu vec stoje txt boxovi i proveravas da li je txt box.Text !="" ako jeste kreiras parametar (ali moras negde imati i tip podatka za tu kolonu u bazi - ovo resenje je primenljivije ako imas neki framework sa kojim radis...) nakalemis na tvoj sql u where klauzuli uslov npr.
Code: sifraIzdavaca=@sifraIzdavaca
na koju kolonu iz tabele ti se odnosi txt box, postavis vrednost parametra, parametar dodas u kolekciju parametara command objekta i okines upit :)
[ MarkoBalkan @ 02.06.2007. 22:08 ] @
ovo radi samo što i u prvom slučaju ide ' '.
[ MarkoBalkan @ 09.06.2007. 22:23 ] @
ovo radi samo sa sql serverom.
za access izbaci
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.Data.OleDb.OleDbException: IErrorInfo.GetDescription failed with E_FAIL(0x80004005).
at System.Data.OleDb.OleDbCommand.ExecuteCommandTextForSingleResult(tagDBPARAMS dbParams, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommandText(Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteCommand(CommandBehavior behavior, Object& executeResult)
at System.Data.OleDb.OleDbCommand.ExecuteReaderInternal(CommandBehavior behavior, String method)
at System.Data.OleDb.OleDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.OleDb.OleDbCommand.System.Data.IDbCommand.ExecuteReader(CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.FillInternal(DataSet dataset, DataTable[] datatables, Int32 startRecord, Int32 maxRecords, String srcTable, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable[] dataTables, Int32 startRecord, Int32 maxRecords, IDbCommand command, CommandBehavior behavior)
at System.Data.Common.DbDataAdapter.Fill(DataTable dataTable)
at Auti.Form1.Button1_Click(Object sender, EventArgs e) in C:\Documents and Settings\Marko\My Documents\Visual Studio 2005\Projects\Auti\Auti\Form1.vb:line 15
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
[ aleksandarpopov @ 10.06.2007. 09:25 ] @
Da izgleda da ne radi za Access, access ne podrzava when, napomenuo sam ti to u prvom postu da moguce da nece raditi. Da ti napomenem jos - ako imas NULL vrednosti polja po kojima filtriras podatke tada ce da poredi ovako-da li je null=null sto vraca false, tako da pripazis na to.
Pozdrav
[ MarkoBalkan @ 10.06.2007. 12:10 ] @
a jel postoji šta drugo (umjesto when) da se može koristiti sa access-om na isti način*
[ aleksandarpopov @ 10.06.2007. 12:19 ] @
Probaj ovako nekako
Code:
select ...
from...
where (field = @parametar or @parametar = -1)
[ Markoleo @ 07.09.2007. 19:02 ] @
Citat: aleksandarpopov: Imas vise resenja :
1. Dinamicki generises sql (tj. uslove u where) upit i parametre za upit u zavisnosti od stanja txt boxova
2. Napravis npr. ovakav upit
Code:
SELECT [sifraIzdavaca]
,[nazivIzdavaca]
,[adresaIzdavaca]
,[mestoIzdavaca]
,[telefonIzdavaca]
,[email]
FROM [Izdavac]
WHERE
sifraIzdavaca = ( case @sifraIzdavaca when -1 then sifraIzdavaca else @sifraIzdavaca end)
AND nazivIzdavaca LIKE ( case @nazivIzdavaca when '' then nazivIzdavaca else @nazivIzdavaca end)
ORDER BY nazivIzdavaca
i dodelis parametrima neku default vrednost npr ovde je -1 i "" mada moze biti koju hoces i ako je vrednost u txt boxu razlicita od "" tada popunis vrednost parametra inace okidas upit sa default vrednosti parametra. Samo pazi da default ne moze da bude neka vrednost koju ces stvarno jednom da trazis :) Ne znam da li Access podrzava ovakve konstrukcije upita... proveri.
Pozdrav
a sta ako imamo i datum, pa moramo filtrirati između dva datuma i jos po necem drugom?
[ MarkoBalkan @ 08.09.2007. 11:10 ] @
sve je rijeseno, sad se pojavio jedan novi problem, a to je da imam dva radiobuttona.
i u ovisnosti selekcije, tako mi filtrira.
kako rijesiti pomocu dva radiobuttona?
[ MarkoBalkan @ 08.09.2007. 16:21 ] @
realizirano like (case '" + radioButton1.Checked + "' when '" + false + "' then realizirano else '" + radioButton1.Checked + "' end) and realizirano (case '" + radioButton2.Checked + "' when '" + false + "' then realizirano when '" + true + "' then ovdje else '" + radioButton2.Checked + "' end)
ovo sve radi osim ovog drugog radiobuttona, kako mu reci da ako je oznaceno da ispise ne realizirane.
sta staviti umjesto "ovdje"?
treba mu reci realizirano=false.
ali javi gresku.
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|