Avatar billede hulla Novice
30. november 2008 - 15:10 Der er 19 kommentarer og
1 løsning

Access query der ikke virker

Hej

Jeg har et problem med en query til en access db.
Jeg kan ikke selv køre queryen fordi jeg har en 2000 db og et 2007 program. Eller kan jeg?

I hvertfald er problemet denne query:

"SELECT * FROM ( SELECT TOP (@NumberOfRows) * FROM (SELECT TOP (@OffSet) * FROM User ORDER BY User.Id Desc) AS a ORDER BY a.Id Asc) AS b ORDER BY b.CreatedDate DESC;"

Jeg får denne fejl:

"SELECT-sætningen indeholder et reserveret ord eller argument, der er stavet forkert eller mangler, eller tegnsætningen er ikke korrekt."

Nogen her der kan køre queryen og fortælle hvad der er galt?

:-)
Avatar billede mugs Novice
30. november 2008 - 15:17 #1
"( SELECT TOP (@NumberOfRows)"

Top ?? Når du selecter en Top, skal du sikkert også vælge hvor mange poster du vil have med. Top 5, Top 10 o.s.v.
Jeg forstår heller ikke din sortering.
@ kan være et reserveret tegn.

Prøv at indsætte dine argumenter eet for eet og se, hvor den fejler.
Avatar billede hulla Novice
30. november 2008 - 16:29 #2
Altså det er jo naturligvis en parameteriseret query.
De to parametre du hentyder til får jo værdi inden jeg eksekverer den.

command.Parameters.Add("@NumberOfRows", OleDbType.Integer).Value = numberOfRows;
command.Parameters.Add("@OffSet", OleDbType.Integer).Value = offSet;
dReader = command.ExecuteReader();
Avatar billede terry Ekspert
30. november 2008 - 16:59 #3
just a suggestion. Replace the parameters with values and then see if the query works.
Avatar billede hulla Novice
30. november 2008 - 17:13 #4
Jeg har prøvet lidt af hvert nu, og hvis jeg skriver 10 istedet for f.eks. @NumberOfRows kan den del køre.
En anden ting jeg ikke kan få til at virke er delen med at lave en select og kalde den noget: AS a f.eks.

Findes der en anden måde at lave denne type query til Access.
Det jeg skal opnå er naturligvis en query der kan klare paging.
Avatar billede terry Ekspert
30. november 2008 - 17:24 #5
If you try the FULL query which you gave above and replace ALL parameters with values.

not just part of!

"...query der kan klare paging"?
I dont think this has much to do with Access but the program which you use to execute the query.
Avatar billede fdata Forsker
01. december 2008 - 12:27 #6
Hvilket sprog er det, du udvikler i?
Avatar billede hulla Novice
01. december 2008 - 17:40 #7
Jeg bruger C#, og det er OLEDB jeg bruger som connection.
Alt denne kode jeg postede virker 100% mod en MS SQL SERVER og har kørt produktion længe.
Avatar billede terry Ekspert
01. december 2008 - 18:05 #8
MS SQL SERVER isnt Access!

MS SQL SERVER SQL and Access SQL are not the same so you cant expect Access to understand the SQl you throw at it.
Avatar billede hulla Novice
01. december 2008 - 18:38 #9
Nej det forstår jeg efterhånden :-)

Hvordan laver man en query der kan modtage to parametre og derudfra levere en givent antal records i et givent interval. (til access)

Altså f.eks. levere 10 records fra nummer 100 - 110 i tabellen?

Kan det forstås?
Avatar billede mugs Novice
01. december 2008 - 18:45 #10
Between 100 And 110
Avatar billede mugs Novice
01. december 2008 - 18:47 #11
Eller:

Between [indtast mindste værdi] And [indtast højeste værdi]
Avatar billede terry Ekspert
01. december 2008 - 18:51 #12
If You send an SQL somthing like thsi into Access doesnt it work?

"SELECT * FROM ( SELECT TOP 100 * FROM (SELECT TOP 200 * FROM [User] ORDER BY [User].Id Desc) AS a ORDER BY a.Id Asc) AS b ORDER BY b.CreatedDate DESC;"
Avatar billede hulla Novice
01. december 2008 - 18:57 #13
Det virker måske.. men jeg skal jo kunne angive tallene 100 og 200 som parametre.
Hvordan ville det se ud hvis jeg skulle gøre noget i retning af:

"SELECT * FROM ( SELECT TOP @rowcount * FROM (SELECT TOP offset * FROM [User] ORDER BY [User].Id Desc) AS a ORDER BY a.Id Asc) AS b ORDER BY b.CreatedDate DESC;"
Avatar billede terry Ekspert
01. december 2008 - 19:05 #14
you can build the SQL dynamically

SELECT * FROM ( SELECT TOP " & SomeVariable & " * FROM (SELECT TOP " & SomeOtherVariable & " * FROM User ORDER BY User.Id Desc) AS a ORDER BY a.Id Asc) AS b ORDER BY b.CreatedDate DESC;"
Avatar billede terry Ekspert
01. december 2008 - 19:05 #15
I'm off out now, will look later if I have time
Avatar billede hulla Novice
01. december 2008 - 19:52 #16
Ja man kan bygge det dynamisk på den måde, men kan det ikke lade sig gøre med parametre? Det gør det andet andet lige en del mere sikkert.
Avatar billede terry Ekspert
01. december 2008 - 22:04 #17
Well I'm not too familier with C# but after a bit of searching around I think I see your problem.
http://msdn.microsoft.com/en-us/library/bbw6zyha.aspx

Look under the "OleDb Parameter Placeholders" section. >>>You must use question mark (?) placeholders to identify the parameters
Avatar billede terry Ekspert
16. december 2008 - 09:46 #18
status?
Avatar billede hulla Novice
23. november 2009 - 10:25 #19
Sorry for tiden der gik
Avatar billede terry Ekspert
23. november 2009 - 10:31 #20
No problem, hope you got something working

and thanks for the points
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester