Avatar billede qqp Nybegynder
04. oktober 2009 - 00:03 Der er 28 kommentarer

Forspørgselskriterier

Har lavet en simpel database og forsøger nu at trække nogle oplysninger. Har en tabel hvor skal bruge oplysninger fra 2 kolonner, den ene en opslagskolone. Opslagskolonen kan håndtere flere oplysninger,(jeg kan fluebene flere værdier). Mit problem er nu at jeg skal bruge alle dem der har 2 værdier(flueben), uden at kende den indtastede værdi. Dette kan jeg ikke få den til. Håber det giver mening, kan forståes, og at nogen kan hjælpe.
Avatar billede mugs Novice
04. oktober 2009 - 00:10 #1
Jeg forstår ikke helt problemstillingen.

Men når du har 2 flueben i et opslag må det vel være en liste. Disse kriterier må jo så være enten det ene eller det andet som kan oversættes til det ene Or det andet. Men forespørslen skal jo kende værdierne!
Avatar billede kabbak Professor
04. oktober 2009 - 00:42 #2
Et eksempel
Tabel Testopslag:
Jeg har et felt "Opslags_ID" og 10 felter, til at flue af, de hedder fra 10 til 100, så der kan være op til 10 flueben.

et flueben har værdien -1, så 2 er -2

SELECT TestOpslag.Opslags_ID, TestOpslag.[10], TestOpslag.[20], TestOpslag.[30], TestOpslag.[40], TestOpslag.[50], TestOpslag.[60], TestOpslag.[70], TestOpslag.[80], TestOpslag.[90], TestOpslag.[100], [10]+[20]+[30]+[40]+[50]+[60]+[70]+[80]+[90]+[100] AS Antal
FROM TestOpslag
WHERE ((([10]+[20]+[30]+[40]+[50]+[60]+[70]+[80]+[90]+[100])=-2));
Avatar billede qqp Nybegynder
04. oktober 2009 - 10:23 #3
Kabbak: Det drejer sig ikke om faste tal værdier men navne. opslagskolonen trækker på en tabel som består af navne, lige nu 24 navne men med tiden flere. Jeg skal have muligheden for at trække dem ud hvor der er fluet 2 navne af, uden at kende navnene. håber det er muligt.
Avatar billede terry Ekspert
04. oktober 2009 - 10:54 #4
Can you give an example of your data and what you expect to see in the result?
Avatar billede qqp Nybegynder
04. oktober 2009 - 16:43 #5
Som beskrevet ovenfor, er der tale om en tabel hvori der indgår en opslagskolone. Opslagskolonen består pt af 24 navne, som kan vinges af/vælges. Nogle steder er der behov for at vinge 2 navne af, feltet kommer til at indeholde 2 navne. Det jeg ønsker er at lave en forspørgsel som kan trække de felter hvor der er 2 navne ud, kan blot ikke finde ud af at spørge på den rigtige måde. håber det blev mere forståeligt?
Avatar billede terry Ekspert
04. oktober 2009 - 16:49 #6
soryy that doesnt help!

Hvordan kan en opslagskolon "viges af"?


Please show some data
Avatar billede terry Ekspert
04. oktober 2009 - 16:50 #7
"viges af" = "vinges af"
Avatar billede qqp Nybegynder
04. oktober 2009 - 17:30 #8
Når man laver en opslagskolone, kan man sætte flueben i nogle små firkanter hvis man tillader at der kan være flere værdier, i dette tilfælde navne i feltet. sætte flueben = vinges af. gav det mening
Avatar billede terry Ekspert
04. oktober 2009 - 18:06 #9
"opslagskolone"

Maybe I'm missing somnething, but a "lookup" column gets its values from another table and you can only choose one.

A check box (yes/no, True/False...) can have three value -1 = True, 0 = False or NULL but it has NOTHING to do with "opslagskolone"
Avatar billede qqp Nybegynder
05. oktober 2009 - 18:35 #10
Terry: Er det med vilje at du blander engelsk og dansk?? En opslagskolone får som du skriver sine "værdier", i mit tilfælde navne fra en liste i en anden tabel. Jeg kan godt vælge flere værdier, man kunne ikke i access 2003, men kan i access 2007. Mit spørgsmål som nævnt ovenfor om man uden at kende navnene kan finde alle de felter hvor 2 eller flere navne er valgt og udlade alle de felter hvor der kun er 1 navn.
Avatar billede terry Ekspert
06. oktober 2009 - 08:50 #11
"Er det med vilje at du blander engelsk og dansk" = Yes

"Jeg kan godt vælge flere værdier, man kunne ikke i access 2003, men kan i access 2007."

Well I havent used Access 2007 so much so it may be possible although I dont undterstand how the data would be stored in the tables without changes.

Example:

tblListOfValues
---------------
ID AutoNumber (primary key)
ValueText Text

Data
1, "Value 1"
2, "Value 2"
3, "Value 3"
.
.



tblWork
ID AutoNumber (primary key)
fld1 Text (Just so we have other fields)
ValueID Long (Foreign key) Relationship to tblListOfValues



Data
1, "Some Text", 1
2, "Some more Text", 1
3, "And even more Text", 3
.
.


How do you get more than one value from tblListOfValues into one field (ValueID) in tblWork?


To do that would require a mnay to many relationship which requires a third table.

