![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Коды ошибок провайдера. [D7, MSSQL]
Bless © (2006-08-18 15:13:00)Где можно узнать перечень сабжей с текстовым описанием для SQL Server-а?
Может искать не умею, но поиск по MSDN ничего не дал.
Bless (2006-08-18 17:47:00) [21]
> Ega23 © (18.08.06 17:22) [25]
>
> Если всё-таки надо непременно з грида, то да, через CDS.
>
>
Жаль :(
Ega23 (2006-08-18 17:24:00) [22]
> Кстати, а если АРМ завис, а пользователь решил воспользовать
> случаем и пошел кофе попить, пока машина перегружается.
> А его блокировки так и остались, пока он в следующий раз
> программу не запустит? А если другой человек с этими записями
> поработать хочет, то придется ждать пока первый кофе допьет,
> вернется и запустит программу?
В общем случае - да. Но за 5 лет работы на серьёзном объекте (бюро пропусков, предприятие > 12000 сотрудников), такое ни разу не случалось.
Bless (2006-08-18 17:22:00) [23]Вот е-мое. Это ж в России рабочий день закончился. ;(
Ega23 (2006-08-18 17:22:00) [24]
> У вас гриды есть? А изменять через них можно?
> Если оба ответа "да", то как вы подсовываете ADODataset-
> у хранимку вместо сформированного им самим запроса. Или
> у вас ClientDataSet-ы кругом поверх ADODataSet-ов? Или..
> . В ощем, как у вас?
>
Гриды есть, только изменять из них нельзя. Вызывай модальный диалог, там все свойства данной сущности перечислены. Если всё-таки надо непременно из грида, то да, через CDS.
Просто в гриде зачастую очень трудно отобразить все поля сущности.
Bless (2006-08-18 17:21:00) [25]
> При старте программы все блокировки данного АРМа вычищаются
> (это если завис и не убрал сам).
Кстати, а если АРМ завис, а пользователь решил воспользовать случаем и пошел кофе попить, пока машина перегружается.
А его блокировки так и остались, пока он в следующий раз программу не запустит? А если другой человек с этими записями поработать хочет, то придется ждать пока первый кофе допьет, вернется и запустит программу?
Bless (2006-08-18 17:13:00) [26]
> clickmaker © (18.08.06 16:54) [17]
>
> 1. Клиентская прога должна работать под внутренним логином
> и паролем, который может не знать даже админ.
Гм... А если, к примеру, им часто нужны разнообразные запросы для отчетов и я хочу дать им возможность делать select-ы из некоторых таблиц (но только select-ы!), к примеру поставив Query Analizer, то придется обломаться?
Или у вас отчетные возможности таковы, что покрывают все их фантазии?
Bless (2006-08-18 17:07:00) [27]
> Ega23 © (18.08.06 17:00) [18]
>
> Да, я бы ещё один пункт добавил: никаких прямых Insert-Update-
> Delete-Select. Всё ТОЛЬКО через ХП.
Замечательный пункт. Давно хотел об этом поговорить, да не с кем :)
У вас гриды есть? А изменять через них можно?
Если оба ответа "да", то как вы подсовываете ADODataset-у хранимку вместо сформированного им самим запроса. Или у вас ClientDataSet-ы кругом поверх ADODataSet-ов? Или... В ощем, как у вас?
PS отклонились от сабжа, ну и черт с ним, это интересней ;)
Bless (2006-08-18 17:03:00) [28]Bless © (18.08.06 17:02) [19]>
Впрочем, ладно, наверное я параноик.
Bless (2006-08-18 17:02:00) [29]
> Ega23 © (18.08.06 16:51) [15]
>
> А как он соврёт? Клиент только логин-пассворд вводит, IP
> автоматом берётся.
Т.е. как в [12]? IP-адрес формирует клиентская программа, передает его серверу, который уже с этим переданным IP-адресом работает?
А кто мешает мне, вредному юзеру с язвой желудка, написать своего клиента, но вместо своего IP-адреса посылать чужой.
Права, я так понимаю, у вас на логин/пароль даются, а не на IP, т.е. новых прав я не получу, но все блокировки, наложенные этим ip-адресом, если он сейчас параллельно работает, сниму (ты ж говорил, при старте программы все блокировки данного АРМа вычищаются). А это ж нехорошо.
Ega23 (2006-08-18 17:00:00) [30]Согласен по всем пяти пунктам. Именно так у нас и построено. С первого по пятый.
Разве что ХП пока (но только пока) не шифруем, ибо откатка идёт. В финальном релизе всё зашифровано будет.
Да, я бы ещё один пункт добавил: никаких прямых Insert-Update-Delete-Select. Всё ТОЛЬКО через ХП.
clickmaker (2006-08-18 16:54:00) [31]если по хорошему, то:
1. Клиентская прога должна работать под внутренним логином и паролем, который может не знать даже админ.
2. Доступ на запись к хранимкам и базе вообще не давать никому, кроме админа и этого логина
3. Идентификация пользователей АРМ должна решаться НЕ средствами SQL, а с помощью своих собственных логинов-паролей (хэшей)
4. Хранимки надо шифровать
5. Блокировки - на уровне АРМов, а не сиквельных уровней изоляции (ну это уже Ega сказал)
Тогда не будет нехороших клиентов с нехорошими целями )
Bless (2006-08-18 16:52:00) [32]
> clickmaker © (18.08.06 16:46) [14]
> в газенваген )
:)
Ega23 (2006-08-18 16:51:00) [33]
> А если клиент соврал с нехорошими целями?
А как он соврёт? Клиент только логин-пассворд вводит, IP автоматом берётся.
clickmaker (2006-08-18 16:46:00) [34]
> А если клиент соврал с нехорошими целями?
в газенваген )
Bless (2006-08-18 16:43:00) [35]
> clickmaker © (18.08.06 16:39) [12]>
А если клиент соврал с нехорошими целями?
clickmaker (2006-08-18 16:39:00) [36]
> А как в TSQL получить IP-адрес?
передать с клиента при логоне
Bless (2006-08-18 16:30:00) [37]
> АРМ идентифицируется через IP (или сетевое имя, это как
> угодно)
А как в TSQL получить IP-адрес?
Bless (2006-08-18 16:28:00) [38]
> sniknik © (18.08.06 16:07) [7]
>
> указываеш тип обновлений по ключу. а не всей записи (Properties['Update
> Criteria'].Value:= adCriteriaKey, можно в "афтеропен" например
> )... мало того что ошибки не будет так еще и быстрее работать
> будет.
>
Можно и так, конечно. Но все же хотелось не записать изменения в базу в любом случае, а просто, раз уж я напоролся на измененную запись, перезапросить ее, чтоб была в актуальном состоянии.
Т.е. меня уставивает мой вариант в [3], где вместо
//тут типа отловил
будет что-то типа
q.Cancel;
RefreshCurRec(q);//обновить текущую запись датасета
Просто хочу уверенности, что вариантq.connection.Errors[0].NativeError=32- единсвенная реакция провайдера на измененные после меня данные.
Ega23 (2006-08-18 16:21:00) [39]
> скажи, как вы в этой таблице блокировок записей по разным
> клиентам отслеживаете факт отключения клиента (ну типа завис,
> поэтому занятые записи сам освободить не может, а жить
> дальше как-то надо)
У нас оператор - живой человек за клиентским АРМ-ом работает. Поэтому, когда запись заблокирована одним, то другой при попытке обратиться к ней (точнее - начать редактирование) получит мессадж, типа "Запись такая-то обрабатывается таким-то на таком-то АРМе". При старте программы все блокировки данного АРМа вычищаются (это если завис и не убрал сам).
> и что используется в качестве идентификатора клиента.
Список операторов храниться в БД: ФИО, логин, пароль (там сложнее, но это к делу не относится). Также есть таблица возможных АРМов. АРМ идентифицируется через IP (или сетевое имя, это как угодно). Оператор - через логин, пассворд и дату входа. Если данный оператор в данное время с данного АРМа работать не может - в газенваген.
В общих чертах так.
Bless (2006-08-18 16:11:00) [40]
> Ega23 © (18.08.06 16:00) [6]
>
> Тогда отдельную таблицу блокировок записей по разным клиентам.
>
Мне нужно именно то, что я попросил, а не альтернативные варианты решения моей проблемы. Твой вариант не даст мне никаких особых выгод в этом конкретном случае, но усложнит реализацию. Но раз уж ты его упомянул :), то (я так понимаю у вас такой подход используется, верно?) скажи, как вы в этой таблице блокировок записей по разным клиентам отслеживаете факт отключения клиента (ну типа завис, поэтому занятые записи сам освободить не может, а жить дальше как-то надо) и что используется в качестве идентификатора клиента.