[ delalt @ 22.04.2006. 23:39 ] @
Ovo dole ne radi, uz poruku da konverzija nije moguća:
Code:

SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT * FROM NEKA_TABELA WHERE (DATUM > (CURRENT_DATE - :BROJDANA));');
ClientDataSet1.FetchParams;
ClientDataSet1.Params.ParamByName('BROJDANA').AsInteger := 5; 

Ovako na primjer radi, kad nema parametra:
Code:

SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT * FROM NEKA_TABELA WHERE (DATUM > (CURRENT_DATE - 5));');

Znači, želim nešto da dobijem što se desilo unazad x-dana, u odnosu na tekući datum na serveru.
Znam kako da ovo uradim zaobilaznim putem (prvo dobijem CURRENT_DATE sa servera, oduzmem željeni broj dana,
pa zatim to predajem kao jedan drugi parametar). Ali me interesuje da li se može to uraditi na gornji način.
[ martinj @ 23.04.2006. 00:32 ] @
Probaj da umesto .AsInteger koristis .Value...
Koja je baza?
Da li ti program izbacuje neku gresku i ako izbacuje, koju?
[ delalt @ 23.04.2006. 09:07 ] @
Hvala na odgovoru, ali ne pomaže.
Probao sam razne varijante, za AsString, AsInteger, Value i drugo izbaci grešku:
'Database Server Error: conversion error from string "5"'

Baza je Firebird 1.5.2, ali ipak mislim da bi u Delphi kodu ovo trebalo riješiti, da pravilno prepozna parametar...
(ili u SQL upitu ???)
[ Bojan Kopanja @ 23.04.2006. 09:51 ] @
Stavi value, ali stavi da ti bude .Value := '5'.

Probaj pa javi .
[ delalt @ 23.04.2006. 10:40 ] @
Citat:
Strog: Stavi value, ali stavi da ti bude .Value := '5'.

Isto se dešava, ista poruka... Ako si to uspio riješiti kod sebe, daj molim te kompletan kod,
kompletan upit.
Stvarno ću ti biti zahvalan.
[ Bojan Kopanja @ 23.04.2006. 10:53 ] @
Nisam probavao kod sebe, nego sam mislio da ce raditi kako treba ... E onda probaj ovako:

Code:
begin
var Datum: TDate;
    ......
begin
  .......
  .......
  Datum:= Date - 5;

  SQLQuery1.SQL.Clear;
  SQLQuery1.SQL.Add('SELECT * FROM NEKA_TABELA WHERE (DATUM > (Datum));'); 

  .......  

i trebalo bi da radi, ako ti onaj drugi slucaj radi...

Nisam ni ovo isprobao, pisem iz glave, ali bi trebalo da radi. Ako ne proradi reci pa cu da probam bas u Delphiju .

[Ovu poruku je menjao Strog dana 23.04.2006. u 11:54 GMT+1]
[ delalt @ 23.04.2006. 11:19 ] @
@Strog
Već sam u prvoj poruci napomenuo da mogu da to uradim na način sličan ovom tvom,
s tim da Date u kodu :
Code:
 Datum:= Date - 5; 

daje tekući datum na klijentskom računaru (koji može biti pogrešno postavljen),
a ne na serveru gdje se nalazi baza, što onda ne odgovara...
Može se posebnim upitom dobiti taj datum na serveru, pa oduzeti potreban broj dana,
pa zatim to proslijediti kao parametar u upitu... i to radi.
Čini mi se ipak da bi to moglo da se uradi u jednom upitu, npr. slično tome ovo radi:
Code:
 
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT * FROM NEKA_TABELA WHERE (BROJ3 > (BROJ2 - :BROJ1));');
ClientDataSet1.FetchParams;
ClientDataSet1.Params.ParamByName('BROJ1').AsInteger := 5; 