So can you please try and explain with some more info and maybe an example of your data?
Avatar billede qqp Nybegynder
06. oktober 2009 - 17:10 #12
Terry: Nej det er ikke måske muligt at vælge flere værdier - det er muligt. Prøv på dansk - ellers tak for hjælpen.
Avatar billede terry Ekspert
06. oktober 2009 - 17:20 #13
Der er ikke mig der skal hjælpes :o)
Avatar billede terry Ekspert
06. oktober 2009 - 17:23 #14
Der = Det
Avatar billede Slettet bruger
06. oktober 2009 - 18:50 #15
Hvilken datatype har opslagsfeltet?
Avatar billede qqp Nybegynder
06. oktober 2009 - 21:24 #16
Det er tekst - En liste med navne
Avatar billede Slettet bruger
06. oktober 2009 - 22:27 #17
qqp> En liste med navne

Så er antallet af listeseperatorer vel en mindre end antallet af navne.

Function cntNamesInList(txt, NSep)
    cntNamesInList = 1 + UBound(Split(Nz(txt, ""), NSep))
End Function

select <whatever> from tabel where cntNamesInList([<opslagsfelt>],"<listelementseperator>") = 2
Avatar billede qqp Nybegynder
06. oktober 2009 - 23:27 #18
Nu blev det rimeligt teknisk. Et gæt, så er det SQL teksten du har skrevet op? Hvordan får jeg den kørt ind i basen?
Avatar billede Slettet bruger
06. oktober 2009 - 23:42 #19
ja - sidste linie (select ...)er den forespørsel du efterlyser, dog er ting i hak parenteser begreber der skal erstattes med de feltnavne mm. som kun du kender.

Funktionen skal anbringes i et standard modul.
Avatar billede qqp Nybegynder
06. oktober 2009 - 23:58 #20
Jeg er på helt ny grund her. Når jeg forsøger at indsætte sætningen får jeg en fejl meddelelse: Der er fundet tegn efter SQL-sætningen.
Whatever= ??
opslagsfelt=kolonensnavn?
listelementseperator=??
Håber ikke jeg er alt for blank!!
Avatar billede Slettet bruger
07. oktober 2009 - 00:53 #21
Ja du er på rette vej, det skal netop give fejlmeddelelser hvis ikke du erstatter begreberne i hak parenteser med det som det virkeligt skal være med dine feltnavne og en listeelemntseperator som opslagskolonnen anvender.

I i en select sql skal man skrive feltnavne for det som skal vises - jeg gad ikke falde i staver over navne, men hvis man ikke kender syntaksen for en sql select er det måske ikke lige til at regne ud -  du skal ikke skrive noget af det der er omgivet af <>, men det det betyder, og ikke <> tegnene - de er ment lidt ligesom citation for at anskueliggøre at det er en abstraktion og ikke noget konkret, altså noget som skal erstattes af det som det konkret er i dit eksempel. Hvis resultatet af forespørslen skal være felterne felt1,felt2 betyder <whatever> felt1,felt2

Din tabel hedder nok ikke tabel

<opslagsfelt> skal erstattes med det navn du har for 'kolonnen' med et eller flere navne - iøvrigt er det lidt regnearkslingo at tale om kolonner -  i datasammen hænge bruger man navnet felter.

<listelemtseperator> er det tegn som separerer list elementerne, og list elementer er navnene der kan være flere af - jeg ville forvente at det var ";" men det aner det jo ikke (og dermed får vi også konceptet på banen - jeg vil ikke vide det!)
Avatar billede qqp Nybegynder
07. oktober 2009 - 10:56 #22
Nu får jeg en fejlmeddelelse som hedder: Der er en ikke-defineret funktion "cntNamesInList" i udtrykket.
Avatar billede Slettet bruger
07. oktober 2009 - 17:50 #23
i svar #19 står hvad der sørger for at funktionen defineret. I øvrigt har den en skønhedfejl - den retunerer ikke 0, hvis 1 argument er null eller den tomme streng - selvom det ikke betyder noget i dit eksempel så bør den se sådan ud:

Function cntNamesInList%(txt, Optional NSep = ";")
    If Len(txt) > 0 Then
        cntNamesInList = 1 + UBound(Split(txt, NSep)): End If
End Function
Avatar billede Slettet bruger
07. oktober 2009 - 17:55 #24
... og en 'if' med en enkelt statement skrives blot på samme linie, så :

Function cntNamesInList%(txt, Optional NSep = ";")
  If Len(txt) > 0 Then cntNamesInList = 1 + UBound(Split(txt, NSep)
End Function
Avatar billede qqp Nybegynder
08. oktober 2009 - 18:37 #25
Ny fejlmeddelse: Der er en syntaksfejl, fordi der mangler en operator!
Avatar billede Slettet bruger
08. oktober 2009 - 22:40 #26
Min fysiklærer i skolen kommentere sine mislykkede forsøg sådan: 'det er dem eleverne huskede'.
Det er bevist at jeg undlod at rette en fejl - Det er så banalt at jeg synes rettelsen ville være mistænkeliggørelse af læsere af denne dialog for at være ubehjælpsomme - jeg synes nemlig det er princippet der tæller - princippet er her et hint til et par vba statements der sammen tæller forekomst af bestemt tegn i en streng.
Avatar billede qqp Nybegynder
09. oktober 2009 - 09:34 #27
Tror nok du lige kaldte mig ubehjælpsom? anyway - tusind tak for forsøget på at hjælpe en nystartet Access/SQL bruger. smid et svar, du fortjener point for forsøget.
Avatar billede Slettet bruger
14. oktober 2009 - 20:18 #28
Jeg bruger spørgsmål til at eksponere viden og går ikke snævert efter af hjælpe spørgsmål stillere.
Forstår udmærket at der ofte jagtes efter noget der spiller, uden at have tid til at forstå - men det er så spørgerens problem. Ofte er andre så behjæpsomme - det galdt bare ikke denne gang.
Videre held og lykke et herligt 4. generations RAD tool.

er ligeglad med point legen!
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