PDA

View Full Version : پروسیجر حذف در جدول مستر



elena
جمعه 24 مهر 1394, 16:13 عصر
من از دستور زیر برای حذف استفاده میکنم میخوام شرط بذارم اگر id در جدول دیتیل مقدار داره به کاربر پیام بده و حذف نکنه ،تو این کدی که نوشتم حذف نمی کنه ولی پیام هم نمیده

USE [bank]
GO
/****** Object: StoredProcedure [dbo].[ms_DeleteCommand] Script Date: 10/16/2015 16:59:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ms_DeleteCommand]
(
@id int,
@name char(10)
)
AS
SET NOCOUNT OFF;
if not exists (SELECT dbo.ms.id
FROM dbo.ms INNER JOIN
dbo.shobe ON dbo.ms.id = dbo.shobe.id)
DELETE FROM[ms] where id like @id
در دلفی

with Dm.ADOStoredProc2 do begin
Dm.ADOStoredProc2.Parameters.ParamByName('@id').Va lue:=edt_id.Text;
Dm.ADOStoredProc2.Parameters.ParamByName('@name'). Value:=edt_name.Text;
Dm.ADOStoredProc2.ExecProc;

elena
جمعه 24 مهر 1394, 16:54 عصر
USE [bank]
GO
/****** Object: StoredProcedure [dbo].[ms_DeleteCommand] Script Date: 10/16/2015 16:59:10 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[ms_DeleteCommand]
(
@id int,
@name char(10)
)
AS
SET NOCOUNT OFF;
if not exists (SELECT dbo.ms.id
FROM dbo.ms INNER JOIN
dbo.shobe ON dbo.ms.id = dbo.shobe.id)
DELETE FROM[ms] where id like @id

elena
دوشنبه 27 مهر 1394, 21:57 عصر
میشه بگین چطوری به کاربر بگم این رکوردی که تو جدول دیتیل داری حذف می کنی تو جدول مستر هست و به این دلیل این رکورد حذف نمی شود

hamid-nic
سه شنبه 28 مهر 1394, 08:05 صبح
با ارسال خروجی بصورت عدد و تشخیص اون عدد سمت برنامه این کار با انجام دهید
مثلا

Return (0);

یوسف زالی
سه شنبه 28 مهر 1394, 10:19 صبح
در استور پروسیجر ها شما می تونید یک عدد رو هم در خروجی ببرید، یعنی هر کجا که یک عدد return کنید، استور پروسیجر می پره بیرون. پس حواستون باشه خط آخر ازش استفاده کنید.
برای گرفتن این مقدار هم بعد از close - open کردن یا exec کردن، باید در پارامتر Return_Value@ مقدارش رو ببینید.

elena
سه شنبه 28 مهر 1394, 21:26 عصر
با ارسال خروجی بصورت عدد و تشخیص اون عدد سمت برنامه این کار با انجام دهید
مثلا

Return (0);میشه بیشتر توضیح بدین؟

hamid-nic
چهارشنبه 29 مهر 1394, 07:58 صبح
توی sp سمت سرور هرجا قراره به برنامه ارسالش کنید مثلا بعد از درج رکورد در جدول با sp آخر کار بنویسید

Return (0);

سمت دلفی با این کد پس از فراخوانی sp اون را بگیرید

.
.
.
Dm.ADOStoredProc2.ExecProc;
if Dm.ADOStoredProc2.Parameters.FindParam('@RETURN_VA LUE').value=0 then
begin

Do something ......

end;

elena
یک شنبه 03 آبان 1394, 21:16 عصر
ALTER PROCEDURE [dbo].[ms_DeleteCommand]
(
@id int,
@name char(10),
@s char(10)
)
AS
SET NOCOUNT OFF;
begin
set @s=delete from[ms] where (([id]=@id) and([name]=@name))
return(s)
end
در دلفی:
with Dm.ADOStoredProc2 do begin
Dm.ADOStoredProc2.Parameters.ParamByName('@id').Va lue:=edt_id.Text;
Dm.ADOStoredProc2.Parameters.ParamByName('@name'). Value:=Edt_name.Text;
Dm.ADOStoredProc2.ExecProc;
if Dm.ADOStoredProc2.Parameters.FindParam('@RETURN_VA LUE').value=0 then
ShowMessage('ÍÐÝ äÔÏ')

elena
یک شنبه 03 آبان 1394, 21:25 عصر
میشه کد منو بررسی کنید؟

elena
سه شنبه 05 آبان 1394, 20:50 عصر
من تو این دستور مشکل دارم ارور میده:
set @s=delete from[ms] where (([id]=@id) and([name]=@name))
return @s

hamid-nic
سه شنبه 05 آبان 1394, 20:55 عصر
من تو این دستور مشکل دارم ارور میده:
set @s=deletefrom[ms] where(([id]=@id)and([name]=@name))
return @s

خوب بایدم خطا بده
این خط اشتباهه شما دارین متغیر s را به چه چیزی ربط میدین ؟؟؟ اون طرف مساوی که داره عملیات حذف را انجام میده !!!!!

elena
سه شنبه 05 آبان 1394, 21:39 عصر
delete from[ms] where (([id]=@id) and([name]=@name))
set @s = (SELECT * FROM DELETED)
return @s

elena
سه شنبه 05 آبان 1394, 22:05 عصر
این کد رو به صورت بالا تغییر دادم الان ارور نمیده ولی سمت دلفی مشکل داره

elena
چهارشنبه 06 آبان 1394, 21:48 عصر
به نظرتون برای رفع این مشکل میشه از تریگر استفاده کرد یعنی قبل از اینکه فیلد id من حذف بشه فرزندان اون یعنی شعبه های بانک حذف بشن که پیغام خطای مبنی بر اینکه این زیر مجموعه داره و نمیتونه حذف بشه نده:متفکر:

elena
پنج شنبه 07 آبان 1394, 12:54 عصر
برای این کار تریگر نوشتم که اول زیر شعبه ها رو حذف می کنه بعد بانک رو
ALTERTRIGGER [dbo].[trg_delete]
ON [dbo].[ms]
insteadofDelete
AS
BEGIN
declare @id int;
set @id =(SELECT id FROM DELETED)
DELETEFROM dbo.shobe WHERE id=@id
DELETEFROM dbo.ms WHERE id=@id
END