24. oktober 2003 - 20:14Der er
18 kommentarer og 1 løsning
smukkere sql m asp og access
Hej
Jeg har et tekststreng m. kommasep. tal. Hvert tal svarer til et id nummer i en access tabel. Jeg har læst mig til at der højst kan være 40 klausuler (id = [tal]) i en sql streng. Da der kan forekomme mere end 40 tal i min kommesep. tekststreng, vil jeg gerne vide om der er en metode til at undgå at generere en klausul for hvert tal i strengen. Jeg har forsøgt med:
SELECT * FROM tabel WHERE id = ANY {1,25,12,34,n}
men får fejlen: Microsoft JET Database Engine error '80040e14' Malformed GUID. in query expression 'id = ANY {1,5,2}'.
Jeg vil gerne undgå:
SELECT * FROM tabel WHERE id = 1 OR id = 2 OR id = 3 OR id = n
Er det muligt?
Jeg kan ikke bruge BETWEEN fordi tallene ikke ligger op ad hinanden. Tallene er heller ikke i udgangspunktet ordnede, men kan blive det hvis det er nødvendigt.
det virker desværre stadig ikke. tror den forventer en subquery
ADODB.Fields error '800a0cc1' ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application.
jeg er lidt i tvivl om reglerne, men jeg vil gerne af med points. Så hvis det ellers er i orden med regler osv, så kunne jeg give points til den der svarer på om:
1. det er korrekt at der højst kan være fyrre klausuler (id = [tal]) i en sql streng i access / jetsql
2. det er rigtigt at det ikke er muligt at benytte kommasep tekststrenge i forbindelse m. ANY, ALL, IN og evt. SOME i access / jetsql
det ville sådan set også besvare spørgsmålet; nemlig at det ikke er muligt. En løsning er måske at teste for antallet af tal, hvis over fyrre, så del ved fyrre og kør sql kaldet to gange...
den fejl besked som du har fået betyder at du har ikke valgt, i din sql sætning, den felt som du vil skrive ud eller du har stavet forkert:
ADODB.Fields error '800a0cc1' ADO could not find the object in the collection corresponding to the name or ordinal reference requested by the application.
Med hensyn til IN så kan den fint bruges med en streng ihvertfald i SQL Server, men som hossein har bemærket så tyder den sidste fejlmeddelelse på at du refererer til et felt som ikke findes.
mange tak for linket, det besvarer jo sådan set spørgsmålet :) Selv om SQL strengen bliver to meter lang, så virker det så alligevel.
mht. IN osv, så tror jeg det skyldes at IN ([SQL streng]) opfattes som en 'virtuel' kolonne (hvis man kan kalde det det). I hvert fald trak jeg ikke på noget der ikke var i orden. Fejlen opstod i øvrigt også når jeg benyttede ANY (27,37).
Skidtet virkede da id = ANY (27,37) blev udskiftet med id = 27 OR id = 37
nu bliver det akademisk, jeg har nemlig slettet det igen. øjeblik... [5 minutter gik..] åbenbaring!
ja nu virker det altså. Jeg kan ikke sige hvilken fejl jeg lavede for jeg slette skidtet igen og brugte OR... Jeg kan godt se på koden at der ser mere rigtigt ud nu, men hvor fejlen lå ved jeg ikke. det ser ud til jeg skal have minus point for mine gode idér om virtuelle kolonner osv :)
htm skal vel have de fleste, erik også lidt for at være mere stædig end mig, så i må lige smide nogle svar
OK grunden yil at jeg ikke er stædig er at jeg ikke aner ret meget om asp og slet ikke hvilken sql der forstås og ikke forstås af access.
Men et svar skal du få
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.