|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Почему никто не хочет осваивать adp? Что всех пугает? Меня сначала тоже некторые вещи насторожили. Потом, правда, разобрался. Затратил уйму времени на решение того или иного вопроса. И все из-того, что просто стоит какая-то стена отчуждения по adp. Правда была статья Павела Жидкова (Кузбас) по поводу ошибок на добавление записей на форуме по SQL. В ней он давал программу якобы устраняющую эту ошибку. На самом деле было в другом. Я это тоже выяснял 2 недели. Если бы были собеседники, я , думаю, и проблемы решались быстрее. Почему все новое воспринимается в штыки? Я провожу аналог между WinNT и Win2000pro. Сначала все плевалсь. Потом разобрались и теперь все тащутся. Такая же картина и на Accesse наблюдается. Хотелось бы все-таки найти собеседников (со вздохом). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2001, 07:50 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Откуда такой писсимизм? Я познакомился в рунете с многими людьми, разрабатывающими на Access.adp Кроме того появились отличные книги по A2K и MSSQL. Так что Вы совсем не одиноки в своих изысканиях. Если что-то интересует - спрашивайте, чем смогу тем помогу. Есть еще очень интересный форум по всем версиям Access: http://c85.cemi.rssi.ru/Access/Queries/AnsPointListAll.asp P.S. Кузбасс пишется с двумя 'c' ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2001, 08:16 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Кузбасс скопировал Ctrl+C как было написано в статье. Поближе к телу. Почти все нашел в adp, кроме замены ошибок, выдаваемых SQL сервером, на более удобочитаемые. На форуме спрашивал уже. Сказали что нужно проверить семейство ADO error. А как - так и не понял. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2001, 08:40 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Действительно, эта тема уже не раз обсуждалась. Решается двумя путями - или формировать ошибку на сервере и отдавать ее клиенту по raiserror, либо обрабатывать ошибку на клиенте и выдавать пользователю ее читабельный вариант. Я предпочитаю первый вариант. Но весь прикол в том, что при возникновении ошибки коллекция errors 'родного' аксессовского соединения всегда пуста (у этого соединения вообще много странностей). Эта ошибка немедленно передается Аксессовскому обьекту err, откуда ее можно подхватить. Если самому в коде прописать соединение, то можно работать и с коллекцией errors этого соединения. Вот только все запросы, представления и процедуры, которые являются источником записей формы или отчета, по умолчанию используют именно 'родное' соединение. С формами все просто - можно программно открыть нужный рекордсет и 'скормить' его форме, а с отчетом такой фокус уже не пройдет. Так что посмотри, может обьект err - это то что нужно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2001, 10:17 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Если я правильно понял. Private Sub Form_Error(DataErr As Integer, Response As Integer) MsgBox DataErr End Sub Всегда выдает 2757. На любую ошибку. И вопрос: если это уже где-то обсуждалось, то в каком месте? Может быть я тоже почитаю, если уже проблему решили. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.07.2001, 12:13 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
В примере пытаемся вставить запись в таблицу, поле которой не допускает отсутсвия значения: Private Sub Кнопка0_Click() On Error GoTo sub_err Dim cmd As ADODB.Command Set cmd = New ADODB.Command cmd.ActiveConnection = CurrentProject.Connection cmd.CommandText = "insert into test select null" cmd.CommandType = adCmdText cmd.Prepared = False cmd.Execute , , adExecuteNoRecords sub_exit: Set cmd = Nothing Exit Sub sub_err: Beep MsgBox Err.number & ", " & Err.Source & ", " & Err.Description Err.Clear Resume sub_exit End Sub Естно мы имеем дело с ошибкой ADO, а не с ошибкой сервера. Для работы с ошибками сервера, приведу другой пример из MDAC SDK 2.6, но с 'родным' подключением, как я уже говорил, он не прокатит: 'BeginDescriptionVB Public Sub DescriptionX() Dim cnn1 As ADODB.Connection Dim errLoop As ADODB.Error Dim strError As String On Error GoTo ErrorHandler ' Intentionally trigger an error. Set cnn1 = New ADODB.Connection cnn1.Open "nothing" Exit Sub ErrorHandler: ' Enumerate Errors collection and display ' properties of each Error object. For Each errLoop In cnn1.Errors strError = "Error #" & errLoop.Number & vbCr & _ " " & errLoop.Description & vbCr & _ " (Source: " & errLoop.Source & ")" & vbCr & _ " (SQL State: " & errLoop.SQLState & ")" & vbCr & _ " (NativeError: " & errLoop.NativeError & ")" & vbCr If errLoop.HelpFile = "" Then strError = strError & _ " No Help file available" & _ vbCr & vbCr Else strError = strError & _ " (HelpFile: " & errLoop.HelpFile & ")" & vbCr & _ " (HelpContext: " & errLoop.HelpContext & ")" & _ vbCr & vbCr End If Debug.Print strError Next Resume Next End Sub 'EndDescriptionVB ... |
|||
:
Нравится:
Не нравится:
|
|||
26.07.2001, 02:17 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Спасибо. Но-где то я не догоняю. Объявил Dim cnn1 As ADODB.Connection 'Дальше по кнопке создаю свой Connection,REcordset в этом Connection ' И привязываю этот рекордсет к форме Private Sub кнпКоннект_Click() Set cnn1 = New ADODB.Connection cnn1.Open CurrentProject.Connection Set rst = New ADODB.Recordset rst.Open "[Контрагенты]", cnn1, adOpenKeyset, adLockOptimistic, adCmdTableDirect Set Me.Recordset = rst End Sub 'Ловим ошибку в обработчике Private Sub Form_Error(DataErr As Integer, Response As Integer) If DataErr = 2757 Then MsgBox " " ' Вот здесь я пытаюсь посмотреть cnn1.errors.count ' Он у меня равен нулю End If End Sub В чем может быть причина? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.08.2001, 14:10 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Ну вот они, чудеса! On Error GoTo sub_err Dim cnErr As ADODB.Error CurrentProject.Connection.Execute "Select * from НетТакойТаблицы" sub_exit: Exit Sub sub_err: For Each cnErr In CurrentProject.Connection.Errors MsgBox cnErr.Description Next Resume sub_exit Коллекция пуста... Пробую так: On Error GoTo sub_err Dim cn As ADODB.Connection, cnErr As ADODB.Error Set cn = CurrentProject.Connection cn.Execute "Select * from НетТакойТаблицы" sub_exit: Set cn = Nothing Exit Sub sub_err: For Each cnErr In cn.Errors MsgBox cnErr.Description Next Resume sub_exit Работает! Так что, оказывается, можно работать и с 'родным' коннектом. A событие Form_Error у меня вообще не возникает. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2001, 03:13 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Так у меня тоже поучается. Но хотелось обрабатывать именно ошибку формы, а все манипуляции с сохранением данных оставить на совести Ассess Вот еще один вопрос в тему: как обрабатывать ошибку возникающую например при команде DoCMD.Runcommand acCmdSaveRecord (например не все поля заполнены) Хотлеось бы получить имена этих полей... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2001, 05:56 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Я проверяю на наличие данных в полях в событии "до обновления". Но... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2001, 07:33 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Так вот тож, а хотелось все это сделать в одном месте и на уровне базы. Далее хотелось бы написать некую универсальную процедуру обработки ошибок. И тогда не надо везде анализировать поля, да и другие ошибки выловились, но видать не судьба. З.Ы. Тяжело обащаться в нескольких форумах. А какие news группы вы могли бы посоветовать по Access? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2001, 09:57 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
Анализировать все равно придется. Или триггерами, но тогда надо убрать все связи, либо на клиенте. Пусть меня поправит что не так Павел. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2001, 11:41 |
|
Почему никто не хочет осваивать adp?
|
|||
---|---|---|---|
#18+
А чего тут поправлять - все верно. Целостность данных не должен пасти клиент - это аксиома. Следовательно в триггерах без соответствующих проверок не обойтись. Но предварительнве проверки на клиенте тоже нужны - хотя бы для минимизации бессммысленных обращений к серверу. Только в случае SQL2K можно от связей не отказываться - триггеры Instead отрабатывают до DRI. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2001, 14:24 |
|
|
start [/forum/topic.php?fid=45&fpage=1859&tid=1683761]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
32ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
44ms |
get tp. blocked users: |
2ms |
others: | 258ms |
total: | 383ms |
0 / 0 |