![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Свой TQuery [D6, MSSQL]
avsam © (2005-09-26 19:24:00)Пишу свой компонент TMyQuery. Мне нужно, чтоб он в зависимости от настроек, внутри создавал или TAdoQuery или TZQuery и имел все свойства обычного TQuery.
От какого предка лучше писать такой компонент.
На что нужно обратить внимание при работе в связке с TDataSource?
avsam (2005-09-28 19:39:00) [1]
> А по вопросу можно предложить следюущее. Везде использовать
> TDataset, просто в нужном месте создавать нужного потомка,
> с последующим приведением типов его использовать.
Спасибо за ответ. Скорее всего так и буду пробовать.
И похоже, это самый оптимальный способ
avsam (2005-09-28 19:36:00) [2]
> оппа!?? ;о)) выбор пункта меню (нажатие 1 кнопки) в интернет
> эксплорере и дальнейшее подтверждение выбора делаются специалистом
> сторонней фирмы?
> ????
:) Это у вас все просто. Тут немного сложнее.
1. Компов может быть и 50 штук (на каждом оп-оп не получится).
2. Компы могут быть на значительном расстоянии от сервера (400-500 км). Ладно, для этого есть удаленный доступ.
3. Мой час работы для фирмы стоит больше, чем час работы работника со сторонней фирмы.
4. Не вижу смысла тут оффтопик разводить. Будет желание дальше побеседовать - мое мыло: avsam@web.de
> если же они у вас на обслуживании/поддержке то цена выезда должна была > быть включена в договор обслуживания. (если менеджер не "лоханулся")
:) Где это цена выезда включена в договор? Если бы так, нас таскали бы клиенты к себе каждую неделю. Сколько билет на самолет стоит? А гостинница, суточные и т.д. Это не в Черемушки на маршрутке съездить.
А какого менеджера ты имел ввиду? Нашего, что продавал или ихнего, что покупал?
pasha_golub (2005-09-28 18:33:00) [3]ИМХО, геморрой страшнейший.
Migrating это вообще задачи класса-люкс, и так сналету сделать и то и другое. Не уверен.
А по вопросу можно предложить следюущее. Везде использовать TDataset, просто в нужном месте создавать нужного потомка, с последующим приведением типов его использовать.
Надеюсь понятно изложылсо.
Sergey13 (2005-09-28 16:14:00) [4]2[27] sniknik © (28.09.05 16:02)
> что нового даст трехзвенка, в плане работы с несколькими серверами
Для каждого сервера БД свой сервер приложений естественно нужен. Что даст? Независимость клиента например.
Я не пропагандирую 3х звенку. Просто предлагаю рассмотреть как вариант. ИМХО не хуже чем самописный кверик где "Разница в диалектах рещается путем преобразования SQL-команд "на лету"."
sniknik (2005-09-28 16:02:00) [5]Sergey13 © (28.09.05 15:53) [25]
> Странно, что вроде никто еще не упомянул трехзвенку.
хочеш поговорить об этом? ;о))
что нового даст трехзвенка, в плане работы с несколькими серверами, кроме переноса ее(этой работы с ними) на сервер? ну тот сервер что для трежвенки пишется.
sniknik (2005-09-28 15:55:00) [6]> Платить за это они тоже не хотят и не будут (в принципе логично).
если покупали программу то нелогично, апдейты как бы подразумеваются. если же они у вас на обслуживании/поддержке то цена выезда должна была быть включена в договор обслуживания. (если менеджер не "лоханулся")
а вообще это безсмысленный разговор, если у вас такие ленивые пользователи то как ты собирался им программу со своим внедренным TMyQuery ставить?
ведь это тоже будет апдейт,
и ненамного проще чем с дополнительным провайдером, про которого юзеру и знать то необязательно (в принципе даже выбором провайдера бедного юзера мучить не надо... гдето в старых настройках у вас же есть(можно узнать) с чем программа работала... параметры связи... а больше ничего и надо. "перевод" можно сделать автоматическим)
> С майкоросфта не приезжают. А приезжает работник другой фирмы и это все ставит. Что тут неправильно?
оппа!?? ;о)) выбор пункта меню (нажатие 1 кнопки) в интернет эксплорере и дальнейшее подтверждение выбора делаются специалистом сторонней фирмы?
????
открою вам глаза. они просто "бабки с вас стригут" практически ни за что. ;)
> Или ты на фирме и программер и админ и секретарь?
причем сдесь секретарь? хотя и секратари у нас эту кнопку сами нажимают... (а была одна, сама себе винду поставила(!), сам не ожидал от секретаря ;), когда компы на новые меняли а админа не было по какойто причине)
Sergey13 (2005-09-28 15:53:00) [7]Странно, что вроде никто еще не упомянул трехзвенку.
Danilka (2005-09-28 15:32:00) [8][23] avsam © (28.09.05 14:50)
А кто должен это делать? Либо кто-то из нас (что довольно дорого), либо нанимать фирму поблизости, что тоже недешево.
Клиенты сами это делать не хотят и не будут.
Что-то я не понял. А зачем вы вообще делаете новую версию, если ее ставить у клиентов все равно никто не будет?
avsam (2005-09-28 14:50:00) [9]
> ну если ты собираешся лично езьдить и и переставлять. ;)
> то да.
А кто должен это делать? Либо кто-то из нас (что довольно дорого), либо нанимать фирму поблизости, что тоже недешево.
Клиенты сами это делать не хотят и не будут.
Платить за это они тоже не хотят и не будут (в принципе логично).
> но вот например когда ты антивирус или еще лучше винду обновляеш.
> .. к тебе же никто из мелкософта не приезжает (или ??? ;
> )... а замены делаются гораздо более сложные чем смена одной
> программы с установкой нужного провайдера.
С майкоросфта не приезжают. А приезжает работник другой фирмы и это все ставит. Что тут неправильно?
Или ты на фирме и программер и админ и секретарь?
ZeroDivide (2005-09-28 13:37:00) [10]Хотя у нас у самих и написан такой механизм, но, если честно, он не так чтобы юзается... Точнее юзается, но только в 98% случаев для доступа к одной БД.
some source (modified :) ):
FindDBAdapter(DataSet).ExecuteQuery(QueryStr);
...
function FindDBAdapter(DataSet: TxDataSet): TDBAdapter;
begin
Result := DBAdapters.FindDBAdapter(DataSet);
end;
....
function TDBAdaptersList.FindDBAdapter(DataSet: TxDataSet): TDBAdapter;
var
i: Integer;
begin
Result := nil;
for i := 0 to FList.Count - 1 do
if (FList[i] as TDataSetAdapterRec).DataSetClass = DataSet.ClassType then
begin
Result := (FList[i] as TDataSetAdapterRec).DBAdapter;
Break;
end;
end;
*******************
Ну и соответственно написан базовый класс TDBAdapter (почти полностью виртуальный) и несколько его потомков (напр. TOracleDBAdapter, TFireBirdDBAdapter) реализующих собственно методы типа CreateInsertStatement и ExecuteQuery (в диалекте нужной СУБД)... На самом деле этих методов куча, но надеюсь я смысл донес.
.... А ну да, а потом еще пришлось переписать, точнее написать заново все VCL DB компоненты. Но это уже другая тема.
Короче куча сил, времени и вообще... И в итоге все равно некоторые специфические вещи приходится писать для конкретной СУБД напрямую...
В общем-то можно собрать проект под одну БД и под другую, но чтоб под всеми сразу все работало... эээ... нет... нафиг, извините. Все таки лучше [21]
ZeroDivide (2005-09-28 13:14:00) [11]Подобная унификация неизбежно приведет к существенному ограничению использумого SQL-диалекта до того минимума, который бы поддерживался всеми СУБД. А так ли оно надо? В конечном счете может оказаться что для быстоты доступа и даже для скорости разработки, выгоднее будет иметь просто еще одну (или неск.) версию (часть модулей) заточенных под конкретную СУБД. И выпускать соответственно разные билды для разных СУБД.
Может проще (и грамотнее) огранизовать управление проектом имеющим несколько видов билдов?
АлеКо (2005-09-28 08:50:00) [12]Может проще будет использовать универсальный язык данных, например XML.
Современные системы более-менее имеют поддержку этой технологии.
roottim (2005-09-28 08:27:00) [13]А ZeosLib в виде TZQuery разве не ревлизует то что тебе надо ?
sniknik (2005-09-27 21:50:00) [14]> "Переводить" обойдется дороже, чем все заново создать.
ну если ты собираешся лично езьдить и и переставлять. ;) то да.
но вот например когда ты антивирус или еще лучше винду обновляеш... к тебе же никто из мелкософта не приезжает (или ??? ;)... а замены делаются гораздо более сложные чем смена одной программы с установкой нужного провайдера.
avsam (2005-09-27 19:26:00) [15]
> у этих квери есть общий предок? есть, так объявляйте переменную
> MyQuery типа предка и вызывайте Create нужного потомка использовав
> приведение к нему.
Можно об этом поподробней?
2 sniknik:
> > 1. Что делать с существующими клиентами при обновлении
> программы.
> переводить на "новые рельсы"
Об этом можно забыть. Программа находится в разных странах, на разных континентах. "Переводить" обойдется дороже, чем все заново создать.
Val (2005-09-27 18:36:00) [16]>sniknik © (27.09.05 18:22)
я не сказал, что нельзя. сложно.
sniknik (2005-09-27 18:22:00) [17]avsam © (27.09.05 17:49) [12]
> 1. Что делать с существующими клиентами при обновлении программы.
переводить на "новые рельсы"
> 2. OLEDB/ODBC работает для Оракла медленней, чем ODAC.
по твоей схеме с TMyQuery будет еще медленнее, гарантирую. (пример связи с датасорсе смотрел? думаеш все максимально оптимально реализуеш?)
и потом почему все говорят медленнее..., и никто из тех кто говорит нормально ADO не знает? это общественное мнение такое? где его формируют? ;о))
> 3. То есть это шефу сказать?
в том числе, если его регулярно наполеоновские планы посещают.
Val © (27.09.05 18:09) [13]
> для работы с тремя разными скл-серверами?
3 не проблема, отследить можно. (есть работающая прога сервер на выбор один из - Access, MSSQL, IB 6.5 (и выше), нормально работает, без проблем)
это если пытаются "для всех" написать, вот это проблема.
Fay (2005-09-27 18:13:00) [18]AnyDAC пойдёт?
http://www.da-soft.com/
Val (2005-09-27 18:09:00) [19]>avsam © (27.09.05 17:49)
зачем тут TMyQuery?
у этих квери есть общий предок? есть, так объявляйте переменную MyQuery типа предка и вызывайте Create нужного потомка использовав приведение к нему.
> 3. То есть это шефу сказать?
это чья-то проблема кроме вашей?
вы понимаете, сколько тонкостей придется учитывать для работы с тремя разными скл-серверами?
avsam (2005-09-27 17:49:00) [20]
> ADO + нужный OLEDB/ODBC провайдер. все.
1. Что делать с существующими клиентами при обновлении программы.
2. OLEDB/ODBC работает для Оракла медленней, чем ODAC.
> не пытайтесь обьять необьятное
3. То есть это шефу сказать?