Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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)


Наверх

Титульная страница Поиск, карта сайта Написать письмо