Showing posts with label excel. Show all posts
Showing posts with label excel. Show all posts

Sunday, February 19, 2012

Deploy Excel file that already exists on server - file isn't replaced

Dear all,

I am deploying programatically an Excel 2007 file to a SQL Server 2005 Reporting Server. The problem is that if a file with the same name already exists, that file isn't replaced. I would like the opposite to happen. I'm using the following code:

--Executable

set svr=http://w3sdwsqld1/reportserver
set src_fld="\\w3sdwsqld1\\deploy\\SAD\\ECRANS\\UPDATES_20061127_190000\\Ecrans\\AM\\Associados\\"
set dest_fld="Associados"
set script="\\w3sdwsqld1\\deploy\\SAD\ECRANS\\UPDATES_20061127_190000\\Ecrans\\AM\\Associados\\PublishReports.rss"
REM Sample: deploy.bat http://w3sdwsqld1/reportserver "\\w3sdwsqld1\\deploy\\SAD\\ECRANS\\UPDATES_20061127_190000\\Ecrans\\AM\\Associados\\" "Associados" "\\w3sdwsqld1\\deploy\\SAD\ECRANS\\UPDATES_20061127_190000\\Ecrans\\AM\\Associados\\PublishReports.rss"
for /R %src_fld% %%f in (*.xlsx) do rs -i %script% -s %svr% -v ParentFolder=%dest_fld% -v reportP="%%~nf" -v path=%src_fld%
PAUSE

--rss Code


'
' Script Variables
'
' Variables that are passed on the command line with the -v switch:
'
' (a) parentFolder - corresponds to the folder that the script creates and uses
' to contain your published reports

' (b) reportP - corresponds to the report to publish


Dim ROOT As String = "/SAD/Ecrans/Ecrans/AM"

Dim definition As [Byte]() = Nothing
Dim warnings As Warning() = Nothing
Dim parentPath As String = ROOT + "/"+ parentFolder
Dim filePath As String = path
Dim report As String = reportP


Public Sub Main()

rs.Credentials = System.Net.CredentialCache.DefaultCredentials

'Create the parent folder
Try
rs.CreateFolder(parentFolder, ROOT,Nothing)
Console.WriteLine("Parent folder {0} created successfully", parentFolder)
Catch e As Exception

Console.WriteLine(e.Message)

End Try

'Create shared data source
'CreateSampleDataSource("Solucao_Integrada", "OLEDB-MD", "Data Source=dwareas1;Initial Catalog=SAD_Solucao_Integrada")

'Publish the sample reports
PublishReport(report)


End Sub

Public Sub CreateSampleDataSource(name As String, extension As String, connectionString As String)
'Define the data source definition.
Dim definition As New DataSourceDefinition()
definition.CredentialRetrieval = CredentialRetrievalEnum.Integrated
definition.ConnectString = connectionString
definition.Enabled = True
definition.EnabledSpecified = True
definition.Extension = extension
definition.ImpersonateUser = False
definition.ImpersonateUserSpecified = True
'Use the default prompt string.
definition.Prompt = Nothing
definition.WindowsCredentials = False

Try
rs.CreateDataSource(name, parentPath, False, definition, Nothing)
Console.WriteLine("Data source {0} created successfully", name)

Catch e As Exception
Console.WriteLine(e.Message)
End Try

End Sub

Public Sub PublishReport(ByVal reportName As String)
Try
Dim stream As FileStream = File.OpenRead(filePath + reportName + ".xlsx")
Console.WriteLine(reportName)

definition = New [Byte](stream.Length) {}
stream.Read(definition, 0, CInt(stream.Length))
stream.Close()

Catch e As IOException
Console.WriteLine(e.Message)
End Try

Try
rs.CreateResource(reportName + ".xlsx", parentPath, True, definition, "application/x-excel", Nothing)

Catch e As Exception
Console.WriteLine(e.Message)
Console.WriteLine("Failed to publish report")
End Try
End Sub
--

Any thoughts? Many thanks,

Pedro Martins

Portugal

Pedro,

Try

It looks like the paths may not be correct, use the "filePath" that you use to open the file in the below statement.

rs.CreateResource(reportName + ".xlsx", filePath, True, definition, "application/x-excel", Nothing)

I normally created my Rss script insert console write message to return values so that I can make sure I getting the corrent values.

Let me know if this helps.

Ham

|||

Ham,

The path is correct, if I deploy the file and there is no other file in the destination the file is uploaded successfully. However, If a file with the same name already exists, the new file doesn't replace the old one.

Pedro

|||

Pedro

Is the file you are trying to replace - "Open" by another application? You could use the System.IO to check on the status of this file before you try and replace.

Ham

Tuesday, February 14, 2012

DENY SELECT on SCHEMA issue

Hi,
I want to deny select on many views/table so that my excel users won't
access them.
1. USING DENY SELECT ON VIEWS/TABLE
deny select on sys.all_columns to loana
deny select on sys.all_objects to loana
...etc...
-> This works fine but takes ages for going throgh all the views/tables
2. USING DENY SELECT ON SCHEMA
deny select on SCHEMA::sys to loana
-> This would do what I want in a unique statement but it does not
work. What I have wrong with the deny select on SCHEMA statement?
Note:
I use SQL server 2005 that I want to connect from Excel 2002/2003 Pivot
TableI just posted the similar question in the sqlserver.security newsgroup...
Having the same problem here. We want to suppress INFORMATION_SCHEMA and
sys Schemas without having to issue Deny statements on each object within.
Bill Blakey
<christophe.leroquais@.gmail.com> wrote in message
news:1150295767.920118.51280@.f6g2000cwb.googlegroups.com...
> Hi,
>
> I want to deny select on many views/table so that my excel users won't
> access them.
> 1. USING DENY SELECT ON VIEWS/TABLE
> deny select on sys.all_columns to loana
> deny select on sys.all_objects to loana
> ...etc...
> -> This works fine but takes ages for going throgh all the views/tables
>
> 2. USING DENY SELECT ON SCHEMA
> deny select on SCHEMA::sys to loana
> -> This would do what I want in a unique statement but it does not
> work. What I have wrong with the deny select on SCHEMA statement?
>
> Note:
> I use SQL server 2005 that I want to connect from Excel 2002/2003 Pivot
> Table
>