Finns de något smidagre sätt än vad jag brukar använda då jag vill att en sträng(oftast sql) ska kopplas ihop över flera rader. Ska du ha en sträng över flera rader måste du använda den principen, men den strängen du skrev kan ju naturligtvis ligga på en rad... Jag brukar bryta rad vid satserna: Niklas: Jo mitt exempel ovan fungerar ju utmärkt på en rad. JAg skulle skrivit den något sådant här: Den där satsen smäller (petitesser iofs). Det är väldigt viktigt att man antingen i början eller slutet av strängen lägger in ett mellanslag så inte två ord går ihop: Om man lägger in radbryning, som jag gör i mitt exempel så bryter man orden. Man får dessutom ut värdet som det står i koden.Forsätta sträng över flera rader?
Så här brukar jag göra:
<code>
"SELECT " & _
"kolumn " & _
"FROM " & _
"tabell "
</code>
Vill gärna slippa de flesta ", & och _ tecknena.Sv: Forsätta sträng över flera rader?
"SELECT kolumn FROM tabell "
Vad är det som är så osmidigt med den kombinationen?
Sett ur en kompilator/interpretators synvinkel är det ett helt naturligt krav. Har du en lång sträng måste du antingen skriva ut hela eller sammanfoga flera mindre bitar i rad.
Basic-språken har ingen satsseparator (som t.ex. C och C++), så för att få ett uttryck att ligga på flera rader måste en ny symbol infogas, i detta fall "_" . Kombinerat blir detta det du skriver.Sv: Forsätta sträng över flera rader?
<code>
strSQL = "SELECT Tabell1.kolumn1, Tabell1.kolumn2, Tabell1.kolumn3, Tabell1.kolumn4, Tabell2.Kolumn1, Tabell2.Kolumn2" & vbCrLf & _
"FROM Tabell1 LEFT JOIN Tabell2 ON Tabell1.kolumn1 = Tabell2.Kolumn2" & vbCrLf & _
"ORDER BY Tabell1.kolumn1"
</code>Sv: Forsätta sträng över flera rader?
Men min fråga kom upp i.o.m denna kod:
<code>
SELECTEN = "SELECT DISTINCT " & _
"p.compid " & _
",p.persid " & _
",c.Name1 " & _
",p.firstname " & _
",p.lastname " & _
",c.phone " & _
",c.town " & _
",ct.emp " & _
"FROM " & _
"Company c " & _
",Contract ct " & _
",Person p " & _
",Person_act pact " & _
"WHERE " & _
"p.compid = c.compid " & _
"AND c.compid = ct.compid (+) " & _
"AND p.persid = pact.persid " & _
"AND pact.status = '6090' " & _
"AND ( pact.actcode = '6111' " & _
"OR pact.actcode = '6121' " & _
"OR pact.actcode = '6131' " & _
"OR pact.actcode = '6211' " & _
"OR pact.actcode = '6221' " & _
"OR pact.actcode = '6231' " & _
"OR pact.actcode = '6311' " & _
"OR pact.actcode = '6321' " & _
"OR pact.actcode = '6331' " & _
") " & _
"AND NOT EXISTS ( " & _
"SELECT " & _
"p.compid " & _
"FROM " & _
"Contract ct " & _
",Contract_item cti " & _
"WHERE " & _
"ct.contrid = cti.contrid " & _
"AND ct.persid = p.persid " & _
"AND ( cti.prodcode = '6110' " & _
"OR cti.prodcode = '6120' " & _
"OR cti.prodcode = '6130' " & _
"OR cti.prodcode = '6210' " & _
"OR cti.prodcode = '6220' " & _
"OR cti.prodcode = '6230' " & _
"OR cti.prodcode = '6310' " & _
"OR cti.prodcode = '6320' " & _
"OR cti.prodcode = '6330' " & _
") " & _
") "
</code>
Man skulle väl kanske kunna skriva den i någon stil med Andreas förslag. Men de skulle nog bli lite rörigt ändå då jag ogillar då rader går utanför skärmen och en horizontal scroll dyker upp.
Hur skulle ni skriva koden ovan förresten?Sv: Forsätta sträng över flera rader?
<code>
strSQL = "SELECT DISTINCT p.compid, p.persid, c.Name1, p.firstname, p.lastname, c.phone, c.town, ct.emp" & vbCrLf & _
"FROM Person p LEFT JOIN" & vbCrLf & _
" Company c ON p.compid = c.compid LEFT OUTER JOIN" & vbCrLf & _
" Contract ct ON c.compid = ct.compid LEFT OUTER JOIN" & vbCrLf & _
" Person_act pact ON p.persid = pact.persid" & vbCrLf & _
"WHERE pact.status = '6090' AND (pact.actcode IN ('6111', '6121', '6131', '6211', '6221', '6231', '6311', '6321', '6331') AND " & vbCrLf & _
" p.persid NOT IN (SELECT ct.persid" & vbCrLf & _
" FROM Contract ct INNER JOIN Contract_item cti ON ct.contrid = cti.contrid" & vbCrLf & _
" WHERE cti.prodcode IN ('6110', '6120', '6130', '6210', '6220', '6230', '6310', '6320', '6330')) "
</code>
Vet inte om det ger samma resultat som tidigare. Har skrivit om den lite.Sv: Forsätta sträng över flera rader?
" Person_act pact ON p.persid = pact.persid*******" & vbCrLf & _
"WHERE pact.status = '6090' AND (pact.actcode IN ('6
Stjärnorna markerar att ett mellanslag skall in.Sv: Forsätta sträng över flera rader?