powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перевод большого проекта с BDE на ADO
23 сообщений из 23, страница 1 из 1
Перевод большого проекта с BDE на ADO
    #32299940
Moriarti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот. Ставится задача перевода большого проекта с BDE на ADO на Delphi 5.
В общих чертах все понятно, но имеется ряд вопросов.

1) TUpdateSQL - бОльшая часть логики в старой системе была замешана именно на использовании этой компоненты. Как делать сложные произвольные updat'ы для ADO запросов?

2) Соит ли рассмотреть какние-нибудь библиотеки-оболочки ADO?
Т.е. на чем вообще писать-то? На стандартных компонентах Delphi или есть какя нибудь библиотечка полезная (как по примеру: для Оракла есть ODAC)

вот вроде бы и все! Буду очень признателен за ответы и пожелания!
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32299950
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Апдейти можно выполнять через AdoCommand
2. ДАже и не знаю... Я писал на стандартных
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32299967
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что в него ADO уперлись? Что за сервер БД?
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300007
Фотография Cauchy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ADO c Delphi 5 не советую использовать.
Дело в том до 5-ой версии Delphi ADO в нем вообще не было и поэтому там много багов. В Delphi 6 большинство из них исправлены.
Про 7-ю не знаю, не использовал.
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300015
bjohny
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В 7-й багов не нашел
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300018
Moriarti
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>А что в него ADO уперлись?

Прошу прощения, не указал: СУБД MSSQL 2000
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300041
Малиновский Владимир
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, грузим в ClientDataSet и отрабатываем события по действиям пользователя...
Может, уж лучше тогда DBExpress тогда?
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300081
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Хоть на меня тут и наезжали, но уж если переходить с BDE, то лучше юзать DBExpress + ClientDataset.
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300398
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Cauchy :
ADO c Delphi 5 не советую использовать.
Дело в том до 5-ой версии Delphi ADO в нем вообще не было и поэтому там много багов. В Delphi 6 большинство из них исправлены.


С одной стороны, да баги лезут из каждого угла. С другой стороны - кажется большая часть из них это не баги, а... особенности самого ADO, мать его :)
С другой стороны, я не пробовал D6, но на D7 у меня лезли практически теже баги :(
Для D5 надо ставить Update Pack к самой Delphi и ADOUpdate. Говоря, лечут большую часть именно борландовых багов ADO. Поскольку сам поставил их раньше, чем стал использовать ADO, точно не знаю.

Вместо TUpdateSQL можно применять опцию ltBatchOptimistic.
В дополнении к стандартным компонентам есть TBetterADO, но я большого отличия не нашел.

2 pkarklin:
А чем лучше-то? DBExpress появился с 6-й версии, кажется. И не уверен, что в нем глюков меньше.
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300518
Фотография DarkCat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
pkarklin писал:Хоть на меня тут и наезжали, но уж если переходить с BDE, то лучше юзать DBExpress + ClientDataset.

Согласный.
ADO не есь гут. Старенькая вещь уже, тормозная, и если переносите большой проект, то возможно, скоро опять переносить придётся.

А в DBExpress рекомендую именно DBExpress SQLConnection + стандартный ClientDataset (через DataSetProvider) а не DBExpress-овские SQLClientDataset и SQLDataset (слишком они самостоятельные и тормозят).

...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300599
Lepsik
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DBExpress Borland официально уже похоронил. так что ADO и тoлько ADO

а кривой он только в кривых руках
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32300669
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 aag

А чем лучше-то? DBExpress появился с 6-й версии, кажется. И не уверен, что в нем глюков меньше.

Меня как раз не устроила реализация кэшированных изменений в ADO, то самое ltBatchOptimistic. Кроме того, в TClientDataSet есть много всяких вкусностей. :-) Естественно, чтоб не писать каждый раз обработчики для сохранения кэшированных изменений, пришлось наваять свой компонентик аля TUpdateSQL, но для TClientDataSet.

2 Lepsik

DBExpress Borland официально уже похоронил.

Ну счас. Вы с BDE путаете. Не мешало бы хоть раздел What's New проглядывать в хелпе.:

Database technology changes (Professional and Enterprise editions)

Borland has deprecated SQL Links; no further enhancements will be made to SQL Links and it will not be included with Delphi after 2002. Borland recommends using dbExpress for SQL server database access in Delphi .
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32301303
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Навскидку, засады, которые поджидают при переходе с BDE на ADO:
1) ADO сильно чувствительно к типу полей. Если для BDE - int, smallint, tinyint - можно все делать как TIntegerField, без разницы, лишь бы число влезло, то ADO запросто при этом может "1" в smallint перекорежить в 32767
2) все запросы ADO оформляет как sp_executesql (или sp_preparesql). Для трассировки жутко неудобно.
3) У меня была масса ошибок, типа "Row cannot be located for updating. Some values may have been changed since it was last read", "Multiple-step operation generated errors. Check each status value". Со всеми справился, но... как в анекдоте "впечатление осталось" :). В BDE с такими глюками никогда не встретишься.

2 pkarklin:
Вот дилемма... С D7 только шапочно познакомился, а тут серьезный проект. Стал писать на D5. Имеет ли смысл переходить именно на D7? И отдельно, насколько сложен переход на DBExpress, если многое завязано именно на view, instead of триггера и отложенные изменения?


Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32301320
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
С D7 только шапочно познакомился, а тут серьезный проект.

