Avatar billede cyberspace Nybegynder
07. oktober 2003 - 10:40 Der er 35 kommentarer og
1 løsning

Problem vedr. VB søgefunktion til Access database

Jeg sidder her og er ved at få mine 3 søgefunktioner til at åbne Access databasen. Jeg har indtastet følgende til hver søgefunktion.

Dim søgPåKunstner As String
Dim conn As Object, rs As Recordset
Set conn = CreateObject("ADODB.Connection")
conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("h:database\cddatabase.mdb ")
Set rs = conn.Execute("SELECT * FROM tabel WHERE felt LIKE '%" & Text1.Text & "%'")
Do While Not rs.EOF
Print rs.Fields("felt")
Loop

rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
End Sub

Men i linien hvor den skulle åbne databasen markerer den fej på ordet server - Hvorfor?

Lige en sidste ting hvordan få jeg koblet mit søgefelt (textbox) sammen med de 3 søgeknapper/søgefunktioner?
Avatar billede martin_moth Mester
07. oktober 2003 - 10:55 #1
Jeg synes din kode ser helt rigtig ud - Fejlmeddelse?
Jeg forstår ikke helt dit sidste spørgsmål - du bruger jo allerede Text1.Text i din søgning. Til gengæld bruger du ikke søgPåKunstner til noget...
Avatar billede cyberspace Nybegynder
07. oktober 2003 - 11:18 #2
Mit sidste spørgsmål går ud på at hvis jeg indtaster f.eks Metallica (i textboxen som jeg har kaldt TextIndtastDetDuSøgerEfter) så skal  programmet når jeg trykker på søg på kunstner, åbne Accesdatabasen og søge efter kunstnere ved navn Metallica.


hvordan fixer jeg det, at jeg ikke bruger SøgPåKunstner til noget? (det skal vel indsættes i koden et eller andet sted)
Avatar billede martin_moth Mester
07. oktober 2003 - 11:52 #3
Jeg mener bare, at du erklærer en variabel du ikek bruger - så hvorfor erklærer du den? Men måske bruger du den andetsteds.

Du har allerede løst dit sidste problem, når du klikker på søg kunstner-knappen kører du din viste kode, hvor du ved Text1.Text indsætter TextIndtastDetDuSøgerEfter.Text
Avatar billede tubber Juniormester
07. oktober 2003 - 11:53 #4
mangler der ikke et wprkspace ?
Avatar billede tubber Juniormester
07. oktober 2003 - 11:56 #5
Dim ws As Workspace
Dim db As Database
Dim rs As Recordset
Set ws = Workspaces(0)
Set db = ws.OpenDatabase("h:database\cddatabase.mdb")
Set rs = db.OpenRecordset("SELECT * FROM tabel WHERE felt LIKE '%" & Text1.Text & "%'")
Do While Not rs.EOF
Print rs.Fields("felt")
Loop

rs.Close
Set rs = Nothing
conn.Close
Set conn = Nothing
End Sub

Og så referencen Microsoft DAO 3.51 el. 3.6

Bare lige et forslag

/Tubber
Avatar billede cyberspace Nybegynder
07. oktober 2003 - 12:37 #6
tubber>> skal koden indsættes sammen med eller istedet for?
Avatar billede tubber Juniormester
07. oktober 2003 - 12:58 #7
i stedet for vil jeg tro......
Avatar billede tubber Juniormester
07. oktober 2003 - 12:59 #8
husk referencen
Avatar billede tubber Juniormester
07. oktober 2003 - 13:05 #9
lige et spg. hvad laver de % tegn ?
de skal vel væk ?

så det bliver:
Set rs = db.OpenRecordset("SELECT * FROM tabel WHERE felt LIKE '" & Text1.Text & "'")
Avatar billede cyberspace Nybegynder
07. oktober 2003 - 13:44 #10
tubber>> dit foreslag virker faktisk mere rigtigt, men den brokker sig over følgende  Set db = ws.OpenDatabase("h:database\cddatabase.mdb")
Avatar billede tubber Juniormester
07. oktober 2003 - 14:22 #11
("h:database\cddatabase.mdb") <-- der mangler en \ så det bliver
("h:\database\cddatabase.mdb")

/Tubber
Avatar billede tubber Juniormester
07. oktober 2003 - 14:23 #12
måske det også er den \ der er galt i din kode som du giver i spg.

så den først nu :O)
Avatar billede cyberspace Nybegynder
08. oktober 2003 - 09:05 #13
Den meddeler fejl i flg. linie
Set db = ws.OpenDatabase("h:\database\cddata.mdb")

(har checket at database navnet er rigtigt)
Avatar billede cyberspace Nybegynder
08. oktober 2003 - 09:30 #14
Det kan ikke have noget at gøre med, at inde i databasen der der oprettet nogle tabeller,som skal åbnes.  f.eks. H:\database\cddata.mdb\(Tabelnavn) ??
Avatar billede cyberspace Nybegynder
08. oktober 2003 - 09:31 #15
ups glemte " foran og efter det der skal åbnes
Avatar billede cyberspace Nybegynder
08. oktober 2003 - 11:07 #16
Nåt jeg har indtastet det jeg vil søge efter og klikker på f.eks. søg på kunstner så får jeg følgende fejl medd box  Run-time error '33431'
                                            Unreconized database fornmat
                                            ("h:\database\CdData.Mdb")

