Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Генератор в MSSQL. Бьюсь уже 2-а дня. [MSSQL]


Страницы:   1 2

DmitrichJ ©   (2007-03-07 14:12:00) 

Добрых суток, мастера.Уже 2 дня тем и занимаюсь чтением sql.ru для того чтобы сделать элементарную задачу. Генератор на подобии в InterBase, но ничего не получается.

Задача сделать уникальное значение ID для добавлении записи в нескоко таблиц.

Дошёл до того, что создал процедуру:
CREATE PROC GEN_ID
@org VARCHAR (200),
@tporg VARCHAR (200),
@vid_deiat VARCHAR (200),
@rot INT,
@reiting INT,
@metro VARCHAR (200),
@adres VARCHAR (200),
@prim VARCHAR (200),
@NewID INT OUTPUT
AS
  INSERT INTO ORGANIZATION(ORG,TPORG,VID,ROT,REITING,METRO,ADRES,PRIM)
                    VALUES(@org,@tporg,@vid_deiat,@rot,@reiting,@metro,@adres,@prim)
  SET @NewID = SCOPE_IDENTITY()
GO

для того чтобы после вставки записи получить последнее значение IDENTITY, но немогу подключить процедуру через StoredProc1!!! Пишет, что не может найти процедуру, хотя одключаю к БД правильно, и он определяет все переменные верно.

В общем спасите!


Stanislav   (2007-03-07 15:23:00) [21]

'GEN_ID;1' нужно  GEN_ID


DmitrichJ   (2007-03-07 15:20:00) [22]

sniknik, я в этом деле новенький....

Это
DECLARE @ID INT
EXEC GEN_ID @ID OUTPUT
SELECT @ID
в Query писать?


DmitrichJ   (2007-03-07 15:13:00) [23]

Это база для организации iren.


sniknik   (2007-03-07 15:13:00) [24]

> Генератор на подобии в InterBase
вообще "кривая" задача, логика mssql отлична от IB, а писать надо в соответствии с той что у используемого...

ну а на "кривую" логику кривое же и решение... ;о))
сначала делаешь таблицу типа аналог переменной генератора в ib (ну нет в MSSQL подобных)

CREATE TABLE ValGenID (ID INT Identity(1, 1))

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

CREATE PROCEDURE GEN_ID
@NewID INT OUTPUT
AS
SET NOCOUNT ON
INSERT INTO ValGenID DEFAULT VALUES
SELECT @NewID=@@Identity
DELETE FROM ValGenID
SET NOCOUNT OFF

используешь

DECLARE @ID INT
EXEC GEN_ID @ID OUTPUT
SELECT @ID
сдесь просто вывод(select) полученного, но можно и в пакет с инсертом добавлять... использовать полученное значение в нем. (была бы функция было бы INSERT INTO .... VALUES (GEN_ID(), ....), просто мечта! ;))

> но немогу подключить процедуру через StoredProc1!!!
клево. и правильно. не используй StoredProc... (в принципе можно предположить почему... разобраться. но зачем сломанному "костылику" дощечки набивать, ремонт делать? проще выкинуть)


Правильный Вася   (2007-03-07 15:10:00) [25]

автор DmitrichJ а база iren_76


DmitrichJ   (2007-03-07 15:09:00) [26]

Проблема больше не в процедуре, а в задаче. Можно ли решить это без процедур и функций?


DmitrichJ   (2007-03-07 15:05:00) [27]

Delphi 2006,BDE:
   MainForm.StoredProc1.DatabaseName:='iren_76';
   MainForm.StoredProc1.StoredProcName:='GEN_ID;1';
   MainForm.StoredProc1.Params[1].ParamType:=ptInput;//@org
   ...
   MainForm.StoredProc1.Params[9].ParamType:=ptOutput;//@new_id
  // ну или всё это только в компоненте

   MainForm.StoredProc1.ExecProc;

  Ошибка:Cuold not find stored proceddure 'dbo.GEN_ID;1'


stud   (2007-03-07 14:52:00) [28]

тогда текст ошибки давай, компаненты доступа и т.п.


DmitrichJ   (2007-03-07 14:49:00) [29]

Плохиш, в StoredProc.DataBaseName указываю имя БД правильно, В StoredProcName имя процедуры видит нормально dbo.Gen_id;1, параметры все видит, но при выполнении говорит, что не может найти.


Плохиш   (2007-03-07 14:42:00) [30]


> для того чтобы после вставки записи получить последнее значение
> IDENTITY, но немогу подключить процедуру через StoredProc1!

Значит создаёшь подключение к другой базе данных...


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо