Avatar billede cyberspace Nybegynder
25. september 2003 - 08:48 Der er 30 kommentarer og
1 løsning

Vb søgefunktion så der kan søges i en Access database

Jeg sidder her og godt kunne bruge lidt hjækp/hints, til hvordan jeg griber følgende opgave and.

Jeg vil lave en søge funktion i VisualBasic 6.0 hvor søgefunktionen skal gå over i en Access database og søge efter oplysninger. Som en ekstra funktion vil jeg ferne kunne vedligeholde Access databasen via funktioner i VB søgefunktionen
Avatar billede -thomas- Nybegynder
25. september 2003 - 08:54 #1
Du åbner databasen sådan her:

Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")


'Herefter kan du søge i den vha. alm. SQL (se http://www.w3schools.com/sql/default.asp):

Set rs = conn.Execute("SELECT * FROM tabel")

Do While Not rs.Eof
Print rs.fields("felt")
Loop

rs.Close
Set rs = Nothing

'Når du er færdig med databasen lukkes den igen:
Conn.Close
Set Conn = Nothing
Avatar billede -thomas- Nybegynder
25. september 2003 - 08:57 #2
Du kan f.eks. bruge LIKE til at søge i databasen (http://www.w3schools.com/sql/sql_where.asp)

eks.

SELECT * FROM tabel
WHERE felt LIKE '%abc%'

Ovenstående finder alle poster i tabellen "tabel" hvor feltet "felt" indeholder "abc".
Avatar billede cyberspace Nybegynder
25. september 2003 - 09:13 #3
-thomas->> dik første link virker ikke
Avatar billede -thomas- Nybegynder
25. september 2003 - 09:16 #4
http://www.w3schools.com/sql/default.asp

der var lige kommet lidt for meget med :)
Avatar billede cyberspace Nybegynder
25. september 2003 - 09:55 #6
-thomas->> ok link

Men jeg kunne godt bruge lidt mere konkret opstartshjælp til følgende

jeg har lavet designet til en VisualBasic søgefunktion. der er 3 søgemuligheder. Søg på kunstner, søg på cd og søg på cd  nummer. til de 3 søge funktioner/knapper er der en text box hvor det er meningen at man så indtaster det man vil søge efter/på og så klikker man på den af de 3 søge knapper der passer der til. Når den har søgt skal den så vise resultatet i en label i søgefunktionen.

Nb! Når den søger er det meningen at den skal åbne en Access Database og foretage søgningen der i og så vise det fundne i lablen i VBsøgefunktionen.

Det er til dette jeg godt kunne bruge et par hints/lidt opstarts hjælp
Avatar billede cyberspace Nybegynder
25. september 2003 - 10:14 #7
glemte lige at nævne at det er version 6.0 jeg bruger
Avatar billede cyberspace Nybegynder
25. september 2003 - 10:33 #8
-thomas->> vedr. 08:54:06

det du skriver skal det indsættes i formen?
Avatar billede martin_moth Mester
25. september 2003 - 11:08 #9
Prøv at kikke i de links - der er masser(!) af eksempler på det du vil.

Connect til database
Lav udtræk fra database via SQL og gem resultat i et recordset
Vælg det du ønsker fra dit recordset og udskriv det fx. til en label
Avatar billede cyberspace Nybegynder
25. september 2003 - 11:19 #10
martin moth>> har stortset checket alle link, men fandtumiddelbart ikke lige det jeg skulle bruge.

Desværre må jeg sig at jeg kender nada til SQL (syntes dog at noget af det minder lidt om VisualBasic
Avatar billede martin_moth Mester
25. september 2003 - 11:30 #11
SQL er en slags fælles databasesprog, som du kan bruge til fx. at hente data i en database - det behøver ikke at være fx. Access.

Jeg kommenterer lige svaret fra -thomas-, så du kan forstå hvad der sker. Jeg har lige tilføjet en Dim rs As Recordset, da -thomas- havde glemt den

'1. Først erklæres den variabel, der skal oprette forbindelsen til databasen (conn) og den variabel, der skal indeholde udvalgte data fra databasen (rs):

Dim rs As Recordset
Dim conn As Object
Set conn = CreateObject("ADODB.Connection")



'2. Herefter oprettes forbindelsen til den fysiske database, Data.mdb

Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")



'3. Ved hjælp af et SQL-udtryk vælges hvilke poster der skal indlæses fra databasen i dit recordset. Her vælges at alt (*) fra tabellen "tabel" i databasen skal indlæses i variablen.

Set rs = conn.Execute("SELECT * FROM tabel")


'4. Der loopes igennem recordsettet. Hvert felt udskrives

Do While Not rs.Eof
  Print rs.fields("felt")
Loop


5. recordsettet og databasen lukkes, og variabler inedlægges
rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing

Pkt. 1 & 2 kan laves på mange forskellige måder, her er valgt en ADODB connection. Mange andre muligheder forelægger.

Punkt 3 er meget vigtigt. Ved at lave et SQL-udtryk (SELECT * ...) kan du udvælge præcis de data fra databasen du ønsker. Det er utrolig godt bedkrevet på http://www.w3schools.com/sql/default.asp, så pløj lige de sider igennem, det er gjort på 15 minutter :o)
Avatar billede martin_moth Mester
25. september 2003 - 11:32 #12
NB: I de linke jeg har beskrevet er der altså 100-vis af eksempler - jeg har selv skrevet nogen af dem. At connecte til database er nok et af de mest stillede (og besvarede) spørgsmål....
Avatar billede martin_moth Mester
25. september 2003 - 11:34 #13
PS: Mht dine søgefunktioner:

Du kan jo blot fyre et passende SQL-udtryk af der matcher din søgning:

SELECT * FROM Kunstnertabel Where Fornavn='Anders'

Og en anden SQL for de andre søgefunktioner :o)
Avatar billede -thomas- Nybegynder
25. september 2003 - 12:01 #14
Undskyld, har slet ikke set at der har været nye indlæg.

