Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Программирование [игнор отключен] [закрыт для гостей] / фенечки ODAC / 11 сообщений из 11, страница 1 из 1
07.10.2005, 17:40
    #33312446
1vadik1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
перехожу тут с ADO на ODAC.
непорадовал абсолютно бестолковый хелп без единого примера..
вобщем все там так-же, но! есть properties SQLInsert, SQLUpdate, SQLDelete и хотелось бы юзать все с одном query )) так вот, что то я не пойму как это работает, в инете по odac ни одного примера так-же..
пока есть мысле делать
TOraQuery->SQL = SQLInsert;
TOraQuery->Execute();
опровергните или подтвердите! )) а лучше киньте в меня грамотным примером иллюстрирующим этот механизм..
...
Рейтинг: 0 / 0
07.10.2005, 18:34
    #33312586
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
1vadik1перехожу тут с ADO на ODAC.
Это правильно.

1vadik1непорадовал абсолютно бестолковый хелп без единого примера..
Возможно, так. Честно говоря, не испытывал потребности в хелпе по ODAC, все естественно и логично.

1vadik1вобщем все там так-же, но! есть properties SQLInsert, SQLUpdate, SQLDelete и хотелось бы юзать все с одном query ))
Хм. Надевая шапку старого и мудрого деда: Вы не работали с BDE (который я полагаю непосредственным предком ADO), не обстучались о минусы этого подхода и не знаете, для чего нужен стандартный компонент UpdateSQL.

"Один query" - плохая мысль, поскольку подразумевает то, что толстый провайдер проанализирует этот query и на основании мистических алгоритмов решит, как ему обновлять данные. В результате часто приходится искать, как надавать ему по сусалам и заставить работать как надо.

Допустим, есть такой вот select:

Код: plaintext
1.
select ... from a, b where a.a_id = b.a_id (+)

В случае update-а нужно действовать примерно так:

Код: plaintext
1.
2.
3.
4.
begin
  update a set ....
  merge into b on ....
end ;

Боюсь, ни один ADO такого не сообразит, а чтобы сообразил - придется обвешать такой кучей настроек, что программист утонет. Поэтому удобнее явно задавать операции, которые должны выполняться в случае того или иного вида редактирования датасета.

1vadik1так вот, что то я не пойму как это работает, в инете по odac ни одного примера так-же..
В ODAC есть разные компоненты, но относительно того, о чем говорите - посмотрите в стандартном хелпе, как пользоваться связкой TQuery/TUpdateSQL, очень похоже.

1vadik1
пока есть мысле делать
TOraQuery->SQL = SQLInsert;
TOraQuery->Execute();
Абсолютно незачем. Куча ручного кодирования того, что можно и нужно автоматизировать (и что уже автоматизировано).
...
Рейтинг: 0 / 0
07.10.2005, 19:17
    #33312655
Vladimir Zheleznyak
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
В ODAC есть каталог с Demos, там многое отображено.
Кроме всего прочего, есть TOraSmartQuery, который как-раз и реализует алгоритмы автоматической генерации всевозможных UPDATE. Конечно, со сложными запросами он не справляется, но в 95% его достаточно.
...
Рейтинг: 0 / 0
07.10.2005, 22:05
    #33312763
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
softwarerХм. Надевая шапку старого и мудрого деда: Вы не работали с BDE (который я полагаю непосредственным предком ADO),
Ну здрасте! ADO это объектный враппер над ODBC, с BDE общего ничего нету. Кроме того что и то и другое универсальные интерфейсы доступа к БД :)

softwarer"Один query" - плохая мысль, поскольку подразумевает то, что толстый провайдер проанализирует этот query и на основании мистических алгоритмов решит, как ему обновлять данные.
При чем здесь провайдер??? Это сервер будет анализировать запрос а не провайдер. Дело провайдера отправить запрос на сервер и все.

А сколько query-объектов сделает клиент это личное дело программиста. С учетом конечно того что однажды подготовленный запрос можно использовать повторно, но количество подготовленных запросов которые может помнить сервер ограничено :)
...
Рейтинг: 0 / 0
08.10.2005, 13:08
    #33312967
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
Vladimir ZheleznyakКроме всего прочего, есть TOraSmartQuery,
Я так понимаю, именно о нем автор и спрашивает :)

Vladimir Zheleznyak который как-раз и реализует алгоритмы автоматической генерации всевозможных UPDATE. Конечно, со сложными запросами он не справляется, но в 95% его достаточно.
Интерактивной. То есть не "софт подумал и решил", как в случае того же ADO, а "программист нажал кнопку, что именно сгенерировать, и потом, если нужно, подправил руками". Что есть абсолютно правильный в данном случае подход.
...
Рейтинг: 0 / 0
10.10.2005, 15:31
    #33315336
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
White OwlНу здрасте! ADO это объектный враппер над ODBC,
Уже интересно. Сейчас специально убрал ODBC-шные DLL-ки - а ADO, сволочь, коннектится как ни в чем не бывало.

White Owlс BDE общего ничего нету. Кроме того что и то и другое универсальные интерфейсы доступа к БД :)
И то, и другое - куда больше, чем универсальный интерфейс доступа; к таковым относятся как раз ODBC/JDBC. Впрочем, считайте как хотите - тема сравнения этих двух технологий во-первых великовата для побочного обсуждения, а во-вторых, малоинтересна, потому как обе технологии изрядно кривы и лучшее, что с ними можно сделать - побыстрее отказаться.
...
Рейтинг: 0 / 0
10.10.2005, 18:22
    #33315839
