Suchabfrage von mehreren DB !
Marcus
- datenbank
Hallo Brettgemeinde !
Bei mir läuft der IIS + ASP + Access im Intranet.
Nun habe ich eine Accessdatenbank mit 3 Tabellen.
Ich habe eine Suchmaske erstellt, wobei das
gesuchte Wort in einer der 3 Datenbanken ist.
Meine Abfrage soll erst die 1. Datenbank durchsuchen
und wenn da kein Ergebnis vorhanden ist zur nächsten
DB springen...etc.
mein Quellcode sieht wie folgt aus:
<%
Set conn = Server.CreateObject("ADODB.Connection")
conn.open "tsmail","",""
Set Session("tsmail_conn") = conn
SQL = "Select * From Posteingang where subject Like '" & Request.Querystring("betreff") & "%'"
SQL = SQL & "And from Like '" & Request.Querystring("mailadresse") & "%'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
IF rs.BOF AND rs.EOF Then GOTO Postbearbeitung
Else
%>
*** DARSTELLUNG von posteingang****
Postbearbeitung:
SQL = "Select * From postbearbeitung where subject Like '" & Request.Querystring("betreff") & "%'"
SQL = SQL & "And from Like '" & Request.Querystring("mailadresse") & "%'"
Set rs = Server.CreateObject("ADODB.Recordset")
rs.Open sql, conn, 3, 3
IF rs.BOF AND rs.EOF Then GOTO Postausgang
Ich möchte das erst in der Tabelle POSTEINGANG nach
dem gesuchten Wort gesucht wird, falls es nicht gefunden
wird soll in der Tabelle POSTAUSGANG gesucht werden.
Ich wollte das mit GOTO ... lösen leider funktioniert
das nicht.
Hat jemand einen andere Lösung ?
cu
Marcus
Hallo Marcus,
Nimm doch verschachtelte If - Anweisungen.
If in Posteingang Then Darstellung Posteingang
Else If in Postbearbeitung Then Darstellung Postbearbeitung
Else If in Postausgang Then Darstellung Postausgang
Else nicht gefunden.
Ich hoffe, damit ist Dir geholfen.
Gruß, Kess
Ich möchte das erst in der Tabelle POSTEINGANG nach
dem gesuchten Wort gesucht wird, falls es nicht gefunden
wird soll in der Tabelle POSTAUSGANG gesucht werden.Ich wollte das mit GOTO ... lösen leider funktioniert
das nicht.
Hat jemand einen andere Lösung ?
Hallo,
probiers doch einfach mal einer Funktion:
<%
Private Function Search(strTablename)
strSQL = "Select * FROM " & strTablename rs.open strSQL, conn, 3, 3
If Not rs.EOF Then
Search = True
Else
Search = False
End if
rs.Close
End Function
%>
Du rufst nun einfach die Funktion mehrfach mit den gewünschten Tabellennamen auf:
<%
Dim blnSearch
blnSearch = False
Dim aryTables(3)
aryTables(0) = "Tabelle1"
aryTables(1) = "Tabelle2"
aryTables(2) = "Tabelle3"
Do While Not blnSearch And i <= UBound(aryTables)
blnSearch = Search(aryTables(i))
i = i + 1
Loop
If blnSearch Then
Call PrintRecords(aryTables(i - 1))
End if
Private Sub PrintRecords(strTablename)
rs.open "SELECT * FROM " & strTablename
Do while Not rs.EOF
...
rs.Move Next
Loop
rs.Close
End Sub
...
%>
Ich hoffe, daß ich jetzt auf die schnelle keinen Tippfehler drinhabe, aber das sollte so eigentlich gehen.
Tscjau, Stefan
Ich möchte das erst in der Tabelle POSTEINGANG nach
dem gesuchten Wort gesucht wird, falls es nicht gefunden
wird soll in der Tabelle POSTAUSGANG gesucht werden.Ich wollte das mit GOTO ... lösen leider funktioniert
das nicht.
Hat jemand einen andere Lösung ?Hallo,
probiers doch einfach mal einer Funktion:
<%
Private Function Search(strTablename)
strSQL = "Select * FROM " & strTablename rs.open strSQL, conn, 3, 3
If Not rs.EOF Then
Search = True
Else
Search = False
End if
rs.Close
End Function
%>Du rufst nun einfach die Funktion mehrfach mit den gewünschten Tabellennamen auf:
<%
Dim blnSearch
blnSearch = False
Dim aryTables(3)
aryTables(0) = "Tabelle1"
aryTables(1) = "Tabelle2"
aryTables(2) = "Tabelle3"Do While Not blnSearch And i <= UBound(aryTables)
blnSearch = Search(aryTables(i))
i = i + 1
LoopIf blnSearch Then
Call PrintRecords(aryTables(i - 1))
End ifPrivate Sub PrintRecords(strTablename)
rs.open "SELECT * FROM " & strTablename
Do while Not rs.EOF
...
rs.Move Next
Loop
rs.Close
End Sub...
%>Ich hoffe, daß ich jetzt auf die schnelle keinen Tippfehler drinhabe, aber das sollte so eigentlich gehen.
Tscjau, Stefan
Hi !
Danke für die schnelle Antwort, jedoch
habe ich probleme mit dem lesen deines Sourcecodes.
Irgendwie schnalle ich das nicht :)
cu
Marcus
<%
' --- Suche in verschiedenen Tabellen (strTablename)
Private Function Search(strTablename)
strSQL = "Select * FROM " & strTablename rs.open strSQL, conn, 3, 3
' --- Rückgabewert True, wenn Ergebnisse gefunden wurden, False, wenn kein Ergebnis vorhanden ist.
If Not rs.EOF Then
Search = True
Else
Search = False
End if
rs.Close
End Function
%>Du rufst nun einfach die Funktion mehrfach mit den gewünschten Tabellennamen auf:
<%
' --- Boolescher Wert, um den Rückgabewert der Funktion Search abzufangen.
Dim blnSearch
blnSearch = False
' --- Array von 3 oder mehr ??? Tabellen anzugeben, die nacheinander abgefragt werden sollen.
Dim aryTables(3)
aryTables(0) = "Tabelle1"
aryTables(1) = "Tabelle2"
aryTables(2) = "Tabelle3"' --- Wiederhole, solange der Wert von blnSearch = False und der Index von aryTables nicht überschritten ist.
Do While Not blnSearch And i <= UBound(aryTables)
' --- Aufruf der Funktion Search.
blnSearch = Search(aryTables(i))
i = i + 1
LoopIf blnSearch Then
' --- Wenn blnSearch = True (DAtensätze gefunden), dann gib diese Sätze mit der Prozedur PrintRecords(Tabellenname) aus.
Call PrintRecords(aryTables(i - 1))
End ifPrivate Sub PrintRecords(strTablename)
' --- Ausgabe der Datensätze aus der ermittelten Tabelle, die als erstes mind. 1 Satz zurückgibt.
rs.open "SELECT * FROM " & strTablename
Do while Not rs.EOF
»» ' --- Ausgabe des Datensatzes.
...
rs.Move Next
Loop
rs.Close
End Sub...
%>Hi !
Danke für die schnelle Antwort, jedoch
habe ich probleme mit dem lesen deines Sourcecodes.Irgendwie schnalle ich das nicht :)
cu
Marcus
Hallo Marcus,
ich probier mal, Kommentare in den Quelltxet einzufügen. Hoffe, damit kommst Du klar.
Nun habe ich eine Accessdatenbank mit 3 Tabellen.
Ich habe eine Suchmaske erstellt, wobei das
gesuchte Wort in einer der 3 Datenbanken ist.
Drei Tabellen sind nicht drei Datenbanken! (Eine Suche in mehreren Datenbanken wäre in der Tat ein anspruchsvolles Problem.)
Meine Abfrage soll erst die 1. Datenbank durchsuchen
und wenn da kein Ergebnis vorhanden ist zur nächsten
DB springen...etc.
Hat jemand einen andere Lösung ?
Ich weiß zu wenig über Deine Tabellen und über Deine Aufgabenstellung.
Ist es beispielsweise wichtig, wo der Treffer gefunden wurde? Sind die Tabellen gleich oder wenigstens kompatibel formatiert?
In "richtigem" SQL könnte man die Suche ein einer UNION aus den drei Tabellen (oder geeigneten Projektionen derselben) durchführen.
Wenn man dies statisch als View abspeichert, dann nimmt das Programm gar nicht mehr wahr, daß es mehr als eine Tabelle durchsucht ...
Aber was Access angeht, bin ich da eher skeptisch, daß so etwas dort möglich ist.
In "richtigem" SQL könnte man die Suche ein einer UNION aus den drei Tabellen (oder geeigneten Projektionen derselben) durchführen.
Wenn man dies statisch als View abspeichert, dann nimmt das Programm gar nicht mehr wahr, daß es mehr als eine Tabelle durchsucht ...
Aber was Access angeht, bin ich da eher skeptisch, daß so etwas dort möglich ist.
Hallo Michael,
auch in Access sind UNION-Abfragen gar kein Problem. Funktioniert hervorragend. Am einfachsten ist es natürlich, wenn man den SQL-Cose direkt eingibt. Dann kann man auch ohne Probleme DDL-Statements absetzen ,nur keine DCL-Anweisungen, :(
Naja, aber ansonsten ist Access im Internet eigentlich gut zu gebrauchen, da die meisten ISP's keinen SQL-Server bereitstellen (außer gegen richtig Asche).
Tschau, Stefan