Jag har ett problem, i en SQL sats som tar fram priser beroende på kundens inställningar, han kan ha fått special pris enligt en annan prislista, satsen fungerar bra nu men, det är en sak, i vissa kunders fall så gäller specialpriserna bara mellan eller efter ett datum, ibland står det inget i datumfälten(fromdatum, todatum) vilket betyder att special priset gäller hela tiden.
Här är en bit av koden:
Do While Not RS_Prod.EOF
ordpris = Empty
pris = RS_Prod("aPris")
SQL= "SELECT Kundpris.KundNr, KundPris.ArtikelNr, Art.Artikelnr, KundPris.aPris FROM Art, ArtPris, Kund, Kundpris " &_
"WHERE ('" & Session("user") & "'= kundpris.KundNr) AND " &_
"(Art.ArtikelNr = KundPris.ArtikelNr) AND " &_
"(Art.ArtikelNr = ArtPris.ArtikelNr) AND " &_
"(Art.ArtikelNr = '" & RS_Prod("ArtikelNr") &_
"') AND (Art.Extra_7 LIKE 'J') ORDER BY Art.Extra_9 "
Set RS_slist = Conn.Execute(SQL)
if NOT RS_slist.EOF Then
pris = RS_slist("aPris")
else
' If different price lists are used for different customers
SQL= "SELECT Art.Extra_8, Art.Benämning_10, Art.Övrigt, Art.Artikelnr, ArtPris.aPris FROM Art, ArtPris " &_
"WHERE (Art.ArtikelNr = ArtPris.ArtikelNr) AND " &_
"(Art.ArtikelNr = '" & RS_Prod("ArtikelNr") &_
"') AND (Art.Extra_7 LIKE 'J') AND " &_
"(ArtPris.PrisLista = " & prislista & ") ORDER BY Art.Extra_9"
Set RS_plist = Conn.Execute(SQL)
if NOT RS_plist.EOF Then
pris = RS_plist("aPris")
else
' If special offer (can not be used together with price lists)
SQL= "SELECT Art.aPris AS pris1, ArtPris.aPris AS pris2, KundPris.aPris AS pris3 FROM KundPris, Art, ArtPris " &_
"WHERE Art.ArtikelNr = ArtPris.Artikelnr AND " &_
"(Art.ArtikelNr = '" & RS_Prod("ArtikelNr") &_
"') AND (Art.Extra_7 LIKE 'J') AND " &_
"(ArtPris.PrisLista = 1) ORDER BY Art.Extra_9"
Set RS_offer = Conn.Execute(SQL)
if NOT RS_offer.EOF then
ordpris = RS_offer("pris1")
pris = RS_offer("pris2")
specialpris = RS_offer("pris3")
end if
end if
end if
Fromdatum och todatum finns alltså i kundpristabellen?
SQL= "SELECT Kundpris.KundNr, KundPris.ArtikelNr, Art.Artikelnr, KundPris.aPris FROM Art, ArtPris, Kund, Kundpris " &_
"WHERE ('" & Session("user") & "'= kundpris.KundNr) AND " &_
"(Art.ArtikelNr = KundPris.ArtikelNr) AND " &_
"(Art.ArtikelNr = ArtPris.ArtikelNr) AND " &_
"(Art.ArtikelNr = '" & RS_Prod("ArtikelNr") &_
"') AND (Art.Extra_7 LIKE 'J')" & _
" AND ((FROMDATUM is NULL and TODATUM is NULL )" & _
" or (FROMDATUM is null and TODATUM > date )" & _
" or (FROMDATUM < date and TODATUM is null)" & _
" or date between FROMDATUM and TODATUM)" & _
" ORDER BY Art.Extra_9 "
Microsoft JET Database Engine error '80004005'
The specified field 'FROMDAG' could refer to more than one table listed in the FROM clause of your SQL statement.
/main/swe/order.asp, line 84
Ja och fälterna hette visst FromDag och TomDag, men det fixar man nu enkelt.
Det verkar alltså som det finns kolumner med samma namn i en annan tabell som också ingår i frågan. Då får man kvalificera kolummreferenserna
SQL= "SELECT Kundpris.KundNr, KundPris.ArtikelNr, Art.Artikelnr, KundPris.aPris FROM Art, ArtPris, Kund, Kundpris " &_
"WHERE ('" & Session("user") & "'= kundpris.KundNr) AND " &_
"(Art.ArtikelNr = KundPris.ArtikelNr) AND " &_
"(Art.ArtikelNr = ArtPris.ArtikelNr) AND " &_
"(Art.ArtikelNr = '" & RS_Prod("ArtikelNr") &_
"') AND (Art.Extra_7 LIKE 'J')" & _
" AND ((kundpris.FROMDAg is NULL and kundpris.TODAG is NULL )" & _
" or (kundpris.FROMDAG is null and KUNDPRIS.TODAG > date )" & _
" or (KUNDPRIS.FROMDAG < date and KUNDPRIS.TODAG is null)" & _
" or date between KUNDPRIS.FROMDAG and KUNDPRIS.TODAG)" & _
" ORDER BY Art.Extra_9 "