Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Работа с Sybase через ADO Delphi / 8 сообщений из 8, страница 1 из 1
04.08.2004, 11:26
    #32634624
Maks_f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
Господа, приношу свои извенения за предыдущий вопрос по ХП, постараюсь оформлять теперь вопросы правильно.

Итак, ASE 12, клиент Delphi7 ADO, Вопрос следующий Вызываю процедуру

CREATE PROCEDURE dbo.Add_File

@sysfileid numeric(10),
@filename varchar(20),
@part_number integer ,
@begindate datetime,
@enddate datetime,
@subsystem varchar(20),
@sequence_id varchar(128)

AS

BEGIN
insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id)
Select @sysfileid = @@identity

Select sysfileid, filename, part_number, begindate, enddate, subsystem, sequence_id
from acceptfile
where sysfileid = @sysfileid
END

в цикле
Срабатывает только один раз , делает одну вставку более ничего, цикл отрабатывает множество раз проверено.

Работаю через TAdoStoredProc, при срабатывании все равно не возвращает ничего, даже в датасете не создает полей. Подскажите как правильно вызывать
...
Рейтинг: 0 / 0
04.08.2004, 18:28
    #32635709
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
Уточни теперь еще, о каком цикле идет речь? В приведеной процедуре никаких циклов не наблюдается. И она действительно должна отрабатывать одну и только одну вставку.
...
Рейтинг: 0 / 0
05.08.2004, 15:00
    #32637052
Maks_f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
Все с процедурой более не менее ясно, Sybase видимо не делает Except когда идет нарушение уникального ключа а я на это закладывался теперь разобрался
...
Рейтинг: 0 / 0
05.08.2004, 18:19
    #32637512
White Owl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
Maks_fВсе с процедурой более не менее ясно, Sybase видимо не делает Except когда идет нарушение уникального ключа а я на это закладывался теперь разобрался

Если клиент может попросить вставить запись с неуникальным ключом, то можно модифицировать процедуру вот так:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
 -- обнулим переменную 
select @sysfield=null
 -- попытаемся ее заполнить (если pk сделан на основе поля filename) 
select sysfield into @sysfield where filename=@filename
 -- если ничего не нашли - вставим новую запись 
if (@sysfiled is null) then
  insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id)
  Select @sysfileid = @@identity
end if
 -- а сейчас мы уверены что @sysfileid показывает на реальную запись 
Select sysfileid, filename, part_number, begindate, enddate, subsystem, sequence_id
from acceptfile where sysfileid = @sysfileid
...
Рейтинг: 0 / 0
09.08.2004, 10:06
    #32640328
Maks_f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
Да так и есть. sybase не выдает Exceptions. Если делаеш вставку из клиента простым инсерт то выдает Exception, подскажите как обработать Exception из процедуры чтоб он стандартно передался в вызывающее приложение?
...
Рейтинг: 0 / 0
09.08.2004, 11:31
    #32640544
Александр Спелицин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
А через какой провайдер Вы подключаетесь к ASE?
- OLE DB for ODBC,
- OLE DB for Sybase ASE,
- ...
...
Рейтинг: 0 / 0
09.08.2004, 11:34
    #32640553
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
Maks_f sybase не выдает Exceptions.

ASE не знает ничего про exceptions и выдавать он их не может.
В ASE есть сообшения, посылаемые клиенту с помошью raiserror.
ADO его ловит и может генерировать (или нет) exception.

Maks_fЕсли делаеш вставку из клиента простым инсерт то выдает Exception, подскажите как обработать Exception из процедуры чтоб он стандартно передался в вызывающее приложение?


Нет, если происходит нарушение первичного ключа или аналогичные ошибки (собственно, любые ошибка) сообщение с сервера всегда посылается клиентскому приложению, независимо от того, в процедуре этот оператор или нет. Проблема в ADO или в Дельфе, которые видимо по разному интерпретируют сообщения в двух этих случаях (нехорошие люди, я бы сказал).

Твоя же проблема в том, что ты пытаешься размазать логику обработки между клиентом и сервером. Я бы модифицировал процедуру след. образом

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE PROCEDURE Add_File 

@sysfileid numeric( 10 ), 
@filename varchar( 20 ),
@part_number integer ,
@begindate datetime,
@enddate datetime,
@subsystem varchar( 20 ),
@sequence_id varchar( 128 )

AS 
declare @rc int
select @rc =  0 

insert into acceptfile values(@filename, @part_number, @begindate, @enddate, @subsystem, @sequence_id)
select @sysfileid = @@identity, @rc = case when @@rowcount =  1  then  0  else  1  end

Select sysfileid, filename, part_number, begindate, enddate, subsystem, sequence_id
from acceptfile
where sysfileid = @sysfileid

return @rc

и на клиенте просто проверял бы код возврата хранимой процедуры.
...
Рейтинг: 0 / 0
09.08.2004, 11:51
    #32640589
Maks_f
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Работа с Sybase через ADO Delphi
Большое всем спасибо, помогло.
...
Рейтинг: 0 / 0
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Работа с Sybase через ADO Delphi / 8 сообщений из 8, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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