|
|
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Проблема. Сервер SQL2000, клиент VFP7, доступ через ODBC. В триггере есть строка IF (УСЛОВИЕ=ЛОЖЬ) BEGIN RAISERROR('ОШИБКА',16,1) ROLLBACK RETURN END В QA ошибка возвращается. На VFP после команды tableupdate(), я так понимаю должно быть сообщение об ошибке (условие=ложь), но его нет и результат на клиенте неверный, пока не сделаешь requery(). Что неправильно? Помогите. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 07:38:48 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Ну, собственно, я тебе уже ответил, но могу потвторитиь и здесь: В VFP последовательность действий примерно следующая IF TableUpdate()=.F. =AERROR(laError) * Здесь анализируешь полученный массив laError * и в одном из его элементов находишь текст * прописанный тобой в RAISERROR() ENDIF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 10:58:10 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Кстати, ВладимирМ - один из самых крутых VFP программеров в "Российском VFP Клубе". Так что рекомендую прислушиваться к его советам. Без дураков. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 11:04:06 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Проблема в том, что у меня TableUpdate() возвращает .T. Хотя на SQL 100% срабатывает raiserror ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 12:54:02 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Это не ошибка SQL. Это явная проблема в VFP. Поэтому предлагаю перенести дискуссию на сайт vfpdmur. Я там описал возможные причины. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.08.2002, 14:11:30 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Я пишу RAISERROR('Ошибка, при ...', 12, 2) WITH SETERROR и все работает, просто надо сделать так чтобы была ошибка!!!, цифры 12 и 2 это не просто цифры, читай доку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.08.2002, 02:12:01 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Создал тестовую таблицу с полями id_ int, nazv char(40) и триггер CREATE TRIGGER TRIGGER1 ON dbo.TEST FOR INSERT AS declare @nazv CHAR(40) SELECT @NAZV=NAZV FROM INSERTED IF @NAZV<>'OK' BEGIN ROLLBACK RAISERROR('ОШИБКА',16,1) RETURN END Все работает, ошибка возвращается ! Но на рабочей таблице не возвращается, буду разбираться, как дойдет сообщу причину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 07:28:53 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Создал тестовую таблицу с полями id_ int, nazv char(40) и триггер CREATE TRIGGER TRIGGER1 ON dbo.TEST FOR INSERT AS declare @nazv CHAR(40) SELECT @NAZV=NAZV FROM INSERTED IF @NAZV<>'OK' BEGIN ROLLBACK RAISERROR('ОШИБКА',16,1) RETURN END Все работает, ошибка возвращается ! Но на рабочей таблице не возвращается, буду разбираться, как дойдет сообщу причину. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 07:30:52 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Попробовал через SQLexec (vfp) получил вот что: Connectivity error: Unable to retrieve specific error information. Driver is probably out of resources Я так понял драйвер не может распознать тип ошибки. Или это что-то другое? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 07:49:47 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Оказывается если в триггере используется оператор select из таблицы для которой создан триггер, то RAISERRor возвращает в фокс ошибку соединения. Переделал триггер без использовования select все заработало. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 12:19:34 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Да... Это уже из цикла "ну вы подумайте, какая связь..." Что ж, тоже буду иметь в виду. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 12:46:08 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
... если в триггере используется оператор select из таблицы для которой создан триггер... Не путай себя и других, пжлст... К таблице inserted эта байда не имеет никакого отношения, с таким же "успехом" ты мог бы поставить SELECT из любой другой доступной таблицы перед генерацией RAISERROR ... И FOX тебе с честными глазами - показал бы ту же самую "Connectivity error:" . Это именно то, о чем ты смутно догадывался в предыдущем сообщении ( ... драйвер не может распознать тип ошибки... ). Если перед генерацией ошибки в батче, или в процедуре, или в триггере - есть хоть одна успешно выполненная команда SELECT (возвращающая записи на клиента) - то FOX не может опросить ODBC-драйвер повторно, для того чтобы узнать - "а что же там дальше за ошибка-то случилась?", поэтому и ругается на то, что до драйвера ему уже не добраться... Как "победить" это и вытащить с сервера настоящий код и текст ошибки - я не нашел... (в "голом" FOX-е по крайней мере). Хотя, если не гнушаться более "современными" средствами доступа к данным чем FOX-овые ODBC-function, а использовать что-то типа oConn = CreateObject("ADODB.Connection") и oRst = CreateObject("ADODB.Recordset") , то можно получить код и текст "твоей личной" ошибки воспользовавшись методом oRst.NextRecordset() (чтобы перейти к набору данных, который содержит ошибку) и коллекцией oConn.Errors (чтобы увидеть "сгенеренную" ошибку)... Удачи!! ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 13:29:13 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
qu-qu Я так понял, что в описываемой ситуации FoxPro передается более одного результата из одного пакета. На этот случай в FoxPro есть команда SQLMORERESULTS(). Хотя, я тоже не совсем понимаю смысла в выдаче более одного результата в триггере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.08.2002, 16:27:19 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Всем спасибо. Будем умнее. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2002, 07:15:50 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
to ВладимирМ Про SQLMORERESULTS я тоже знаю... Но это как в том анекдоте: " - Do you speak english? - Yes, а хули толку?"... :-). Я его первым делом и попробовал когда попытался вытащить код этого сгенеренного RAISERROR -а... Но он честно возвратил 2-оечку (что значить - нет больше наборов для считывания). Так что - вопрос для "голого" FOX-а остается открытым... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2002, 11:23:31 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
qu-qu Да, извиняюсь, я тут вчера экспериментировал с этим вопросом. Получилась странная вещь. Сделал такую процедурку: CREATE PROCEDURE test AS select 'первая строка' select 'вторая строка' RAISERROR('Сообщение об ошибке',16,1) Так вот, через SQLMORERESULTS() удается вытащить результат первого SELECT, а вот тот, который идет непосредственно перед ошибкой гибнет безвозвратно вместе с сообщеним об ошибке :( Получается какая-то накладка - сообщение об ошибке накладывается на возвращаемое значение запроса и в результате получается непонятно что. Да, у меня SQLS7SP4+VFP6SP5. Может в VFP7 что-то в этом плане исправили? В общем, согласен. Есть проблема. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2002, 13:39:12 |
|
||
|
RAISERROR+VFP
|
|||
|---|---|---|---|
|
#18+
Добрые ЛЮДИ помогите ПОЖАЛЙУСТА настоить кодовую страницу базы. на сервере программка базу видит нормально и все надписи на руском, а на клиенской (сетевой) машине в базе в место русских надписей символы. Настройки на сервере и клиенской машине одинаковые. Что можно сделать??!!.... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.08.2002, 14:04:54 |
|
||
|
|

start [/forum/topic.php?fid=46&msg=32045775&tid=1820822]: |
0ms |
get settings: |
5ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
56ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
52ms |
get tp. blocked users: |
1ms |
| others: | 204ms |
| total: | 348ms |

| 0 / 0 |