Når jeg checker koden er der fejl ved.
Set db = ws.OpenDatabase("h:\database\CdData.mdb")
Avatar billede cyberspace Nybegynder
08. oktober 2003 - 11:27 #17
Kan det have noget at gøre med at jeg bruger vB 6.0 Og Access 2002 (XP)
Avatar billede cyberspace Nybegynder
08. oktober 2003 - 13:32 #18
tubber>> kom lige til at se at du snakker om reference, kan du ikke lige kort uddybe
Avatar billede tubber Juniormester
08. oktober 2003 - 13:52 #19
referencen finder du i projects>references........
Der skal du hakke af ved den der hedder MS DAO 3.51 eller 3.6 hvis det er office 97 skal du bruge 3.51 og er det office 2k eller xp er det 3.6....

Du kan evt hente http://www.zentasoft.dk/SMS_by_Tubber.exe og se hvordan jeg bruger det i det program.....skal lige siges det ikke virker mere da teleselskaberne lukker for de services med at sende sms via mail....

/Tubber
Avatar billede tubber Juniormester
08. oktober 2003 - 14:06 #20
Set rs = db.OpenRecordset("SELECT * FROM (tabelnavn) WHERE (feltnavn) LIKE '" & Text1.Text & "'")

der skal ikke stå tabel....
der skal stå kunstner hvis det er kunstner du søger på.......
Avatar billede cyberspace Nybegynder
09. oktober 2003 - 09:35 #21
Den melder stadigvæk fejl i denne linie
Set db = ws.OpenDatabase("h:\database\CdData.mdb")

Hvis det kan hjækpe ser mine tabeller ud som flg. (1)TblCdmenu - (indehold) Cdmenu, KunstnerId1, CdNr1, SangId1, NummerNr1, Bemærkninger.
(2)TblKunstner - KunstnerId, Kunstner.
(3)TblCdNummer - Cdnr, NrPåCd, cd.
(4)TblSang - SangId, SangNummer.
(5)TblTitel - NummerNr, Numre.

Relationer (2) Kunstnerid til (1) KunstnerId1 -  en til mange
(3) CdNr til (1)CdNr1 - En til mange
(4) SangIdtil (1) sangId1 - en til mange
(5) NummerNr til Nummernr1 - en til mange

(Tallene er tabelnumre)

Håber nogen kan hjælpe, så det kommer til at funke.
Avatar billede tubber Juniormester
09. oktober 2003 - 11:12 #22
kan du ikke maile mig dit projekt som zip eller rar så skal jeg lige rette det til :O)

smolf@krog-frandsen.dk

/Tubber
Avatar billede cyberspace Nybegynder
09. oktober 2003 - 12:26 #23
Så skal du vel have både VB og Access

du får først VB så sig lige til hvis du skal bruge access
Avatar billede cyberspace Nybegynder
09. oktober 2003 - 12:43 #24
husk lige at den nævnte adresse på databasen (access) er den hvor jeg har den liggende (h:\......) så husk lige at nævne hvis du retter den
Avatar billede tubber Juniormester
09. oktober 2003 - 13:23 #25
Du må også gerne sende DB :O)
Ser på det når jeg kommer hjem har ikke lige vb her
Avatar billede cyberspace Nybegynder
09. oktober 2003 - 13:26 #26
ok
Avatar billede cyberspace Nybegynder
09. oktober 2003 - 13:30 #27
Giver gerne ekstra point hvis det tilbagesendte Bare er ok/thumbs up!
Avatar billede cyberspace Nybegynder
09. oktober 2003 - 13:31 #28
Ekspertes ved i morgen
Avatar billede tubber Juniormester
09. oktober 2003 - 19:03 #29
Jeg ved ikke om jeg når det til i morgen.....der er en hel del ved din søgefunktion der ikke stemmer, men skal nok rette den til så du kan se hvad der sker......

Men jeg bliver nød til at redesigne din db lidt, da der er noget der ikke helt hænger sammen for mig, måske fordi jeg ikke er god til relationer......
Men du søger på kunstner.....men du vil ha et tal ud......som så skal et eller andet, men i og med du søger på kunstner skal du ind i kunstner tabellen, og (hvis jeg forstår relationer bare en smule) så kører det modsatte vej, så du vil ikke få en søgning der kan bruges.......

Jeg kigger på det........
Avatar billede cyberspace Nybegynder
10. oktober 2003 - 08:20 #30
Takker foreløbigt
Avatar billede tubber Juniormester
12. oktober 2003 - 02:44 #31
Har fundet ud af 2 ting :O)

Tager lige den nemme først, i vb skal man bruge * istedet for % som vildcard...

