khoshblagh
یک شنبه 08 دی 1392, 21:26 عصر
با سلام خدمت دوستان
جهت درج اطلاعات در یک جدول از 2 پروسیجر به این شکل استفاده میشود:
در پروسیجر اول از 3 جدول، اطلاعات خاصی را یکجا استخراج میکند که برای این کار از 2 پارامتر که بازه زمانی خاصی را شامل میشود استفاده میگردد. تا اینجا کار مشکلی نیست.
در مرحله بعد با فشار دکمه ای پروسیجر دوم که در حقیقت فراخوانی پروسیجر اول جهت درج دادهای استخراج شده از پروسیجر اول است اجرا میگردد.
مسئله این است که علیرغم صحت پروسیجر دوم (البته از نظر بنده ) هیچگونه داده ای به جدول مورد نظر منتقل نمیشود.
البته اگر عنصر Execute Option گزینه eoAsynExecute =true باشد درخواست پارامترهای استفاده شده در پروسیجر اولی را مینماید! و اگر eoAsynExecute=false باشد هیچ پیامی خطای صادر نمیشود ولی همانطوری که گفتم داده ای هم به جدول مورد نظر انتقال نمیابد.
سئوال اول : آیا برای اجرای پروسیجر دوم نیازی به تعریف دوباره پارامترهای پروسیجر اولی میباشد؟
سئوال دوم : در صورت منفی بودن سئوال اول چگونه این مشکل برطرف میشود.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
DROP PROCEDURE [dbo].[usp_ShowKharidFasli_temp]
GO
CREATE PROCEDURE usp_ShowKharidFasli_temp
-- Add the parameters for the stored procedure here
@strAzTarikh char(10),
@strTaTarikh char(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
set rowcount 0
-- Insert statements for procedure here
-- SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
SELECT TOP (100) PERCENT dbo.tblAshkhas.Onvan, dbo.tblAshkhas.CodEghtesadi, dbo.tblAshkhas.Nam, dbo.tblAshkhas.Famil, dbo.tblAshkhas.CodMeli,
dbo.tblAshkhas.CodPosti, dbo.tblAshkhas.Adres, dbo.tblAshkhas.ShahrOstan, dbo.tblPayman.ShomarPayman, dbo.tblPayman.TarikhPayman,
dbo.tblGardeshPayman.Shar AS SharSorVaz, dbo.tblPayman.EblaghMablaghAkhar, dbo.tblPayman.MablaghPayman, dbo.tblPayman.MablaghAkhar,
dbo.tblAshkhas.Phon1, dbo.tblGardeshPayman.MablaghTax, dbo.tblGardeshPayman.MablaghTaxAfzodeh, dbo.tblGardeshPayman.TarikhSabtSorVaz,
dbo.tblAshkhas.PishPhon1, dbo.tblGardeshPayman.MablaghKolKar, dbo.tblGardeshPayman.MablaghMasalehPayKar,
dbo.tblGardeshPayman.MablaghSorVazGhabl, dbo.tblGardeshPayman.MablaghJaraem, dbo.tblPayman.Onvan AS OnvanPayman
FROM dbo.tblAshkhas INNER JOIN
dbo.tblPayman ON dbo.tblAshkhas.CodId = dbo.tblPayman.CodPaymankar INNER JOIN
dbo.tblGardeshPayman ON dbo.tblPayman.CodId = dbo.tblGardeshPayman.CodIdPayman
WHERE (dbo.tblGardeshPayman.TarikhSabtSorVaz >= @strAzTarikh) AND (dbo.tblGardeshPayman.TarikhSabtSorVaz <= @strTaTarikh)
ORDER BY dbo.tblGardeshPayman.TarikhSabtSorVaz
END
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
DROP PROCEDURE usp_InsertKharidFasli_temp
GO
CREATE PROCEDURE usp_InsertKharidFasli_temp
--@strAzTarikh char(10),
--@strTaTarikh char(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
--SELECT * INTO tblKharidFasli_temp
--FROM usp_ShowKharidFasli_temp
INSERT INTO tblKharidFasli_temp
EXEC usp_ShowKharidFasli_temp
END
GO
از sql2005 و TAdoStoreProce استفاده شده است
جهت درج اطلاعات در یک جدول از 2 پروسیجر به این شکل استفاده میشود:
در پروسیجر اول از 3 جدول، اطلاعات خاصی را یکجا استخراج میکند که برای این کار از 2 پارامتر که بازه زمانی خاصی را شامل میشود استفاده میگردد. تا اینجا کار مشکلی نیست.
در مرحله بعد با فشار دکمه ای پروسیجر دوم که در حقیقت فراخوانی پروسیجر اول جهت درج دادهای استخراج شده از پروسیجر اول است اجرا میگردد.
مسئله این است که علیرغم صحت پروسیجر دوم (البته از نظر بنده ) هیچگونه داده ای به جدول مورد نظر منتقل نمیشود.
البته اگر عنصر Execute Option گزینه eoAsynExecute =true باشد درخواست پارامترهای استفاده شده در پروسیجر اولی را مینماید! و اگر eoAsynExecute=false باشد هیچ پیامی خطای صادر نمیشود ولی همانطوری که گفتم داده ای هم به جدول مورد نظر انتقال نمیابد.
سئوال اول : آیا برای اجرای پروسیجر دوم نیازی به تعریف دوباره پارامترهای پروسیجر اولی میباشد؟
سئوال دوم : در صورت منفی بودن سئوال اول چگونه این مشکل برطرف میشود.
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
DROP PROCEDURE [dbo].[usp_ShowKharidFasli_temp]
GO
CREATE PROCEDURE usp_ShowKharidFasli_temp
-- Add the parameters for the stored procedure here
@strAzTarikh char(10),
@strTaTarikh char(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
set rowcount 0
-- Insert statements for procedure here
-- SELECT <@Param1, sysname, @p1>, <@Param2, sysname, @p2>
SELECT TOP (100) PERCENT dbo.tblAshkhas.Onvan, dbo.tblAshkhas.CodEghtesadi, dbo.tblAshkhas.Nam, dbo.tblAshkhas.Famil, dbo.tblAshkhas.CodMeli,
dbo.tblAshkhas.CodPosti, dbo.tblAshkhas.Adres, dbo.tblAshkhas.ShahrOstan, dbo.tblPayman.ShomarPayman, dbo.tblPayman.TarikhPayman,
dbo.tblGardeshPayman.Shar AS SharSorVaz, dbo.tblPayman.EblaghMablaghAkhar, dbo.tblPayman.MablaghPayman, dbo.tblPayman.MablaghAkhar,
dbo.tblAshkhas.Phon1, dbo.tblGardeshPayman.MablaghTax, dbo.tblGardeshPayman.MablaghTaxAfzodeh, dbo.tblGardeshPayman.TarikhSabtSorVaz,
dbo.tblAshkhas.PishPhon1, dbo.tblGardeshPayman.MablaghKolKar, dbo.tblGardeshPayman.MablaghMasalehPayKar,
dbo.tblGardeshPayman.MablaghSorVazGhabl, dbo.tblGardeshPayman.MablaghJaraem, dbo.tblPayman.Onvan AS OnvanPayman
FROM dbo.tblAshkhas INNER JOIN
dbo.tblPayman ON dbo.tblAshkhas.CodId = dbo.tblPayman.CodPaymankar INNER JOIN
dbo.tblGardeshPayman ON dbo.tblPayman.CodId = dbo.tblGardeshPayman.CodIdPayman
WHERE (dbo.tblGardeshPayman.TarikhSabtSorVaz >= @strAzTarikh) AND (dbo.tblGardeshPayman.TarikhSabtSorVaz <= @strTaTarikh)
ORDER BY dbo.tblGardeshPayman.TarikhSabtSorVaz
END
set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go
DROP PROCEDURE usp_InsertKharidFasli_temp
GO
CREATE PROCEDURE usp_InsertKharidFasli_temp
--@strAzTarikh char(10),
--@strTaTarikh char(10)
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
-- Insert statements for procedure here
--SELECT * INTO tblKharidFasli_temp
--FROM usp_ShowKharidFasli_temp
INSERT INTO tblKharidFasli_temp
EXEC usp_ShowKharidFasli_temp
END
GO
از sql2005 و TAdoStoreProce استفاده شده است