А можно как-нибудь обращаться к "секциям" запроса?
А можно как-нибудь обращаться к "секциям" запроса?
Можно обратиться к секции where или order by, или group by ?
Т.е. например есть запрос SELECT * FROM table1 WHERE field1=1
IBDataSet1.SQL(WHERE):='field2=2';
в результате запрос:
SELECT * FROM table1 WHERE field2=2
Т.е. например есть запрос SELECT * FROM table1 WHERE field1=1
IBDataSet1.SQL(WHERE):='field2=2';
в результате запрос:
SELECT * FROM table1 WHERE field2=2
Re: А можно как-нибудь обращаться к "секциям" запр
IBDataSet1.SelectSQL(WHERE):='field2=2';Antoxa писал(а): IBDataSet1.SQL(WHERE):='field2=2';
-
- Сообщения: 250
- Зарегистрирован: 25 июл 2007, 21:33
Re: А можно как-нибудь обращаться к "секциям" запр
Ну, можно использовать FibDataset там есть макросы, можно вообще чёрта лысого сделать, а не только условие во WHERE поменять Как вариант.
-
- Сообщения: 18
- Зарегистрирован: 20 сен 2006, 09:18
Re: А можно как-нибудь обращаться к "секциям" запр
создай запрос с параметрами.
типа:
перед открытием делай:
ps: давно занялся программированием и БД?
типа:
Код: Выделить всё
select
f1,
f2,
f3
from
t1
where
f1=:prmF1
Код: Выделить всё
IBDataSet1.ParamByName('prmF1'):=something;
Re: А можно как-нибудь обращаться к "секциям" запр
Прежде чем писать всякое, почитай чего хочет автор.dragon_art писал(а):ps: давно занялся [censored] ?
Какой параметр я должен подставить в твой запрос, если хочу изменить поле для сравнения?
Re: А можно как-нибудь обращаться к "секциям" запр
Вот как нечто подобное сделал я.Antoxa писал(а):Можно обратиться к секции where или order by, или group by ?
Т.е. например есть запрос SELECT * FROM table1 WHERE field1=1
IBDataSet1.SQL(WHERE):='field2=2';
в результате запрос:
SELECT * FROM table1 WHERE field2=2
Сначала нам понадобится инструментарий:
Код: Выделить всё
//копия хвоста
String CopyTail(String s, int pos)
{
return s.SubString(pos, s.Length()-pos+1);
}
//отрезать хвост
void CutTail(String *s, int pos)
{
s->Delete(pos, size(s)-pos+1);
}
//перенести хвост, начиная с данной подстроки
void MoveTail(String *s, String mark, String *tail)
{
int pos = s.Pos(mark);
if(pos == 0)
{
*tail = "";
return;
}
*tail = CopyTail(*s, pos);
CutTail(s, pos);
}
Код: Выделить всё
//разделить оператор SQL на части
void SplitSQL(String SQL, String *S, String *F, String *W, String *O, String *G, String *H)
{
MoveTail(&SQL, HAVING, H);
MoveTail(&SQL, GROUP_BY, G);
MoveTail(&SQL, ORDER_BY, O);
MoveTail(&SQL, WHERE, W);
MoveTail(&SQL, FROM, F);
*S = SQL;
}
Код: Выделить всё
//задать секцию WHERE
void SetWhereList(TStrings *SQL, String s)
{
String S, F, W, O, G, H;
SplitSQL(SQL->Text, &S, &F, &W, &O, &G, &H);
W = "";
if(s != "")
W = String("WHERE\n")+s+"\n";
//аккуратно упакуем
SQL->Text = S+F+W+O+G+H;
}
Код: Выделить всё
SetWhereList(IBDataSet1.SQL, "field2=2");
-
- Сообщения: 18
- Зарегистрирован: 20 сен 2006, 09:18
Re: А можно как-нибудь обращаться к "секциям" запр
прошу прощения у Antoxa...WildSery писал(а):...
вариант: юзать динамические запросы.
или то, что предлагает Kotъ-Begemotъ