og her kommer søgefunctionen (har kun lavet på kunstner):

Private Sub cmdSøg_Click()
'Chekker om søgefeltet er tomt
If TextIndtastDetDuSøgerEfter = "" Then
    MsgBox "Søgefeltet er tomt!", vbCritical, "Advarsel"
Else:
'Opretter workspace
Set ws = Workspaces(0)
'Opretter database connection - DB ligger i programmappen
Set db = ws.OpenDatabase(App.Path & "\CdData.mdb")
'Her tages der højde for hvad der søges på
If comSøg.Text = "Kunstner" Then
    Set rs = db.OpenRecordset("SELECT * FROM tblCd WHERE rsKunstner LIKE '*" & TextIndtastDetDuSøgerEfter.Text & "*'")
    lstSøg.Clear
    If Not rs.EOF Then
        rs.MoveFirst
        Do While Not rs.EOF
            lstSøg.AddItem rs!rsKunstner
            lstSøg.ItemData(lstSøg.NewIndex) = rs!rsID
            rs.MoveNext
        Loop
    End If
ElseIf comSøg.Text = "Sang Titel" Then
    Set rs = db.OpenRecordset("SELECT * FROM tblTitle WHERE rsSangTitle LIKE '" & TextIndtastDetDuSøgerEfter.Text & "'")
ElseIf comSøg.Text = "CD Titel" Then
    Set rs = db.OpenRecordset("SELECT * FROM tblCd WHERE rsCdTitle LIKE '" & TextIndtastDetDuSøgerEfter.Text & "'")
End If
End If
End Sub
Avatar billede tubber Juniormester
12. oktober 2003 - 02:45 #32
Og lige en bonus her.
Det er hvordan jeg laver en relation i vb i stedet for i access.....

Private Sub lstSøg_Click()
Set ws = Workspaces(0)
Set db = ws.OpenDatabase(App.Path & "\CdData.mdb")
Set rs = db.OpenRecordset("SELECT * FROM tblCd")

'Moves to the firts recordset

If Not rs.EOF Then
    rs.MoveFirst
   
'Loop that makes the program go throug the database
   
    Do While Not rs.EOF

        'When the record is found the textfields is filled
       
        If rs!rsID = lstSøg.ItemData(lstSøg.ListIndex) Then
            varCdNr = rs!rsCdNr
            txtKunstner.Text = rs!rsKunstner
            txtTitel.Text = rs!rsCdTitle
            txtGenre.Text = rs!rsGenre
            txtCDnr.Text = rs!rsCdNr

                Set rs = db.OpenRecordset("SELECT * FROM tblTitle")
               
                'Moves to the firts recordset
               
                If Not rs.EOF Then
                    rs.MoveFirst
                   
                'Loop that makes the program go throug the database
                   
                    Do While Not rs.EOF
               
                        'When the record is found the textfields is filled
                       
                        If rs!rsCdNr = varCdNr Then
                            MsgBox rs!rsCdNr
                            MsgBox varCdNr
                            varCdNr = rs!rsCdNr
                            lstSangTitel.AddItem rs!rsSangNr & " - " & rs!rsSangTitle
                           
                        End If
                        rs.MoveNext
                    Loop
                End If
        Exit Sub
        Else: rs.MoveNext
        End If
    Loop
End If
End Sub
Avatar billede tubber Juniormester
12. oktober 2003 - 02:46 #33
Jeg mailer lige projektet tilbage :O)

/Tubber
Avatar billede cyberspace Nybegynder
14. oktober 2003 - 08:14 #34
Jeg har ikke fået kigget så meget på det men det ser ud til at være i orden, Giver point når jeg har checket det en gang til
Avatar billede cyberspace Nybegynder
14. oktober 2003 - 19:41 #35
Nå så har jeg fået kigget noget mere på den den.

Jeg kan se at der er lavet et projekt1 (søgefunktion1) denne indeholder vedligeholdelsesfunktiuonen (form2x)  men der er ikke nogen søge form (søgeform1) i projekten, den ligger mare ved siden af. er dette meningen?

Når jeg åbner og vil køre projektet søgefunktion 1 med vedligeholdelsesformen (form2) så siger den "you must have a start up form, dette kan jeg kun midlertidigt løse.

Skal jeg ikke på en måde have koblet de forms sammen i projektet (søgefunktion1) så de kan arbejde sammen

Når jeg så prøver at åbne formen (søgefunktion1) og prøver at starte/køre søgefunktionen så markerer den fejl (user-defined type not defined) ved ws As Workspace (generals).

Men så hvidt jeg kan se vil den brokke sig over følgende  under generels)
Dim ws As Workspace
Dim db As Database
Dim rs As Recordset
Dim varCdNr As Long
Avatar billede tubber Juniormester
14. oktober 2003 - 22:20 #36
Så vidt jeg ved skal du bare dobbeltklikke på den vbp fil der er så skulle det være som det skal, men måske det er fordi du ikke har sp5 til vb ved jeg ikke....
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
Kurser inden for grundlæggende programmering

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