![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Dynamic Sql, Multitier и не только [D6]
DreamDesire © (2003-05-27 10:47:00)Проблема вот в чем я пишу под Oracle, использую DOA. Компонент OracleDataSet на Апликейшн-Сервере позволяет создавать динмический запрос а для параметров есть у него свойство Variables. Создаю я запрос "select * from dept order by :MyOrer", соответственно создаю Variable с типом Substitute - это я в документации прочитал, что надо именно такой тип для таких параметров запроса. На клиенте ставлю ClientDataSet и пытаюсь создать параметр как на АппСервере - MyOrder. Но в чем загвоздка - типа Substitute в поле Params.DataType тут нет и нихрена не работает. Пытался подставить другие - фигушки. Потом попробовал посмотреть как это происходит при взаимодействии простого БДЕшного Query - та же песня: типы Query и ClientataSet тут вроде совпадают, но Substitute здесь нет и не работает ничего, хотя какие только типы воткнуть я не пытался. И где я не пытался найти ответа на этот вопрос - везде примеры типа "select * from sss where fff = :fff", где все просто как грабли.
Заранее благодарен за любую информацию
Polevi (2003-05-27 13:26:00) [1]dataset.Sql.Text:=Format("SELECT * FROM BlaBla WHERE ID=%d",[ AParam]);
DreamDesire (2003-05-27 13:08:00) [2]2 Polevi - теперь я понял суть твоего решения - это немножко не то, чего я хотел, но чувствую, что деваться некуда.
А по поводу использования AParam - я не понял где он у тебя в функции function TRDM.GetSomeQuery(AParam:integer): OleVariant;
используется - в описании есть, а в теле функции я его не нашел или я чего-то не понимаю? Разъясни, если не трудно /thanks
Polevi (2003-05-27 12:12:00) [3]2DreamDesire © (27.05.03 12:06)
возможно я чето то не понял, не работал с TOracleDataset
как используется AParam - например так
dataset.Sql.Text:=Format("SELECT * FROM BlaBla WHERE ID=%d",[AParam]);
клиент получает DATAPACKET, ему наплевать каким образом он был сформирован сервером
DreamDesire (2003-05-27 12:06:00) [4]Sergey 13
Как запасной вариант - ок, но хотелось бы сделать все красиво
Polevi
Сложновато как-то и я не понял как собственно формируется запрос - как используется AParam? Если можно поподробнее, и "не надо на клиенте никаких параметров" - то есть и на сервере не надо? - иначе (на сервере есть а на клиенте нет) ругается.
А про БДЕ Query никто не знает? - я тут покопавшись нашел подобный вопрос на форуме - в ответе на который было сказано, что Order by с параметрами нельзя - но надежда на элегнтное решение во мне все еще жива :)
Sergey13 (2003-05-27 11:16:00) [5]Единственное, что приходит на ум, это попробовать вместо прямого селекта вытаскивать данные в датасет из ХП, где входным параметром будет имя/номер поля сортировки. Геморойно слегка, но можно, ИМХО.
Polevi (2003-05-27 11:16:00) [6]не надо на клиенте никаких параметров
function TRDM.GetSomeQuery(AParam:integer): OleVariant;
var
Options: TGetRecordOptions;
dsp:TDatasetProvider;
RecsOut: Integer;
ds:TOracleDataset;
begin
dsp:=TDatasetProvider.Create(nil);
ds:=TOracleDataset.Create(nil);
//формируем строку запроса
try
dsp.DataSet:=ds;
ds.Open;
Options := [grMetaData, grReset]; //must specify meta data
Result:=dsp.GetRecords(-1, RecsOut, Byte(Options));
finally
ds.Free;
dsp.Free;
end;
end;
на клиенте
myClientDataset.Data:=Server.GetSomeQuery(666)