Если проект серъезный и сроки сжатые, то лучше использовать компоненты доступа, с которыми есть опыт работы. Чтоб перейти на DBExpress, придеться еще и c TClientDataSet повозиться. Чем мне понравилось DBExpress, так это тем, что это тонкая надстройка непосредственно над OLEDB. Компоненты DBExpress позволяют с наименьшими накладными расходами получить однонаправленный небуфферизированный набор данных на клиенте, чтоб потом замутит кэширование на базе TClientDataSet. У последнего тоже есть глюки, а у кого их нет. Но TClientDataSet не связывает мне руки, так как TADODataSet, то нельзя, это не делай. Вообщем, после долгих лет работы с кэшированными изменениями на основе BDE для меня другой альтернативы, кроме как DBExpress + TClientDataSet нет.
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32301344
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>1) ADO сильно чувствительно к типу полей.
TADO может быть. ADO работает как часы

>>2) все запросы ADO оформляет как sp_executesql (или sp_preparesql).
Интересно, как это у вас получилось. Ни разу не встречал. Правда я работаю
с ADO а не с TADO компонентами

>>3) У меня была масса ошибок, типа "Row cannot be located for updating. ...
В ADO (не в TADO компонентах) такие ошибки встречаются только при
своих собственных ошибках
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32301350
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>2) все запросы ADO оформляет как sp_executesql (или sp_preparesql).
Интересно, как это у вас получилось. Ни разу не встречал. Правда я работаю
с ADO а не с TADO компонентами


ADO не заварачивает в sp_executesql тока инструкции, отправляемы тока через ADOConnection.Execute. А вот вызов метода ADORecordSet.Open с запросом приводит к тому самому sp_executesql. Это есть факт.
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32301437
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
>>А вот вызов метода ADORecordSet.Open с запросом приводит к тому
>>самому sp_executesql. Это есть факт.


Факт вот.

Имеем
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
type CADORecordSet = class
  private
    FRecordSet  : _RecordSet;
  . . .
  public
    procedure     Open(wS:WideString);
    . . .
end;
procedure CADORecordSet.Open(wS:WideString);
begin
  FRecordSet.Open(wS,FConnection,FRecordSet.CursorLocation,FRecordSet.LockType, 0 );
end;


Выполняем
Код: plaintext
1.
2.
   zRS := CADORecordSet.Create(. . .);
   zRS.Open('select * from viewDOC where ...);


SQL Profiler показывает
Код: plaintext
select * from viewDOC where ...


без всяких sp_executesql
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32301471
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну конечно я имел ввиду TADO... компоненты.
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32302709
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Прошу прощения, под TADO понимается борландовские компоненты ADO???

Но там никаких sp_execute, sp_prepare, разумеется, нет. Открытие запроса идет непосредственно как Recordset.Open(...). Тогда откуда же берется эти вызовы?

Порылся в MSDN: хотя явного указания как выполняются запросы пока не нашел, но вот кусочек, который относится к MSSQL7 и ADO 2.1, не думаю, что для MSSQL2k/ADO 2.8 что принципиально изменилось.

...When using the SQLOLEDB provider with client side cursors... . When tracing the SQL statements sent by the client application with SQL Server Profiler, a sequence of statements similar to the following can be observed:
SQL Server 7.0

sp_prepare @P1 output, N'@P1 varchar(40)', N'select au_fname, au_lname
from pubs..authors where au_lname like @P1', 1 select @P1
sp_unprepare 1
sp_executesql N'select au_fname,au_lname from pubs..authors
where au_lname like @P1', N'@P1 nvarchar(2)', N'M%'

Кто может прояснить ситуацию?


Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32302742
pkarklin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 aag

Кто может прояснить ситуацию?

Ты ж сам все прояснил, приведя цитату из доки. ЕСли используются клиентские курсоры, то идет вызов sp_executesql.
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32302793
ZrenBy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ха. Действительно.

1.
TADODataSet - клиентский курсор - select top 100 * from
выполняется в обертке sp_ececutesql

2.
Теперь моя оболочка над ADO

FRecordSet.CursorLocation := adUseClient; - тоже клиентский
FRecordSet.CursorType := adOpenStatic;
FRecordSet.LockType := adLockBatchOptimistic;

select top 100 * from - никаких sp_ececutesql и в помине нет
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32303013
aag
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ага, только использовать серверные курсоры можно в весьма ограниченных случаях. В самом распостраненном - DataSet + DBGrid уже не получится.

2 ZrenBy:
И чем же отличается ваша оболочка от TADODataSet? Особенно если учесть, что все упирается все-таки в само ADO?


Nobody faults but mine... (LZ)
...
Рейтинг: 0 / 0
Перевод большого проекта с BDE на ADO
    #32303833
MaratIsk
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дерьмо это ADO в связке Delphi + MS SQL как и все предназначенное быть универсальным (всеядным). Лучше всего SDAC или ZEOS. Правда, насчет последнего нужно учитывать, что работает через db-library, т.е. устаревший способ с соответствующими ограничениями
...
Рейтинг: 0 / 0
23 сообщений из 23, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Перевод большого проекта с BDE на ADO
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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