Check alle échte Black Friday-deals Ook zo moe van nepaanbiedingen? Wij laten alleen échte deals zien
Toon posts:

[sql server] File locking probleem

Pagina: 1
Acties:

Verwijderd

Topicstarter
Goedemorgen

Zojuist geregistreerd en ik heb meteen een probleem.

Om bepaalde data uit een database zo nu en dan naar bepaalde mensen te verzenden zet ik het in een excel sheet en verzend ik het vervolgens via email. Het is misschien niet de meest gangbare oplossing, maar het moet eenmaal op deze manier.
Ik heb de volgende stored procedures geschreven:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
CREATE procedure sp_subvtMailer

as


select top 1 SalesRepNR into ##tblVTMailer from terminal2 
where LastCommunicationTime > email_sent_date and LastCommunicationTime < dateadd(mi, -1, getdate() )


select salesrepnr from ##tblVTMailer
update terminal2 set email_sent_date = getdate() where salesrepnr = (select salesrepnr from ##tblVTMailer)

exec orderstoexcel

exec sendmail

drop table ##tblVTMailer
GO


code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
CREATE procedure orderstoexcel

as
exec spExecute_ADODB_SQL @DDL='drop table porders', 
@DataSource ='C:\temp\VTorders.xls' 
exec spExecute_ADODB_SQL @DDL='Create table porders
(Ordernummer Text, Klantnummer Text, TotaalBedrag currency, VerzendDatum date, OrderDatum date, Producten int)',
@DataSource ='C:\temp\VTorders.xls'

INSERT INTO OPENDATASOURCE ('Microsoft.Jet.OleDB.4.0', 
'Data Source="c:\temp\VTorders.xls"; 
extended Properties=Excel 8.0')...porders
    (Ordernummer, Klantnummer, TotaalBedrag, VerzendDatum, OrderDatum, Producten)
select right([order].ordernr,6), right([order].entcustnr,6), [order].totalordervalue/100, [order].transmissiondate, [order].[orderdatum], count(orderdetail.ordernr) as Producten
from [order] 
left outer join orderdetail 
on [order].ordernr = orderdetail.ordernr
where left([order].ordernr,5) = 
(select salesrepnr from ##tblVTMailer)
 and transmissiondate > DATEADD(mi, -8, Getdate()) 
group by [order].transmissiondate, [order].entcustnr, [order].totalordervalue, [order].[orderdatum], orderdetail.ordernr, [order].ordernr
GO


Het probleem is dat het excelbestand is 'gelocked' zolang de procedure draait. Hierdoor kan de sendmail procedure niet uitgevoerd worden. Ik heb getracht waitfor(delay 00:00:10) toe te voegen aan de tweede procedure, maar dan blijft de file gewoon 10 sec locked. Ik kom er even niet meer uit. Wie helpt mij?

Alvast vriendelijk bedankt.

  • Milt
  • Registratie: Februari 2005
  • Laatst online: 06-07-2024
Ik zou gewoon een VBscript maken waarmee je de gegevens uit de database haalt, formatteert in een Excel file en deze als attachment met CDO per e-mail verstuurt. Of formateert het netjes in een HTML e-mail (heb je ook geen Excel nodig om de gegevens te lezen) met XML/XSLT.

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Een VBScript, of welke andere oplossing dan ook, maar ook ik vind dat een DB gewoon "zijn DB werk" moet doen. Dat je vanuit een Stored Proc. kunt mailen is grappig maar hiermee leg je wel heel veel functionaliteit in je RDBMS weg dat daar eigenlijk niet voor bedoeld is. Ik zou zelfs het exporteren naar Excel vanuit een externe applicatie regelen; puur om het overzicht te behouden.

Als je dan ook nog met smerige "waitfor" constructies moet gaan werken lijkt me dit voldoende alarmbellen om eens te gaan bekijken of er geen betere oplossingen zijn.

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij