Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Проблема выглядит так : таблицы на SQL связаны relationshipами, все с первичными ключами PKId (Identity). Отображаем через ADO - связываем между собой Master/Detail и в detail надо LockType=ltBatchOptimistic. При попытке постить мастера - он пытается постить детальные таблицы с FK_Id=null (еще не определен ключ у таблицы-мастера). Как с этим бороться ? Если пытаюсь запретить контролы перед постом, детальным датасетам насильно присвоить FK_Id, прочитанный из мастера, потом их постить - не записывает почему-то в базу и ошибок не дает. Насколько я почитал - простого способа нет... Предлагают не пользоваться identity, не пользовать mster/detail, все писать в базу через stored procedure. Маразм какой-то. Может кто-то сталкивался... Или готовые компоненты посоветуете... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 18:09 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Хороший, даже очень хороший стиль при работе с SQL сервером - делать все через хранимые процедуры. Они не только для сисадминов придуманы - наверное для чего то же еще. Я вот знаю для чего - для разработчиков. Чтобы 1. ускорить работу программы 2. облегчить разработку. А напрямую тянуть и редактирование данных на клиенте - это стиль dbf. Надо от него отказываться. Так что ХП - и придет вам счастте........ Серьезно - наш проект, будь он написан без ХП, я бы даже под дулом пистолета не писал. Да он бы без ХП и не заработал, потому что это несерьезно. Ну если только записную книжку.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 19:09 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Проект - записная книжка, но большая. Формализован для соответствия - таблица + несколько детайл таблиц=форма (мож с детайл формами). Данные все или вводятся ручками в поля или лукапами. Констрейнты все на сервере (и триггеры валидности). Клиент отлично обрабатывает ошибки, возвращаемые сервером. ЗАЧЕМ нам писать тонны кода для ХП, если по идее, я могу просто записать их с клиента ? В чем польза ? Я считал, что ХП существуют для а) бизнес логики, б) ограничения доступа к базам. Ни то ни другое не актуально. По существу бы чего-нибудь ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.08.2003, 19:18 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
ЗАЧЕМ нам писать тонны кода для ХП, если по идее, я могу просто записать их с клиента ? В чем польза ? Я считал, что ХП существуют для а) бизнес логики, б) ограничения доступа к базам. Ни то ни другое не актуально. Ну здрасте, приплыли... А зачем в клиенте держать запросы, а. Может для записной книжки это и подойдет, но для нормальных систем - тока работа через хп. Самое большое их приемущество - изменение логики обработки данных без внесения изменения в клиента. А вааще, круто - записная книжка на сиквеле. 8-) Интересно, скока же будет стоить такой продукт??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 08:40 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
И еще один момент, по существу. Использование хп ведет к увеличению общей производительности системы, как за счет уменьшения сетевого трафика, так и за счет ускорения выполнения кода внутри хп, по сравнению, например, с набором SQL инструкций (бач), посланых клиентом, так как хп, особенно часто используемые уже скомпилированы, оптимизированы и уже сидят в процедурном кеше, т.е. готовы к выполнению. Если все это не важно для вашей системы, тогда можете их не использовать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 08:53 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
ЗАЧЕМ нам писать тонны кода для ХП, если по идее, я могу просто записать их с клиента ? В чем польза ? Я считал, что ХП существуют для а) бизнес логики, б) ограничения доступа к базам. Ни то ни другое не актуально. Кхе-кхе :) 1. А зачем писать тонны кода на клиенте и потом для того, чтобы исправить в одном месте имя таблицы или ошибку, компилять весь проэкт и потом его еще рассылать всем пользователям. Это не времена FoxPro 2.6 for DOS, теперь все гораздо проще. 2. Ну если у вас в проекте нет никакой логики....... :) Или что тогда есть бизнес-логика для вашей группы разработчиков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 11:18 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Продукт - на MSDE. Удобно с точки зрения целостности данных, ограничения доступа, скорости разработки, стоимость серверной части - 0руб. Бизнес логика реализуется с помощью relationships, constraints и триггеров. На клиенте фактически только SELECT * FROM таблица в TADOTable указывается. Зачем нам к каждой из тридцати таблиц (а будет больше) писать процедуры тупой записи в таблицу ? Попутно встал такой вот вопрос - @@IDENTITY по BOL работает в текущей сессии. Я после вставки записи в новом TADOCommand вызываю SELECT @@IDENTITY, получаю NULL. Почему бы это ?? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 11:38 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
На клиенте фактически только SELECT * FROM таблица в TADOTable указывается. А как это, вернее куда в TADOTable вы вставляете инструкцию SELECT * FROM таблица, позвольте вас спросить? Зачем нам к каждой из тридцати таблиц (а будет больше) писать процедуры тупой записи в таблицу ? Нет, ну если тока SELECT * FROM таблица, тады, конечно... Попутно встал такой вот вопрос - @@IDENTITY по BOL работает в текущей сессии. Я после вставки записи в новом TADOCommand вызываю SELECT @@IDENTITY, получаю NULL. Почему бы это ?? А вот если бы вы юзали для вставки хп, где в резалте возвращали значение SCOPE_IDENTITY(), то и вопросов таких не было бы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 11:43 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
С select это верно... мы TADODataset используем. Но вопрос с @@IDENTITY актуален, т.к. разве может другая сессия быть в том же коннекте ? А если бы нормально сработало, то получилось бы прям замечательно :-) Задам ка я этот вопрос еще на SQL форуме :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 12:23 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Мы пойдем своим путем - хоть непроходимым и сложным, пусть и ошибочным, но своим...... ((с) Россия) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 12:29 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Пока будете пытаться работать без xp или view/trigger - все равно периодически будете напарываться на обходимые, но неприятные ситуации. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 12:36 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Задам ка я этот вопрос еще на SQL форуме :-) Лучше BOL почитать, и посмотреть, а нет ли триггера на инсерт, который вставляет записи в другую таблицу запись, одно из полей которой имеет свойство IDENTITY. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 12:57 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
...а нет ли триггера на инсерт, который вставляет записи в другую таблицу запись... А INSTEAD OF разве не то? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 16:43 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Зачем нам к каждой из тридцати таблиц (а будет больше) писать процедуры тупой записи в таблицу ? Потому что потом у Вас встанет вопрос по безопасности. И Вам придется делать какие-то предварительные проверки перед изменением данных. А потом, кто Вам сказал, что каждую процедуру нужно писать руками полностью ? Для этого, например, есть Erwin с его макросами. Вот этот макрос выдаст через запятую все поля таблицы вместе с типами полей: Код: plaintext 1. Попутно встал такой вот вопрос - @@IDENTITY по BOL работает в текущей сессии. Я после вставки записи в новом TADOCommand вызываю SELECT @@IDENTITY, получаю NULL. Почему бы это ?? А вот после каждой DML команды также рекомендуется делать всевозможные проверки. Например на то, что @@error = 0, на то, что изменена/удалена/добавлена одна и только одна запись. А в случае с добавлением в таблицу с identity нужно проверять это @@identity (либо SCOPE_IDENTITY() ) было больше нуля... И вот если хоть одна проверка не срабатывает, то происходит откат транзакции и выход из процедуры. И я, разработчик, это вижу в большинстве случаев сразу после первого (максимум третьего) запуска процедуры. И исправляю ошибку тутже, а не после получения bug-листа от тестировщика или от пользователя. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.08.2003, 20:24 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
2Александр Спелицин: >>Зачем нам к каждой из тридцати таблиц (а будет больше) писать процедуры тупой записи в таблицу ? >Потому что потом у Вас встанет вопрос по безопасности. И Вам придется делать какие-то предварительные проверки перед изменением данных В общем случае (особенно если проект - корпоративный) - согласен. В моем - это лишняя трата времени. Безопасность, обеспечиваемая аутентификацией пользователей здесь вполне достаточна, да к тому же более важно, например, что машина с базой (с сервером) доступна всем в любое время... Но это - не мои головные боли... >И Вам придется делать какие-то предварительные проверки перед изменением данных. Не понял... Если Вы про то, что будут проверки в процедурах - значит в моем случае будут введены триггеры INSTEAD OF, но это не относится к безопасности, а только к бизнес-логике. >А вот после каждой DML команды также рекомендуется делать всевозможные проверки. Проверки делаются сервером и генерируются исключения при ошибках, но дело не в этом. Записи нормально вставляются, увеличивая identity. Скорее, прав Dankov (в SQL форуме) про открытие новой сессии, пойду отрабатывать его версию... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2003, 09:47 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Фу-х, наконец-то добил проблему, попутно узнав массу интересного про возможности АДО :-)\r Если интересно, см. сюда.\r А то, насоветовали, понимашь... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 15:30 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
попутно узнав массу интересного про возможности АДО Какие твои годы ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2003, 17:05 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
2Добрый: Да уж годы не сильно маленькие, тридцатник за плечами... Но учиться надо всю жизнь. :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 08:56 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Действительно, учиться тебе и учиться, чтобы не писать все писать в базу через stored procedure. Маразм какой-то и поносить Delphi (VCL), не умея с ней работать ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 11:05 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
2Добрый: >>все писать в базу через stored procedure. Маразм какой-то Да. В моем случае маразм. Объясню еще раз, почему было такое решение. Потому что невозможно провести полноценное бизнес-обследование, получить готовое ТЗ и т.д. Процесс идет итерациями, структура отдельно взятого участка базы меняется примерно два раза до того, как удовлетворит заказчика (практически прототипирование на лету приходится делать). Введение ХП 1) очень усложнит модификацию базы (минимум в два раза), 2) не несет пока что никакой смысловой нагрузки. Следовательно : МАРАЗМ!!! Если Вы привыкли всегда все данные писать через ХП - ради бога. Но поверьте, проекты бывают разные. Не поверили? Да и ладно... >и поносить Delphi (VCL), не умея с ней работать VCL я поносил по поводу DB контролов. Абсолютно аргументированно. Не отступлюсь! Причем ПОСЛЕ того, как выучил данный участок и сделал решение на его базе. По поводу ADODataset - вроде не ругался конкретно до выяснения обстоятельств... ну, виновато АДО оказалось и аккуратность кодера, Borland получает '+', MS и кодер по '-'. Вроде поносить больше некого. Будут еще комментарии ? Даже если бы я всю жизнь только на одном VCL программил бы, то все равно учиться бы пришлось до сих пор - вот Delphi .NET выходит, MS Windows 2003, Reporting Services готовится... Не зная системы, ее архитектуры, служб, приложений третьих фирм, невозможно быть хорошим разработчиком/менеджером проекта. Я знаю, что я знаю мало, и я стараюсь все время учиться. А то, что Вы затвердили себе некий шаблон и слепо ему верите, так ведь это не в Вашу пользу... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 12:58 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
Введение ХП 1) очень усложнит модификацию базы (минимум в два раза), Я почему-то всегда считал и считаю наоборот - гораздо упрощает, эдак раз в 5 :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 13:02 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
В клиенте у нас, как правило, используются выборки SELECT * FROM Table1. С ХП я так же не смогу написать, надо будет явно указывать список полей. У меня все действия с таблицей происходят "автоматом" через компоненты и АДО. А с ХП мне надо отдельно расписывать эти действия (INS/UPD/DEL) При изменении/добавлении полей, надо будет менять их и в процедурах и в клиенте. Зачем мне здесь "третий слой", противником которого Вы, tygra, помнится, выступали ? :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 14:21 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
В клиенте у нас, как правило, используются выборки SELECT * FROM Table1. С ХП я так же не смогу написать, надо будет явно указывать список полей. Это кто такое сказал? Как хочешь, так и пишешь. Нужны все поля - пиши *. У меня все действия с таблицей происходят "автоматом" через компоненты и АДО. А с ХП мне надо отдельно расписывать эти действия (INS/UPD/DEL) Один раз сделать механику - компонент типа TUpdateSQL или так - и все. У нас раньше были бащовые формы с компонентами под действия изменения/удаления, теперь компонент. В общем, проблем нет, зато стандартно и просто. А автоматом - это не хорошо. Лучше все контролировать самому, чем полагаться на закрытый механизм. При изменении/добавлении полей, надо будет менять их и в процедурах и в клиенте. Зачем мне здесь "третий слой", противником которого Вы, tygra, помнится, выступали ? Да нет тут никакого слоя - а в запросе, который в клиенте, не надо список полей менять? Надо. И в компонент добавлять поля - в ADODataSet - надо. Или у вас динамический список полей? Ну уж это никак..... Так что ухудшения в применении ХП нет, а вот улучшений - хоть соли :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 15:39 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
2 Mik Prokoshin У меня все действия с таблицей происходят "автоматом" через компоненты и АДО. Бошку бы открутить мелкомягким, за то, что у них там все на автомате. Дайте возможность разработчику самому решать какую инструкция посылать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 15:50 |
|
||
|
MSSQL+identity+TADODataset
|
|||
|---|---|---|---|
|
#18+
>>В клиенте у нас, как правило, используются выборки SELECT * FROM Table1. С ХП я так же не смогу написать, надо будет явно указывать список полей. >Это кто такое сказал? Как хочешь, так и пишешь. Нужны все поля - пиши *. В клиенте-то напишу. А в ХП-то поля перечислять придется. >>У меня все действия с таблицей происходят "автоматом" через компоненты и АДО. А с ХП мне надо отдельно расписывать эти действия (INS/UPD/DEL) >Один раз сделать механику - компонент типа TUpdateSQL или так - и все. У нас раньше были бащовые формы с компонентами под действия изменения/удаления, теперь компонент. В общем, проблем нет, зато стандартно и просто. А автоматом - это не хорошо. Лучше все контролировать самому, чем полагаться на закрытый механизм. Такие dataset'ы для Delphi есть на torry, хотя это ухудшение надежности работы IMHO, ошибиться в четырех SQL выражениях проще, чем в одном. Я имел в виду опять же ХП, которые надо писать и переписывать. А для чего ? Просто патаму чта ? >Да нет тут никакого слоя - а в запросе, который в клиенте, не надо список полей менять? Надо. И в компонент добавлять поля - в ADODataSet - надо. Или у вас динамический список полей? Ну уж это никак..... Открыть форму, правый click,левый click,Ctrl+A,правый click, левый click, правый click, левый click, левый click, левый click. Итого 8 кликов и одна пара клавиш. Это процедура обновления полей в датасете. Ну, еще и контролы надо, конечно, но в общем, все это придется в любом случае делать, хоть с ХП, хоть без. А тут еще где-то видел автоматическое обновление списка полей при активизации dataset... Надо бы поискать еще раз, может пригодиться (это прям ща идею навеяло)... Проектные подходы должны упрощать решение, а никак не наоборот... Да, и улучшения обещаны все такие, которые проекту пока что - как козе баян :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2003, 16:00 |
|
||
|
|

start [/forum/topic.php?fid=58&gotonew=1&tid=2117127]: |
0ms |
get settings: |
7ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
9ms |
get first new msg: |
5ms |
get forum data: |
2ms |
get page messages: |
64ms |
get tp. blocked users: |
1ms |
| others: | 244ms |
| total: | 407ms |

| 0 / 0 |