martin_moth har vist svaret på det hele, ellers må du lige skrive igen...
Avatar billede cyberspace Nybegynder
25. september 2003 - 12:21 #15
martin moth>> kunne godt bruge, at du havde defineret hvor  kodeforslagene skulle indsættes
Avatar billede cyberspace Nybegynder
25. september 2003 - 12:23 #16
-thomas->> du måda gerne svare påovenstående, hvis du er hurtig  nok
Avatar billede -thomas- Nybegynder
25. september 2003 - 12:27 #17
cyberspace> Du kan jo egentlig placere dem hvor du vil. Hvis det er til en søgefunktion, kan du evt. lægge dem i den knap, altså i:

Private Sub Command1_Click()

End Sub

Hvis du vil søge på noget du selv har indtastet i et tekst-felt, kan du bruge følgende:

Set rs = conn.Execute("SELECT * FROM tabel WHERE felt LIKE '%" & Text1.Text & "%'")

ell. lign.

Kan du bruge det til noget?
Avatar billede -thomas- Nybegynder
25. september 2003 - 12:29 #18
Dvs. at det ville blive til noget lign. (har ikke afprøvet det, men det giver dig ihvert fald en ide om hvordan du kan gøre det).

Private Sub Command1_Click()

Dim conn As Object, rs As Recordset
Set conn = CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("data.mdb")


'Herefter kan du søge i den vha. alm. SQL (se http://www.w3schools.com/sql/default.asp):

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

'Når du er færdig med databasen lukkes den igen:
Conn.Close
Set Conn = Nothing
End Sub
Avatar billede cyberspace Nybegynder
25. september 2003 - 13:03 #19
Grunden til at jeg gerne vil vide hvor de forskellige kodeeksempler  skal indtastes er for at få koden til at virke og ikke få fejlmeddelelser
Avatar billede -thomas- Nybegynder
25. september 2003 - 13:07 #20
Hvad har du i forvejen. Du skal selvfølgelig have en form med en knap i dit vb-project. Derudover skal du have en access-fil med en tabel i samme mappe.

Hvad får du af fejl?
Avatar billede cyberspace Nybegynder
25. september 2003 - 13:53 #21
jeg har følgende: Form_Load()(formen), 3 søge knapper - CmdSøgPåKunstner_Click() (Søg på kunstner), cmdSøgPåCdNavn_Click() (Søg på navn), cmdSøgPåCdNummer_Click()(søg på cd nummer),  TextIndtastDetDuSøgerEfter_Change() (indtast det du vil søge efter - skal hænge sammen med de 3 søge knapper)
og tilsidst Label1_Click() (label der skal vise resultatet af søgningen)
Avatar billede cyberspace Nybegynder
25. september 2003 - 14:11 #22
-thomas- den markerer bl.a. der vhor jeg har skrevet stien til db (conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("data.mdb")) har ændret så det skulle passe men det gør det ikke
Avatar billede -thomas- Nybegynder
25. september 2003 - 14:26 #23
Ok, du skal nok lige starte med at få forbindelse til database, før du begynder på søgefunktionerne.

Gem din Access-fil i roden af dit C-drev, og kald den data.mdb. Prøv derefter at køre følgende i vb, og se om den stadig giver fejl:


Dim conn As Object
Set conn = CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)};DBQ="&Server.MapPath("c:\data.mdb")


Conn.Close
Set Conn = Nothing
Avatar billede cyberspace Nybegynder
25. september 2003 - 15:15 #24
-thomas- ok nu er jeg med.
Avatar billede martin_moth Mester
25. september 2003 - 16:41 #25
Visual Basic er et EVENT-dirven programmeringssprog. Din kode bliver kun udført ved er en event (fx. en bruger der trykker på noget)

Så smid koden lige nøjagtig der hvor du selv synes den skal være
Avatar billede cyberspace Nybegynder
26. september 2003 - 13:01 #26
martin moth>>  ja hvis man ved hvad koden bruges til ellers skal man jo vide hvor den skal smides hen og man skal jo lige have checket om den henviser til den knap der skal aktivere koden. - Ikke for at virke/lyde dum, men det kan jo forekomme at man ikke lige med det samme ved hvad koden skal bruges til
Avatar billede cyberspace Nybegynder
26. september 2003 - 13:19 #27
det er jo ikke som at programere i notepad ogl. - god weekend
Avatar billede martin_moth Mester
26. september 2003 - 13:22 #28
Jeg synes ellers det er ret tydeligt i mit svar 25/09-2003 11:30:31 hvad koden gør. Om du så vil udføre koden når du klikker på en knap, når du loader din form, når... må du selv om

God weekend til dig også :o)
Avatar billede -thomas- Nybegynder
26. september 2003 - 16:29 #29
Du kan jo lægge koden hvor du vil - eneste forskel er hvornår den bliver afviklet:

Lægger du den i Command1_Click() bliver den afviklet når der trykkes på knappen Command1.
Lægger du den i Form_Load() bliver den afviklet når formen loades.
osv. osv.

Men eftersom koden i dette tilfælde er en søgefunktion, er det oplagt at lægge den i Command1_Click().

God weekend!
Avatar billede -thomas- Nybegynder
02. oktober 2003 - 11:35 #30
Tak for point :)
Avatar billede martin_moth Mester
02. oktober 2003 - 12:27 #31
Takker ikke for point
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