Avatar billede edderper Nybegynder
27. marts 2001 - 16:22 Der er 13 kommentarer og
1 løsning

Er der en SQL haj til stede?

Når jeg laver den følgende query mod min Access2000 db (både via asp og i Access\' interne query editor) bliver indholdet af Memofelter trunkeret til 255 tegn i resultatet. Det sker kun når jeg bruger GROUP BY eller DISTINCT for at fjerne ens records, ikke når det er en simpel SELECT query. 

SELECT overskrift, hovedtekst, sted, Arrangoer, URL
FROM ((news INNER JOIN nyhed_group ON news.id = nyhed_group.nyhed) INNER JOIN newsgroups ON nyhed_group.newsgroup = newsgroups.id) INNER JOIN user_groups ON newsgroups.id = user_groups.newsgroup
GROUP BY overskrift, hovedtekst, sted, Arrangoer, URL, user_groups.user, tidspunkt, visesfra, visestil
HAVING (((user_groups.user)=1) AND ((news.tidspunkt)>=Date()) AND ((news.visesfra)<=Date()) AND ((news.visestil)>=Date()))
ORDER BY news.tidspunkt

Det ser lidt rodet ud, et er mest på grund af de mange INNER JOINS og HAVING betingelserne - disse er problemet uvedkommende (tror jeg).

Jeg har på fornemmelsen at der her er tale om \"behavior by design\", så mit spørgsmål er egl. om der er nogen der kender til en måde til at filtrere duplikater fra uden at trunkere indholdet af Memo felter?
Avatar billede martinlind Nybegynder
27. marts 2001 - 16:34 #1
Det er \"behavior by design\", for det er IKKE en del af ANSI-92. Har ikke nogle gode ide\'r.
Avatar billede martinlind Nybegynder
27. marts 2001 - 16:35 #2
kan du ikke lave et index der ikke tillader dups. og så bruge det når du skal lave dit udtræk.
Avatar billede edderper Nybegynder
27. marts 2001 - 16:39 #3
>martinlind
Nej, duplikaterne er resultat af de joinede tabeller
Avatar billede proaccess Nybegynder
27. marts 2001 - 17:47 #4
Jeg tager et skud med følgende:

Prøv at genbruge dit memofelt, hvor du så siger First(Memo) den anden gang, så er der ikke tale om grupering dér...

ProAccess
Avatar billede edderper Nybegynder
28. marts 2001 - 11:32 #5
>Proaccess
Jeg forstår det ikke helt (sikkert mig der er dum)
Avatar billede edderper Nybegynder
28. marts 2001 - 11:36 #6
>martinlind

Jeg tror måake jeg har fanget hvad du mener med indexet (skulle lige sove på det)

Jeg laver mit rs sådan:

set objConn = server.createobject(\"ADODB.Connection\")
objConn.Open \"Driver={Microsoft Access Driver (*.mdb)}; DBQ=news.mdb;\"
set rs=objconn.Execute(\"dum SQL query\")

Er der en måde hvorpå jeg kan definere et index for et givet felt? og hvad sker der hvis query resultatet ikke overholder indexet?

Avatar billede martinlind Nybegynder
28. marts 2001 - 11:45 #7
edderper >> det lyder nu som om det er proaccess der har misforstået noget.

du burde kunne skrive :

Creates a secondary index.

CREATE [UNIQUE] [ASC | DESC] INDEX index_reference ON table_reference (column_reference [,column_reference...])

Description

Use the CREATE INDEX statement to create a secondary index for an existing table. Index names may not have embedded spaces. Paradox indexes may be based on multiple columns. Due to the distinctive nature of dBASE expression indexes, only single-column indexes can be created with CREATE INDEX.

Use UNIQUE to create an index that raises an error if rows with duplicate column values are inserted. By default, indexes are not unique.

Use ASC (or ASCENDING) to create an index that orders data in an ascending direction (smallest to largest). DESC (or DESCENDING) creates a descending ordering (largest to smallest). When a direction imperative is not specified, ASC is the implied default.

The following statement creates a multi-column (compound) Paradox secondary index.

CREATE INDEX CustDate ON \"Orders.db\" (CustNo, SaleDate)

The following statement creates a unique dBASE secondary index.

CREATE UNIQUE INDEX Namex ON \"Employee.dbf\" (Last_Name)

The existence of indexes may affect the updatability of queries. See the section on updatable queries for more information.

Fra LocalSQL.hlp jeg kan maile den til dig hvis du dropper en mail til mig martin@e-lind.dk
Avatar billede martinlind Nybegynder
28. marts 2001 - 11:45 #8
Du kan evt. bruge view\'s med fordel.
Avatar billede proaccess Nybegynder
28. marts 2001 - 12:09 #9
I Acc97 er det IKKE muligt at gruppere (eller vælge DISTINCT) på notatfelter (MEMO). Og jeg går ikke ud fra der er ændret så meget ved det i Acc2K...

Derfor vil man typisk lave en forespørgsel a\'la:

SELECT Left(mitFelt, 255) AS Grp, First(mitFelt) AS Felt FROM minTabel GROUP BY Left/mitFelt, 255);

Dette resulterer i at der grupperes på de første 255 tegn af feltet, og at der vises det fulde felt... Så det løser vel opgaven udemærket !!!

Avatar billede proaccess Nybegynder
28. marts 2001 - 12:11 #10
Selvfølgelig ...BY Left(mitFelt...
Avatar billede edderper Nybegynder
28. marts 2001 - 13:38 #11
Lige i øjet proaccess - det løser mit problem perfekt! Det er er vist ikke standat SQL?

Avatar billede edderper Nybegynder
28. marts 2001 - 13:39 #12
Også tak til martinlind for gode forslag både her og på mail
/per
Avatar billede martinlind Nybegynder
28. marts 2001 - 14:14 #13
Selv tak, nej det er vist ikke std. ANSI-92 SQL, men nok en Access-variant, har du ikke en SQL hjælp til din Access lige som den LocalSQL jeg sendte dig, der burde det jo stå.
Avatar billede proaccess Nybegynder
28. marts 2001 - 14:24 #14
Access kan ikke gruppere efter notatfelter, og så må man snyde, hvor man kan (nemlig ved at gruppere på tekstdelen, som er de første 255 tegn)...
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
Computerworld tilbyder specialiserede kurser i database-management

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