PDA

View Full Version : خطا در صدور به وسيله يك sp



smakhavan
چهارشنبه 18 فروردین 1389, 16:51 عصر
سلام
من يك سري دستور نوشتم كه با استفاده از اونها ميشه يك جدول را با استفاده از tsql به اكسس فرستاد


DECLARE @sql nvarchar(1000)
DECLARE @provider nvarchar(100)
DECLARE @FileName nvarchar(100)
DECLARE @query nvarchar(1000)
DECLARE @username nvarchar(100)
DECLARE @password nvarchar(100)

set @provider = 'Microsoft.Jet.OLEDB.4.0'
set @FileName = 'c:\a.mdb'
set @query = '(Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5) Select Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5 from vPersonal'
set @username = 'admin'
set @password = ''

set @sql = 'insert into OPENrowset(''' + @provider + ''',''' + @FileName + '''; ''' + @username + ''';''' + @password + ''',Personal) ' + @query
print @sql

exec(@sql)

دستورات به خوبي كار ميكنه و نتايج را داخل فايل اكسس مينويسه، اما وقتي همين دستورات را داخل يه sp مينويسم به صورت

CREATE PROCEDURE pExportAccess
AS

DECLARE @sql nvarchar(1000)
DECLARE @provider nvarchar(100)
DECLARE @FileName nvarchar(100)
DECLARE @query nvarchar(1000)
DECLARE @username nvarchar(100)
DECLARE @password nvarchar(100)

set @provider = 'Microsoft.Jet.OLEDB.4.0'
set @FileName = 'c:\a.mdb'
set @query = '(Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5) Select Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5 from vPersonal'
set @username = 'admin'
set @password = ''

set @sql = 'insert into OPENrowset(''' + @provider + ''',''' + @FileName + '''; ''' + @username + ''';''' + @password + ''',Personal) ' + @query
print @sql

exec(@sql)
GO

و با دستور

exec pExportAccess

فراخواني ميكنمش با خطاي
Heterogeneous queries require the ANSI_NULLS and ANSI_WARNINGS options to be set for the connection. This ensures consistent query semantics. Enable these options and then reissue your query.

مواجه ميشم! اشكال به نظرتون از كجاست؟

AminSobati
چهارشنبه 18 فروردین 1389, 19:09 عصر
سلام دوست عزیزم،
این گزینه ها رو فعال کنید در Proc و مجددا اجرا کنین
SET ANSI_NULLS ON
SET ANSI_WARNINGS ON

AminSobati
چهارشنبه 18 فروردین 1389, 20:51 عصر
رفتارهای دستورات TSQL رو تعریف میکنند. به Books Online مراجعه بفرمایید

smakhavan
شنبه 21 فروردین 1389, 14:10 عصر
اين كار را كردم ولي جواب نداد
من اين sp را مينويسم، به نظر نميرسه اشكال از اين باشه!

CREATE PROCEDURE pExportAccess
AS

DECLARE @sql nvarchar(1000)
DECLARE @provider nvarchar(100)
DECLARE @FileName nvarchar(100)
DECLARE @query nvarchar(1000)
DECLARE @username nvarchar(100)
DECLARE @password nvarchar(100)

set @provider = 'Microsoft.Jet.OLEDB.4.0'
set @FileName = 'c:\a.mdb'
set @query = '(Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5) Select Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5 from vPersonal'
set @username = 'admin'
set @password = ''

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON

set @sql = 'insert into OPENrowset(''' + @provider + ''',''' + @FileName + '''; ''' + @username + ''';''' + @password + ''',Personal) ' + @query
print @sql

exec(@sql)
GO


شما خودتون اين كار را ميشه انجام بدين ببينين انجام ميشه يا نه؟
يه مثال ساده :
يه sp بسازيم كه مسير يه فايل اكسس روي هارد و يه جدول روي سرور به عنوان پارامتر بگيره و اون جدول را توي جدولي با همون نام توي فايل اكسس بريزه. من نتونستم اين كار را بكنم :ناراحت::افسرده:

AminSobati
شنبه 21 فروردین 1389, 18:58 عصر
عذر میخوام به خاطر مشغله فرصت test دست نداد. شما که کدهاتون آمادست، اون دو Option رو قبل از create proc فعال کنید بعد Proc بسازین. آیا نتیجه فرقی کرد؟

smakhavan
یک شنبه 22 فروردین 1389, 17:02 عصر
من اين كار را كرده بودم، اثري نداشت! كدم را گذاشتم كه ببينين نكنه جاي اشتباهي گذاشتم


CREATE PROCEDURE pExportAccess
AS

DECLARE @sql nvarchar(1000)
DECLARE @provider nvarchar(100)
DECLARE @FileName nvarchar(100)
DECLARE @query nvarchar(1000)
DECLARE @username nvarchar(100)
DECLARE @password nvarchar(100)

set @provider = 'Microsoft.Jet.OLEDB.4.0'
set @FileName = 'c:\a.mdb'
set @query = '(Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5) Select Parvandeh, LastName, Firstname, Father, Identify, D1, D2, D3, D4, D5 from vPersonal'
set @username = 'admin'
set @password = ''

SET ANSI_NULLS ON
SET ANSI_WARNINGS ON

set @sql = 'insert into OPENrowset(''' + @provider + ''',''' + @FileName + '''; ''' + @username + ''';''' + @password + ''',Personal) ' + @query
print @sql

exec(@sql)
GO