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

Итак, 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
Работа с Sybase через ADO Delphi
    #32635709
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Уточни теперь еще, о каком цикле идет речь? В приведеной процедуре никаких циклов не наблюдается. И она действительно должна отрабатывать одну и только одну вставку.
...
Рейтинг: 0 / 0
Работа с Sybase через ADO Delphi
    #32637052
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все с процедурой более не менее ясно, Sybase видимо не делает Except когда идет нарушение уникального ключа а я на это закладывался теперь разобрался
...
Рейтинг: 0 / 0
Работа с Sybase через ADO Delphi
    #32637512
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с Sybase через ADO Delphi
    #32640328
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да так и есть. sybase не выдает Exceptions. Если делаеш вставку из клиента простым инсерт то выдает Exception, подскажите как обработать Exception из процедуры чтоб он стандартно передался в вызывающее приложение?
...
Рейтинг: 0 / 0
Работа с Sybase через ADO Delphi
    #32640544
Александр Спелицин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А через какой провайдер Вы подключаетесь к ASE?
- OLE DB for ODBC,
- OLE DB for Sybase ASE,
- ...
...
Рейтинг: 0 / 0
Работа с Sybase через ADO Delphi
    #32640553
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Работа с Sybase через ADO Delphi
    #32640589
Maks_f
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Большое всем спасибо, помогло.
...
Рейтинг: 0 / 0
8 сообщений из 8, страница 1 из 1
Форумы / Sybase ASA, ASE, IQ [игнор отключен] [закрыт для гостей] / Работа с Sybase через ADO Delphi
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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