maria-rita
Mitglied
Hallo @ALL
ich bin absoluter Anfänger in VB.
In SQL fühle ich mich weitgehend sicher. Wir arbeiten mit SQL Server 2000 und Office XP auf Windows XP Professional Workstations.
Nun habe ich folgende Frage:
Bisher habe ich für die Serienbrieffunktion in Word den Microsoft Query über ODBC verwendet. Ich verändere nun jedes Mal das SQL-Statement und bekomme auch die richtigen Ergebnisse im Serienbrief. Das Ändern des SQL-Statements stellt für unsere Sekretärinnen aber oftmals ein Problem dar. Daher möchte ich nach dem Laden des Serienbriefes in Word automatisch ein VB-Skript starten, welches die gewünschten Parameter abfrägt und entsprechend im SQL-Statement im Microsoft Query austauscht.
Diese vier Variablen sollen ausgetauscht werden.
set @semTyp = 'AA1'
set @jahr = 2004
set @teil = 0
set @nr = 1
Vielen Dank für Eure Hilfe
Marita
Anlage : SQL-Statement
-- ***************************************************************************
-- Seminaranschreiben für Zertis (ohne Noten), Serienbrief, Anstecker usw. einteilig
-- ***************************************************************************
-- Variablendeclaration
declare @semTyp varchar(4), @jahr int, @teil int, @nr int
set @semTyp = 'AA1'
set @jahr = 2004
set @teil = 0
set @nr = 1
-- Ende Variablendeclaration
SELECT p.personId,
p.surname as nachname,
p.firstname as vorname,
convert(char (10),p.birthday,104) as geburtsdatum,
anrede = (CASE WHEN (p.sex = 'W') THEN ('Frau ') ELSE ('Herr') END),
b.bookBank AS BLZ,
b.mark,
b.points,
c.description AS bankname,
c.street,
c.postcode,
c.place,
s.seminarType +' '+RIGHT(s.semYear,2)+LTRIM(STR(sp.partnumber))+(CASE WHEN s.seqNumber<=9
THEN LTRIM(STR(0)+LTRIM(STR(s.seqNumber))) else LTRIM(STR(s.seqNumber))end) AS Semkuerzel,
discr,
sp.remark,
convert(char (10),MIN(spd.seminarDay),104) as Beginn1,
convert(char (10),MAX(spd.seminarDay),104) as Ende1,
datediff(d, MIN(spd.seminarDay) , MAX(spd.seminarDay)+1) as dauerSem1,
(CASE WHEN (datediff(d, MIN(spd.seminarDay) , MAX(spd.seminarDay) -1) > 0)
THEN ( 'vom '+ convert(char (10),MIN(spd.seminarDay),104)+
' bis '+ convert(char (10),MAX(spd.seminarDay),104))
ELSE ('am ' + convert(char (10),MIN(spd.seminarDay),104)) END) as Dauerklar1
FROM
BookingDimension bd
RIGHT OUTER JOIN Booking b ON bd.bookingId = b.bookingId
INNER JOIN Customer c ON b.bookBank = c.BLZ
INNER JOIN Person p ON b.personId = p.personId
INNER join seminarPart sp ON sp.seminarPartId = b.seminarPartId
INNER join seminar s ON s.seminarId = sp.seminarId
INNER join seminarPartDay spd ON spd.seminarPartid = sp.seminarPartId
LEFT JOIN (SELECT TOP 1 sty.description AS Discr, sty.catalogYear AS Jahr
FROM
SeminarTypeYear sty
WHERE sty.catalogYear<=2004
AND (sty.seminarType= @semTyp)
ORDER BY sty.catalogYear desc) AS SeminarTitel ON SeminarTitel.Jahr <= s.semYear
WHERE (b.status <> 'X')
AND (p.personId like '%')
AND (b.seminarPartId IN
(SELECT sp.seminarPartId
FROM SeminarPart sp
WHERE sp.partNumber = @teil
AND sp.seminarId IN
(SELECT s.seminarId
FROM Seminar s
WHERE s.seminarType = @semTyp
AND s.semYear = @jahr
AND s.seqNumber = @nr)
))
GROUP BY
p.personId,
p.surname,
p.firstname,
p.birthday,
p.sex,
b.mark,
b.points,
discr,
sp.remark,
b.bookBank,
c.description,
c.street,
c.postcode,
c.place,
s.seminarType,
s.semYear,
s.seqNumber,
sp.partnumber;
ich bin absoluter Anfänger in VB.
In SQL fühle ich mich weitgehend sicher. Wir arbeiten mit SQL Server 2000 und Office XP auf Windows XP Professional Workstations.
Nun habe ich folgende Frage:
Bisher habe ich für die Serienbrieffunktion in Word den Microsoft Query über ODBC verwendet. Ich verändere nun jedes Mal das SQL-Statement und bekomme auch die richtigen Ergebnisse im Serienbrief. Das Ändern des SQL-Statements stellt für unsere Sekretärinnen aber oftmals ein Problem dar. Daher möchte ich nach dem Laden des Serienbriefes in Word automatisch ein VB-Skript starten, welches die gewünschten Parameter abfrägt und entsprechend im SQL-Statement im Microsoft Query austauscht.
Diese vier Variablen sollen ausgetauscht werden.
set @semTyp = 'AA1'
set @jahr = 2004
set @teil = 0
set @nr = 1
Vielen Dank für Eure Hilfe
Marita
Anlage : SQL-Statement
-- ***************************************************************************
-- Seminaranschreiben für Zertis (ohne Noten), Serienbrief, Anstecker usw. einteilig
-- ***************************************************************************
-- Variablendeclaration
declare @semTyp varchar(4), @jahr int, @teil int, @nr int
set @semTyp = 'AA1'
set @jahr = 2004
set @teil = 0
set @nr = 1
-- Ende Variablendeclaration
SELECT p.personId,
p.surname as nachname,
p.firstname as vorname,
convert(char (10),p.birthday,104) as geburtsdatum,
anrede = (CASE WHEN (p.sex = 'W') THEN ('Frau ') ELSE ('Herr') END),
b.bookBank AS BLZ,
b.mark,
b.points,
c.description AS bankname,
c.street,
c.postcode,
c.place,
s.seminarType +' '+RIGHT(s.semYear,2)+LTRIM(STR(sp.partnumber))+(CASE WHEN s.seqNumber<=9
THEN LTRIM(STR(0)+LTRIM(STR(s.seqNumber))) else LTRIM(STR(s.seqNumber))end) AS Semkuerzel,
discr,
sp.remark,
convert(char (10),MIN(spd.seminarDay),104) as Beginn1,
convert(char (10),MAX(spd.seminarDay),104) as Ende1,
datediff(d, MIN(spd.seminarDay) , MAX(spd.seminarDay)+1) as dauerSem1,
(CASE WHEN (datediff(d, MIN(spd.seminarDay) , MAX(spd.seminarDay) -1) > 0)
THEN ( 'vom '+ convert(char (10),MIN(spd.seminarDay),104)+
' bis '+ convert(char (10),MAX(spd.seminarDay),104))
ELSE ('am ' + convert(char (10),MIN(spd.seminarDay),104)) END) as Dauerklar1
FROM
BookingDimension bd
RIGHT OUTER JOIN Booking b ON bd.bookingId = b.bookingId
INNER JOIN Customer c ON b.bookBank = c.BLZ
INNER JOIN Person p ON b.personId = p.personId
INNER join seminarPart sp ON sp.seminarPartId = b.seminarPartId
INNER join seminar s ON s.seminarId = sp.seminarId
INNER join seminarPartDay spd ON spd.seminarPartid = sp.seminarPartId
LEFT JOIN (SELECT TOP 1 sty.description AS Discr, sty.catalogYear AS Jahr
FROM
SeminarTypeYear sty
WHERE sty.catalogYear<=2004
AND (sty.seminarType= @semTyp)
ORDER BY sty.catalogYear desc) AS SeminarTitel ON SeminarTitel.Jahr <= s.semYear
WHERE (b.status <> 'X')
AND (p.personId like '%')
AND (b.seminarPartId IN
(SELECT sp.seminarPartId
FROM SeminarPart sp
WHERE sp.partNumber = @teil
AND sp.seminarId IN
(SELECT s.seminarId
FROM Seminar s
WHERE s.seminarType = @semTyp
AND s.semYear = @jahr
AND s.seqNumber = @nr)
))
GROUP BY
p.personId,
p.surname,
p.firstname,
p.birthday,
p.sex,
b.mark,
b.points,
discr,
sp.remark,
b.bookBank,
c.description,
c.street,
c.postcode,
c.place,
s.seminarType,
s.semYear,
s.seqNumber,
sp.partnumber;