gdje su BROJ3 i BROJ2 definisani u bazi kao Integer.
[ Bojan Kopanja @ 23.04.2006. 11:34 ] @
Da, vidis, nisam ni isao za tim da ono vraca vreme na serveru. Sry, moja greska. Pa ako nista uradio to kao sto si i sam rekao jos jednim upitom koji bi prvo povukao datum sa servera pa onda racunaj onaj datum koji ti treba, mada stvarno ne vidim zasto ono resenje iz jednog upita ne radi...
[ delalt @ 23.04.2006. 11:53 ] @
Probaću još malo kasnije da ovo riješim... možda i malo sutra
Da ne budem naporan, ali iz ovakvih primjera se dosta i nauči, kasnije bude manje glavobolje
Sve mi se čini da je tu nekakva caka oko oduzimanja datuma i broja, možda upotreba CAST...
Ako šta riješim, javiću...
[ Almedin @ 23.04.2006. 20:39 ] @
Mislim da si ti podesio da ti je parametar tipa string. Delphi metod .asinteger pretvara broj u string i u upit umjesto 5 ubacuje '5'. Trebas promijeniti tip parametra u integer.
[ Bojan Kopanja @ 24.04.2006. 11:22 ] @
U jeee, stvarno. Pa covece, ja nisam ni gledao sta pisem kad sam prvi put govorio kako da uradi upit ... Ajde probaj da uradis ovako:

Code:
Parameters.ParamByName('BROJ1').Value:= 5


Probaj pa javi ...

[Ovu poruku je menjao Strog dana 24.04.2006. u 12:24 GMT+1]
[ delalt @ 24.04.2006. 13:40 ] @
Izgleda da smo sve pomiješali, ovo dole ne radi i to treba rješavati:
Code:
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT * FROM NEKA_TABELA WHERE (DATUM > (CURRENT_DATE - :BROJDANA));');
ClientDataSet1.FetchParams;
ClientDataSet1.Params.ParamByName('BROJDANA').AsInteger := 5; 

dok je onaj primjer samo sa brojevima dat kao sličan (a nepotreban) i on radi.
Probao sam sve varijante u gornjem primjeru: AsString, AsInteger, Value..., '5', 5...
i dobijam uvijek istu grešku.
[ Bojan Kopanja @ 24.04.2006. 14:33 ] @
A cekaj malo... A zasto taj parametar ne koristis na SQLQuery1? Recimo:
Code:
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT * FROM NEKA_TABELA WHERE (DATUM > (CURRENT_DATE - :BROJDANA));');
SQLQuery1.Params.ParamByName('BROJDANA').Value:= 5;


Ajde probaj tako, pa opet javi sta je bilo ...
[ delalt @ 24.04.2006. 15:07 ] @
Hvala svima na upornosti,
molio bih još nekog ko koristi nekakvu drugu bazu da proba onaj upit...
Ovo:
Citat:
Strog: A cekaj malo... A zasto taj parametar ne koristis na SQLQuery1? Recimo:
Code:
SQLQuery1.SQL.Clear;
SQLQuery1.SQL.Add('SELECT * FROM NEKA_TABELA WHERE (DATUM > (CURRENT_DATE - :BROJDANA));');
SQLQuery1.Params.ParamByName('BROJDANA').Value:= 5;

a i ovo:
Citat:
Almedin: Mislim da si ti podesio da ti je parametar tipa string. Delphi metod .asinteger pretvara broj u string i u upit umjesto 5 ubacuje '5'. Trebas promijeniti tip parametra u integer.

se jednostavno može isprobati preko Object Inspector-a, pri dizajniranju, za TSQLQuery
unese se upit, a onda se Active postavlja na True (i dobijam poruku o grešci),
može se lako probati sa parametrom i mijenjati DataType (ftString, ftInteger...) kad se
ubaci Value npr. 5.
Hoću reći da sam svašta probao, ali izgleda da to ne može tako da prođe... ili ja nesto ocigledno ne vidim?
Zato bih i želio znati da li ovo prolazi sa nekom drugom bazom.
[ Bojan Kopanja @ 24.04.2006. 15:39 ] @
Ovo sto sam ti poslednje napisao ja koristim vec duze vreme u dosta programa i prolazi bez problema sa ADOQuery-em ( tj. ADO komponentama uopste ) i Access bazom, zato sam ti i napisao tako da probas...
[ Almedin @ 24.04.2006. 21:48 ] @
sa dbase tabelom prolazi ovaj upit

select * from TEST where (DATUM > (datum - :BROJDANA))

jest da je nelogican ali BDE ne poznaje CURRENT_DATE
[ semiconductor @ 06.05.2006. 00:46 ] @
Ja ili ne razumem ili je nesto drugo u pitanju...
Jednostavno skini datum sa servera pa oduzmi...

Zasto prosto kad moze komplikovano?