Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.06.19;
Скачать: CL | DM;

Вниз

Dynamic Sql, Multitier и не только   Найти похожие ветки 

 
DreamDesire ©   (2003-05-27 10:47) [0]

Проблема вот в чем я пишу под 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", где все просто как грабли.
Заранее благодарен за любую информацию


 
Sergey13 ©   (2003-05-27 11:16) [1]

Единственное, что приходит на ум, это попробовать вместо прямого селекта вытаскивать данные в датасет из ХП, где входным параметром будет имя/номер поля сортировки. Геморойно слегка, но можно, ИМХО.


 
Polevi ©   (2003-05-27 11:16) [2]

не надо на клиенте никаких параметров

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)


 
DreamDesire ©   (2003-05-27 12:06) [3]

Sergey 13
Как запасной вариант - ок, но хотелось бы сделать все красиво
Polevi
Сложновато как-то и я не понял как собственно формируется запрос - как используется AParam? Если можно поподробнее, и "не надо на клиенте никаких параметров" - то есть и на сервере не надо? - иначе (на сервере есть а на клиенте нет) ругается.

А про БДЕ Query никто не знает? - я тут покопавшись нашел подобный вопрос на форуме - в ответе на который было сказано, что Order by с параметрами нельзя - но надежда на элегнтное решение во мне все еще жива :)


 
Polevi ©   (2003-05-27 12:12) [4]

2DreamDesire © (27.05.03 12:06)
возможно я чето то не понял, не работал с TOracleDataset

как используется AParam - например так

dataset.Sql.Text:=Format("SELECT * FROM BlaBla WHERE ID=%d",[AParam]);

клиент получает DATAPACKET, ему наплевать каким образом он был сформирован сервером


 
DreamDesire ©   (2003-05-27 13:08) [5]

2 Polevi - теперь я понял суть твоего решения - это немножко не то, чего я хотел, но чувствую, что деваться некуда.
А по поводу использования AParam - я не понял где он у тебя в функции function TRDM.GetSomeQuery(AParam:integer): OleVariant;
используется - в описании есть, а в теле функции я его не нашел или я чего-то не понимаю? Разъясни, если не трудно /thanks


 
Polevi ©   (2003-05-27 13:26) [6]

dataset.Sql.Text:=Format("SELECT * FROM BlaBla WHERE ID=%d",[ AParam]);



Страницы: 1 вся ветка

Текущий архив: 2003.06.19;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.027 c
14-60411
Yakudza
2003-06-02 17:29
2003.06.19
Малколм Макдауэлл


1-60219
BDRON
2003-06-05 14:48
2003.06.19
Кириллица в заголовке


6-60311
Wonder
2003-04-15 12:04
2003.06.19
Теоретический вопрос по стеку TCP/IP


3-60046
merlot
2003-05-28 09:06
2003.06.19
Сортировка в DBGrid-е


7-60431
ers
2003-04-14 13:48
2003.06.19
Количество файлов!