Главная страница
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.013 c
8-60271
EagleOwl
2003-03-07 16:23
2003.06.19
Мультимедия


6-60284
esa
2003-04-07 08:56
2003.06.19
получение почты


1-60120
Gamar
2003-06-06 09:59
2003.06.19
Чтение результата в ячейке Excel


1-60214
Hek
2003-06-04 23:46
2003.06.19
Как использовать MMX SSE . . .


8-60281
Карелин Артем
2003-03-07 06:39
2003.06.19
Чем показать картинки в 100 мегов?