# Datenbankabfrage an SQl-Server  mit VB



## maria-rita (26. August 2004)

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;


----------



## DrSoong (26. August 2004)

Hier findest du ein Tutorial zum Thema MySQL-Datenbanken, die VB-Implementierung lässt sich auch für den SQL-Server anwenden(gehören ja nur die SQL-Befehle dementsprechend geändert).


Der Doc!


----------



## maria-rita (30. August 2004)

*Reatenbankabfrage an SQL-Server mit VB*

Hallo,

vielen Dank für Deine Antwort. Ich habe das mal überflogen, bin mir aber nicht sicher ob dies das ist was ich brauche. In dem Beispiel werden die Daten ausgelesen und ausgegeben. Ich brauche aber den umgekehrten Weg. 

Ich möchte ja Daten in eine VB-Maske eingeben können (als Parameter) die dann im SQL-Statement an einer bestimmten Stelle eigefügt werden können sollen, z. B. Seminarkürzel, Jahr usw.

Vielen Dank für Deine (Eure) Bemühungen.

Viele Grüße

Marita Betz


----------