1vadik1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
softwarer
1vadik1вобщем все там так-же, но! есть properties SQLInsert, SQLUpdate, SQLDelete и хотелось бы юзать все с одном query ))
Хм. Надевая шапку старого и мудрого деда: Вы не работали с BDE (который я полагаю непосредственным предком ADO), не обстучались о минусы этого подхода и не знаете, для чего нужен стандартный компонент UpdateSQL.

You may prefer to use directly SQLInsert, SQLUpdate and SQLDelete properties of TCustomOraQuery descendants.
Это фраза из хелпа к TOraUpdateSQL...

softwarer
Допустим, есть такой вот select:

Код: plaintext
1.
select ... from a, b where a.a_id = b.a_id (+)

В случае update-а нужно действовать примерно так:

Код: plaintext
1.
2.
3.
4.
begin
  update a set ....
  merge into b on ....
end ;

Боюсь, ни один ADO такого не сообразит, а чтобы сообразил - придется обвешать такой кучей настроек, что программист утонет. Поэтому удобнее явно задавать операции, которые должны выполняться в случае того или иного вида редактирования датасета.

да и не надо чтобы сообразил.. я вообще-то спрашивал про основную метоологию работы с cв-вами SQLInsert и т.д... запросики я и сам могу написать, хотя возможность генерации очень порадовала..

softwarer
1vadik1
пока есть мысле делать
TOraQuery->SQL = SQLInsert;
TOraQuery->Execute();
Абсолютно незачем. Куча ручного кодирования того, что можно и нужно автоматизировать (и что уже автоматизировано).

хм... хочется подробностей...
...
Рейтинг: 0 / 0
10.10.2005, 18:38
    #33315867
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
1vadik1
Возможно, я не понял Вас и ответил на другое, нежели Вы спрашивали. ODAC использует эти свойства для того, чтобы модифицировать данные датасета, то есть если Вы будете их редактировать - при сохранении будут выполнены указанные Вами DML-операторы для измененных данных.
...
Рейтинг: 0 / 0
10.10.2005, 18:49
    #33315890
1vadik1
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
softwarer 1vadik1
Возможно, я не понял Вас и ответил на другое, нежели Вы спрашивали. ODAC использует эти свойства для того, чтобы модифицировать данные датасета, то есть если Вы будете их редактировать - при сохранении будут выполнены указанные Вами DML-операторы для измененных данных.
ok. тогда насколько я понял: передача параметров в эти св-ва невозможна, там можно хранить только статический SQL ну или присваивать как я предлагал
SQL = SQLInsert
а далее
TOraQuery->ParameterByName(...)
..
и еще один вопросик в тему:
почему не пашет
Код: plaintext
1.
2.
DM->DS->DataSet->Filter = "FULL_NAME like '%" + edFilter->Text + "%'";
DM->DS->DataSet->Filtered = true; 
на ado этот код отлично работал а тут не возвращает ничего... отфильтровывает все записи...
...
Рейтинг: 0 / 0
10.10.2005, 19:12
    #33315938
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
softwarer White OwlНу здрасте! ADO это объектный враппер над ODBC,
Уже интересно. Сейчас специально убрал ODBC-шные DLL-ки - а ADO, сволочь, коннектится как ни в чем не бывало.
Вполне возможно. ADO может использовать ODBC, OLE DB или иметь свои собственные функции интерфейса к БД. Это зависит в первую очередь от того к какой базе данных делается подключение. Библиотеки ADO умеют самостоятельно подключаться к MS SQL например, но не умеют к MySQL. А рождался ADO как раз в качестве объектного враппера.
...
Рейтинг: 0 / 0
10.10.2005, 19:32
    #33315971
softwarer
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
фенечки ODAC
1vadik1ok. тогда насколько я понял: передача параметров в эти св-ва невозможна,
Если иметь в виду "каких-то дополнительных, нестандартных параметров" - возможно, что и нельзя; честно говоря, не выяснял этот вопрос за ненужностью. Как минимум, можно перекрыть метод PerformSQL и там сделать абсолютно что угодно.

Вопрос в том, пожалуй, что если при сохранении недостаточно данных, которые уже имеются в датасете, и нужно притянуть что-то совершенно нестандартное - пожалуй, правильно таки будет использовать свойство UpdateObject и именно ему доверить "совершенно нестандартное". Стандартные компоненты этого не обеспечивают, но легко реализовать собственного наследника, где сделать все нужное.

1vadik1и еще один вопросик в тему:
почему не пашет
Код: plaintext
1.
2.
DM->DS->DataSet->Filter = "FULL_NAME like '%" + edFilter->Text + "%'";
DM->DS->DataSet->Filtered = true; 
на ado этот код отлично работал а тут не возвращает ничего... отфильтровывает все записи...
Хм. Если в сторону - так никогда не следует делать, нужно пользоваться параметрами. Достаточно ввести апостроф в строку фильтра, чтобы понять, почему. Ну или не просто апостроф, а что-нибудь типа ' or '%' = ' А так - должно работать, ищите какую-либо мелочь, в которой ошибка.
...
Рейтинг: 0 / 0
Форумы / Программирование [игнор отключен] [закрыт для гостей] / фенечки ODAC / 11 сообщений из 11, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]