|
[ Dobar_Krle @ 14.08.2007. 19:44 ] @
| Amater sam, i izvinjavam se ako koristim pogresne izraze.
Uradio sam putem OleDBdataAdaptera sledeci upit:
CODE:
SELECT Bar_code, Datum_isteka, Datum_proizvodnje, ID_Artikla, Jedinica_mere, Naziv_artikla
FROM Artikli
WHERE (Jedinica_mere LIKE 'kom')
A zelio bi slijedeci upit, ako moze, jer ja ne znam kako:
CODE:
SELECT Bar_code, Datum_isteka, Datum_proizvodnje, ID_Artikla, Jedinica_mere, Naziv_artikla
FROM Artikli
WHERE Datum_isteka < Date()
U ovom slucaju bi Date() trebao da prestavlja trenutni datum, ali kad ovako uradim, javlja se greska da ne valja upit.
Da li se ovako nesta moze izvesti?
Napomena: Datum_isteka je u date&time formatu. Koristim Access bazu. |
[ erkan @ 14.08.2007. 22:23 ] @
ne znam je li to odgovor na tvoje pitanje ali,
kod rada sa Access bazom kada kreiras upite
koji sadrze datum tada kao 'ogranicavac' datuma koristis tarabu '#'
npr.
Code:
WHERE #datum1# > #datum2# \
i jos nesto, ovaj tvoje prvi upit sa LIKE je nesto sumnjiv (fali upitnik ili procenat), provjeri malo ;)
[ prog @ 15.08.2007. 08:40 ] @
ako prosljedjivas upit dao engine-u (engine kojim access radi) upit je u redu nema nikakve greske. greska bi jedino bila ako nisi neku kolonu dobro napisao.
medjitim pitanje je vrlo nejasno, i ja sad nagadjam:
- da li koristis dataset u koji trpas podatke iz tog upita? Ako je to u pitanju onda moras voditi racuna da upit ima primarni ključ, jer kad pozivas fill metodu
dataadaptera on ti javlja gresku.
kad bi taj isti upit prosljedjivao MS SQL-u, tada upit nebi bio validan jer SQL nepoznaje funkciju Date()
Hajde malo bolje specificiraj pitanje, ako nisam pogodio u cemu je trik
[ Dobar_Krle @ 15.08.2007. 15:34 ] @
Imam tabelu u kojoj se upisuju datumi proizvodnje i isteka roka proizvodu. Zelio bi napraviti upit gdje ce mi
izdvojiti artikle kojima nije istekao rok.
U odnosu na moje prvo postavljeno pitanje, ovaj put sam pokusao na drugi nacin, gdje koristim sledeci upit:
private void button1_Click(object sender, System.EventArgs e)
{
dataSet1.Clear();
string Constr=@"Provider=Microsoft.Jet.OLEDB.4.0;"+
@"Data Source=c:\KontrolaArtikala\bin\Debug\kontrola.mdb";
string SQL="SELECT * FROM Artikli WHERE Datum_isteka < System.DateTime.Now ";
OleDbConnection oleDbConnection1=new OleDbConnection(Constr);
OleDbDataAdapter oleDbDataAdapter1=new OleDbDataAdapter(SQL,oleDbConnection1);
oleDbCb=new OleDbCommandBuilder(oleDbDataAdapter1);
oleDbDataAdapter1.Fill(dataSet1,"Artikli");
dataGrid1.SetDataBinding(dataSet1,"Artikli");
}
I na predzadnjoj liniji koda se pojavi: Breakpoint oleDbDataAdapter1.Fill(dataSet1,"Artikli"); (An unhandled exception of type 'System.Data.OleDb.OleDbException' occurred in system.data.dll)
Koristim Access bazu gdje je format datuma date&time, ali sam citao na forumu da se treba koristiti parametrized query
kako bi se mogao upit sa datumima izvrsiti, ali ja uopste ne znam kako bi to izveo, iako sam citao na forumu neka objasnjena, ali za mene nisu bila dovoljna.
Znam da se u dataset-u prikaze datum kao string kad inportujem iz access-a.
Ovaj gore upit funkcionise kada npr. uradim ovo:
string SQL="SELECT * FROM Artikli WHERE Jedinica_mere ='KOM' ";
Tako da ostaje sumnja da je do formata datuma.
[ prog @ 15.08.2007. 20:47 ] @
Nevalja ti:
Code:
string SQL="SELECT * FROM Artikli WHERE Datum_isteka < System.DateTime.Now ";
ovo moras napisati ovako:
string SQL="SELECT * FROM Artikli WHERE Datum_isteka < #"+ System.DateTime.Now.ToString()+"#"; odnosno formatiraj datum u obliku #yyy/mm/dd#
[ Dobar_Krle @ 16.08.2007. 17:32 ] @
Uradio sam na ovakav nacin:
string SQL="SELECT * FROM Artikli WHERE Datum_isteka >
#"+System.DateTime.Now.ToString("dd-mm-yyyy HH:mm:ss")+"# ";
i radilo je na kratko, zelim reci da se nakon svakog izlaska iz forme i ponovnog pokretanja upita, broj artikala smanjivao, zapravo su nestajali, ne znam zasto, da opet nesta nisam izostavio.
Sigurno jos nesta dobro nisam uradio, ali sam pokusavao na razne nacine:
koristeci bez formata datuma :
#"+System.DateTime.Now.ToString()+"#
onda izmenom datuma:
#"+System.DateTime.Now.ToString("yyyy-mm-dd HH:mm:ss")+"#
yyyy/mm/dd
i sl., ali ne ide.
Kao sto sam rekao, ovaj prvi upit mi je radio nekoliko puta dok sam pokretao, ali posle ne, s time sa su se artikli povremeno gubili.
Ne znam u cemu je sada problem.
[ mirobor @ 21.08.2007. 12:29 ] @
Za access upotrebljavaj upitnik , pa adapteru dodaj parametar, tako je string uvijek dobro formatiran!
string SQL="SELECT * FROM Artikli WHERE Datum_isteka < ?";
OleDbConnection oleDbConnection1=new OleDbConnection(Constr);
OleDbDataAdapter oleDbDataAdapter1=new OleDbDataAdapter(SQL,oleDbConnection1);
oleDbDataAdapter1.SelectCommand.Parameters.Add("Datum_isteka", DateTime.Now());
itd....
[ Dobar_Krle @ 21.08.2007. 18:03 ] @
Zelim se zahvaliti erkan, prog i mirobor koji su mi pomogli da resim ovaj problem.
U medjuvremenu sam nesta uradio na ovaj nacin:
string SQL="SELECT * FROM Artikli WHERE Datum_isteka > #"+textBox1.Text+"# "
ali u textbox-u je format mm/dd/yyyy, znam da se i to moze ispraviti promenom formata.
Jos jednom hvala.
[ mirobor @ 21.08.2007. 20:47 ] @
Znam da mnogi pocetnici zaziru od reci "parametar", ali to je tako jednostavno samo jedan redak ekstra, prepravi na ovaj nacin i svi problemi sa formatiranjem datuma su rjeseni.
string SQL="SELECT * FROM Artikli WHERE Datum_isteka < ?";
OleDbConnection oleDbConnection1=new OleDbConnection(Constr);
OleDbDataAdapter oleDbDataAdapter1=new OleDbDataAdapter(SQL,oleDbConnection1);
oleDbDataAdapter1.SelectCommand.Parameters.Add("Datum_isteka", DateTime.Parse(textBox1.Text));
oleDbDataAdapter1.Fill(tvojDataSet, "DataSetTabela");
.......
Copyright (C) 2001-2025 by www.elitesecurity.org. All rights reserved.
|