Avatar billede clp Nybegynder
02. maj 2002 - 21:33 Der er 8 kommentarer og
1 løsning

Søg i 2 databaser...

Jeg er ved at prøve på at lave en søge funktion og vil have den til at søge i 2 databaser, er der nogen der kan fortælle mig hvordan jeg gør det??

//clp
Avatar billede zech Nybegynder
02. maj 2002 - 22:25 #1
Øh, kan du ikke vare først søge i den ene, og derefter i den anden?
Avatar billede eagleeye Praktikant
02. maj 2002 - 23:11 #2
Ved to database filer:
  - Du er nød til at lave en connection til hver og du kan ikke "binde" søgningen sammen med SQL. Det er ikke mulig for en conenction at havde flere filer åbne.

Så som zech er skrevet er du nød til først at søge i den ene database og så i den anden database.
Avatar billede kotelet Nybegynder
03. maj 2002 - 01:12 #3
Altså TO ADODB connections med hver deres databasenavn:

Set Conn1 = Server.CreateObject("ADODB.Connection")
DSN1 = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & ("database1.mdb")
Conn1.Open DSN1

Set Conn2 = Server.CreateObject("ADODB.Connection")
DSN2 = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & ("database2.mdb")
Conn2.Open DSN2

set rs1 = Conn1.Execute(strSQL1)
set rs2 = Conn2.Execute(strSQL2)

osv...
Avatar billede clp Nybegynder
03. maj 2002 - 16:53 #4
Kan ikke få noget af dette til at virke...(kan godt ske at det er mig der er dum :-( ). Er det nemmer hvis det er 2 tabeller i samme database??
Avatar billede eagleeye Praktikant
03. maj 2002 - 17:06 #5
Hvis du skal kobinere de to søgeresultater med hinanden, så ja.

Det ville hjælpe lidt hvis du kunne komme med lidt mere information omkring din søgning evt ved et eks.

Altså hvis man søger på "bil".. Så skal den i database 1 søge i kolonnen biltype og i database 2 søge i kolonnen koretoj.

strSQL1 = "SELECT * FROM tabel1 WHERE biltype = 'bil'"
strSQL2 = "SELECT * FROM tabel2 WHERE koretoj = 'bil'"

set rs1 = Conn1.Execute(strSQL1)
set rs2 = Conn2.Execute(strSQL2)

'Udskriv fra DB1
do while not rs1.EOF
  Response.Write rs1("kolonnenavn") & "<br>"
  rs1.movenext
loop

'Udskriv fra DB2
do while not rs2.EOF
  Response.Write rs2("Andet_kolonnenavn") & "<br>"
  rs2.movenext
loop
Avatar billede clp Nybegynder
03. maj 2002 - 18:27 #6
Yep...jeg vil kombinere de to søgeresultater. fx at den skal trække et bil mærke ud fra den ene tabel og årgang fra cen anden tabel.
Jeg har en søge funktion lige nu som virker, men kun i en tabel

<% Response.Buffer = True %>
<%
' Udskriver Søgeordet
word = Request.form("Keyword")
Response.Write "<u>" & word & "</u>"
%>
<%
' Henter værdien fra search.htm
strKeyword = Trim(Request.Form("Keyword"))

' Hvis der ikke er skrevet i feltet
If Len(strKeyword) = 0 Then
Response.Clear
Response.Redirect("search.htm")

Else

' Hvis der er skrevet i feltet
strKeyword = Replace(strKeyword,"'","''")

End If

' Opbygger en dynamisk SQL streng
strSQL = "SELECT test1, test2, test3, test4, test5 FROM link WHERE"
strSQL = strSQL & " (test1 LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (test2 LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (test3 LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (test4 LIKE '%" & strKeyword & "%')"
strSQL = strSQL & " OR (test5 LIKE '%" & strKeyword & "%')"


' Databaseforbindelse [DNSless] - Stien til databasen lokaliseres
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("test.mdb")
Conn.Open DSN



' Skaber et recordset udfra SQL strengen
Set rs = Conn.Execute(strSQL)

' Hvis der er fundet poster på søgningen
If Not (rs.BOF Or rs.EOF) Then

Do While Not rs.EOF

' Variabler deklæres
test1 = rs("test1")
test2 = rs("test2")
test3 = rs("test3")
test4 = rs("test4")
test5 = rs("test5")


' Generere et link, som er defineret i databasen
Link = "<font color=000000><b><a href=" & test2 & ">" & test1 & ", " & test5 & "</a></b></font>"

' Udskriver linket som det blev genereret ovenfor + tilhørende kommentar

%>


<%
rs.MoveNext
Loop
Else

' Hvis der ikke er fundet poster på søgningen
Response.Write "<li>N / A"

End If

' Databaseforbindelsen lukkes
Conn.Close
Set Conn = Nothing
%>

hvordan får jeg den til at søge i begge tabeller??

Håber at det er beskrivelese nok :-)

//clp
Avatar billede eagleeye Praktikant
03. maj 2002 - 18:33 #7
Hvis du vil lave en SQL hvor begge tabeller indgår skal de to tabeller ligge i samme database fil.
Avatar billede clp Nybegynder
03. maj 2002 - 20:49 #8
begge tabelle liger også i samme database, men jeg kan bare ikke få lovt til at søge i begge.

Har prøvet med "strSQL = "SELECT test1, test2, test3, test4, test5 FROM link, link1 WHERE" (kolonnerne hedder det samme i begge tabeller) men det virker ikke.

//clp
Avatar billede zech Nybegynder
08. maj 2002 - 09:42 #9
clp> En kanon god ting du kan gøre, hvis du ikke er vildt hård til SQL-sætninger o.l. er, at bygge dem op i Access først. Når først du har bygget et par forespørgsler i Access, er det næsten som at genopfinde hjulet at lade være med at bruge Access ved komplekse søgninger.

I Access' query-område kan du bare trække tabellerne ind, og derefter trække felter ned i visningsområdet og sætte kriterier. Du kan med det samme se, om det virker som det skal, og i så fald gå til SQL visning og bare kopiere SQL-sætningen over i din kode.

Jeg har lige lavet et eksempel (det tog ca. 10 sekunder og det virker):

strSQL = "SELECT lande.l_navn, lande_region.r_navn "
strSQL = strSQL & "FROM lande, lande_region "
strSQL = strSQL & "WHERE (((lande.l_navn) LIKE '%" & strSearch & "%') "
strSQL = strSQL & "AND ((lande_region.r_navn) LIKE '%" & strSearch & "%'))"

Her søger jeg efter alle forekomster at strSearch i begge tabeller.

Bemærk dog, at hvis du skal have FORSKELLIGE poster ud fra tabellerne, SKAL du søge to gange og kun i 1 tabel af gangen. Hvis jeg i eksemplet søger efter "Danmark" og det forekommer 1 gang i den ene og 5 gange i den anden, så får du i udskriftet 5 stk. Danmark fra BEGGE tabeller, som om det kun forekommer 1 gang i den ene. Hvis du vil undgå det, skal du som sagt først søge i den ene (og får så 1 forekomst fra den) og så i den anden (og får så 5 forekomster fra den).
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