webForumDet fria alternativet

Söka i databas...på grodor!

9 svar · 746 visningar · startad av Insider

InsiderMedlem sedan jan. 2000978 inlägg
#1

Jag har gjort en db i Access 2000. Den innehåller en tabell med information om olika dammar.
Där finns bl.a. en kolumn som heter fauna. Den är av typen text. I den står det namn på djurarter separerade med ett komma.
Ex: padda, groda, bagge, ruda
Jag vill kunna söka i ett formulär på ett namn, så ska det komma upp en lista på alla dammar som innehåller den sökta arten.
Helst ska det gå att klicka på namnet på dammarna för att se fullständig info om dem.
Jag har oxå en kolumn som heter IDnr och som är unik för varje damm.
Är det någon som har några idéer???
(eller egna förslag)

flaerpMedlem sedan aug. 200030 inlägg
#2

Då ska vi se ...

Detta lilla OTESTADE script skall nog fungera.

* Ersätt dammtabell med namnet på din tabell.
* Ersätt damm med namnet på din kolumn med dammnamn.
* Gör någonting roligare med resultatet än MsgBox(rs.fields(0))

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Function SearchAnimal()
dim db as database
dim rs as recordset
dim search as string

search = InputBox("Vilket djurnamn vill du söka på?")

set db = CurrentDb
set rs = db.openrecordset("SELECT damm from dammtabell WHERE fauna LIKE '*" + search +"*' ORDER BY ID");

If rs.RecordCount = 0 Then
MsgBox ("Ingen träff")
Else
For i = 1 To rs.RecordCount
MsgBox(rs.fields(0))
Next i
End If
End function

[Redigerat av flaerp den 09 aug 2000]

InsiderMedlem sedan jan. 2000978 inlägg
#3

Jag ska göra det i Access alltså...går det?
Skapar jag ett formulär då eller hur använder jag koden?

Jag gjorde så här:
Skapade ett nytt formulär i Access, valde design, och klickade på kod i menyn.
Sedan klistarde jag in koden...
då vart en rad röd:

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">set rs = db.openrecordset("SELECT damm from dammtabell WHERE fauna LIKE '*" + search +"*' ORDER BY ID");
Nåt fel?
Gör jag rätt?

[Redigerat av Insider den 09 aug 2000]

[Redigerat av Insider den 09 aug 2000]

LaspMedlem sedan juli 200012 980 inlägg
#4

Jag tror att du börjar i fel ände!
Tillåt mig att fråga om syftet först. Kan du skriva ner några tankar!
Dammarna är ju fysiska och skall ligga i en tabell. En tabell skall innehålla de arter du vill kunna registrera.
Sedan är det dags för en relation. Dvs
När finns vad i var.
Datum är en bra relation dvs iaktagelse om xx antal grodor i dammen sjärnöga har en länk till grodor och en länk till Stjärnöga. Datum är sorteringsbegrepp. På detta sätt kan man se vad en viss damm innehåller och se var finns det grodor.
Kan detta vara en start?

------------------
GvdsSfdtTddv.

InsiderMedlem sedan jan. 2000978 inlägg
#5

Tabellen har egentligen två kolumner med fauna, en fauna-91 och en fauna-99. På så sätt ser man när det fanns vad i dammen.
Men det var väl inte så du menade kanske. I övrigt finns det inga datum med i tabellen.

Det är inte aktuellt att göra om databasen.
Jag tycker att den metod som angavs tidigare av flaerp borde funka...
Jag vet bara inte hur jag pusslar ihop det.
Man ska helt enkelt kunna söka på en speciell art.

Det den klagar på i koden är:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Dim db As Database

och

Set rs = db.openrecordset("SELECT Namn from nytt WHERE fauna LIKE '*" + search + "*' ORDER BY ID")

(jag tog bort semikolonet i slutet)

flaerpMedlem sedan aug. 200030 inlägg
#6

Ja, detdär semikolonet kom dit av bara farten, programmerar mest perl annars nu för tiden =)

Att inte "Dim db as Database" fungerar verkar lurt, vet inte om man behöver någon speciell del av access installerad för detta (installerar alltid alliting, jag)

Vad säger den vid Dim db?

flaerpMedlem sedan aug. 200030 inlägg
#7

Kom på ett nytt, bättre, smartare sätt att göra det på, när läste ditt inlägg ännu en gång ...

Gör ett formulär, lägg dit en listruta och en textruta, och ändra följande egenskaper:

* Döp listrutan till lista
* Döp textrutan till search
* Typ av radkälla i listan: tabell/fråga
* Radkälla (listan): SELECT namn FROM nytt WHERE (((fauna) LIKE "*" & [Formulär]![myform]![search].[Text] & "*"));

(Döp om myform till ditt formulärnamn, och nu skall semikolonet vara kvar.)

Dessutom skall följande in under Textrutan - händelse - vid ändring:

<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">
Private Sub search_Change()
Me.lista.Requery
End Sub

Jag mailar även ett exempel till dig.

(Är någon annan intresserad av exempel - skrik till)

[Redigerat av flaerp den 10 aug 2000]

InsiderMedlem sedan jan. 2000978 inlägg
#8

För det första har jag gjort om koden så den inte ligger i en funktion:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Private Sub Form_Load()

Dim db As Database
Dim rs As Recordset
Dim search As String
search = InputBox("Vilket djurnamn vill du söka på?")

Set db = CurrentDb
Set rs = db.openrecordset("SELECT Namn from nytt WHERE fauna LIKE '*" + search + "*' ORDER BY ID")

If rs.RecordCount = 0 Then
MsgBox ("Ingen träff")
Else
For i = 1 To rs.RecordCount
MsgBox (rs.Fields(0))
Next i
End If
End Sub
Hoppas man kan göra så.

Sedan när jag väljer att öppna formuläret kommer ett meddelande upp:
"Kompileringsfel: Egendefinierad typ har inte definierats"
'db As Database' blir blå markerat.

Om jag sedan för skojs skull tar bort hela den raden funkar det först och inmatningsrutan kommer upp. Jag skriver 'padda' (som finns med i fauna instoppat bland andra arter i formen: groda, padda, salamander)
När jag sedan trycker OK kommer ett meddelande upp: "Körfel nr '3061'.: För få parametrar angavs. 1 förväntades"
Sedan gulmarkeras följande:
<font size="1" face="Verdana, Arial, Helvetica, sans-serif">Kod:<font size="1" face="Verdana, Arial, Helvetica, sans-serif" color="#666600">Set rs = db.openrecordset("SELECT Namn from nytt WHERE fauna LIKE '*" + search + "*' ORDER BY ID")
Utan semikolon alltså.

InsiderMedlem sedan jan. 2000978 inlägg
#9

OK det funkade!
Du ska ha stort tack!!!

Nästa steg är ju att markera en damm i listan bland sökresultaten och få fram fullständig info om den dammen. (man blir aldrig riktigt nöjd vet du)
Det är säkert inte så svårt men jag tar gärna emot all hjälp jag kan få!

InsiderMedlem sedan jan. 2000978 inlägg
#10

Nu visas ju resultatet i en listbok, med namnen på dammarna.
Nu vore det jättetrevligt om det gick att klicka på ett namn i listan och få fram innehållet i alla fälten för just den dammen.
Jag har redan gjort textboxar med kontrollkälla för motsvarande fält i tabellen.
Vad blir nästa steg???

[Redigerat av Insider den 11 aug 2000]

[Redigerat av Insider den 11 aug 2000]

133 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
130 ms — hämta tråd, inlägg och bilagor (db)