Hallo!
Ich hab’ da mal eine Frage ;o)
Werd’ mal zuerst mal mein Problem erklären:
Ich habe eine Access-Datenbank, auf die aus dem Internet per ASP zugegriffen wird. Dort sind u.a. folgende Felder drin:
iuprogram --> ein textfeld das entweder bba / bsc / mba oder mict ist
iuenrollyear --> das jahr in dem das studium begonnnen wurde, also 1998, 1999, 2000 usw…
Die Datenbank enthält diese Infos für alle ehemaligen Studenten. Ich habe nun vor eine Suchfunktion zu machen in der es nur ein suchfeld gibt das „iuprogram“ und „iuenrollyear“ kombiniert, einfach aus platzgründen.
Also mögliche eingaben sollten sein: bba 2000, bba2000, bsc, 2000 usw. (oder auch 2000 bba, vielleicht sogar 99 bba ??)
Lässt sich das per SQL irgendwie realisieren? Man müsste das doch irgendwie komibinieren können…
also select * from alumni where … ??? :o) danke!
Danke für alle Tipps, ich würde mich sehr freuen! Notfalls tut’s auch gerne ein Link zu einer WebSite wo das so oder ähnlich erklärt wird! :o)
Dennis =o)
Das ist ja eher eine ASP- bzw VBScript-Frage…
(Ich nehme mal an, du verwendest VBScript…)
Du musst halt in VBScript dein Formularfeld so zerlegen, dass daraus eine vernünftige SQL-Abfrage wird.
Also etwa so:
Tmp = Request.Form("Eingabefeld")
I = 1
iuenrollyear = ""
iuprogram = ""
For I = 1 to Len(Tmp)
If Isnumeric(Mid(Tmp,I,1)) then
iuenrollyear = Mid(Tmp,I)
iuprogram = Left(Tmp,I-1)
Exit For
End If
Next
For I = 1 to Len(iuenrollyear)
If Not Isnumeric(Mid(iuenrollyear,I,1)) then
iuenrollyear = Left(iuenrollyear,I-1)
exit for
end if
Next
SQL = ""
If iuprogram "" then SQL = SQL = "AND iuprogram = '" & iuprogram & "'"
If iuenrollyear "" then SQL = SQL = "AND iuenrollyear=" & Clng(iuenrollyear)
if SQL "" then SQL = "SELECT \* FROM alumni WHERE " & Mid(SQL, 5)
Set RS = myConn.Execute(SQL)
' usw.
Gruß aus dem Norden
Reinhard Kraasch
Hallo Reinhard!
Vielen Dank für Deine Antwort, ich werde das gleich morgen ausprobieren!
Vorweg jedoch eine Frage, da ich noch nicht so viel Erfahrung mit ASP/VBScript habe (ja, es ist VBScript):
kann ich das einfach „irgendwo“ (d.h. da wo ich jetzt das normale „select“ stehen habe, also irgendwo „mittenrein“) ins ASP einfügen und das funktioniert? Ich frage deshalb weil neulich mir schonmal jemand helfen wollte (bei Programmierung allgemein, anderes Problem) und das leider nicht funktinoiert hat… weiß immer noch nicht warum…
Danke schön,
Dennis =o)
Ich weiss ja nicht, wo du dein „SELECT“ stehen hast - SQL ist ja nun wiederum nicht VBScript und wird ja in VBScript z.B. in einer Variablen abgelegt und dann in Execute, OpenRecordset o.ä. an die Datenbank übergeben.
Mein Code ist VBScript, muss also in HTML in -Tags bzw. in <%-%>-Klammern einschließen - aber vielleicht kaufst du dir mal ein Buch zu ASP, z.B. http://www.amazon.de/exec/obidos/ASIN/3860636111/rks…
bzw. fragst im ASP- bzw. HTML-Forum.
Gruß aus dem Norden
Reinhard Kraasch
1 „Gefällt mir“
Hi Reinhard!
Ich hab jetzt grad mal ne Weile gebastelt! Und es funktioniert sogar… teilweise!
Nur: leider nicht in allen „Lebenslagen“ :o) Vielleicht hast Du noch eine Idee?
Hier eine Kurzbeschreibung:
- bba funktioniert nicht, zeigt einfach alle an (das sollte noch funktionieren… die anderen die nicht gehen sind mehr oder weniger egal…)
- bba2000 funktioniert korrekt
- 2000 funktioniert korrekt
- 2000bba zeigt alle 2000er an
- 2000 bba zeigt alle 2000er an
- bba 2000 --> findet nix
Hier ist der Code (einfach auf Ansicht-Quelltext)…
http://www.edennis.de/search_fuerreinhard.txt
Es wäre echt nett wenn Du Dir das nochmal anschauen könntest!!!
Danke!
Dennis =o)
Kurz-Ausschnitt aus dem Code falls der Link nicht geht:
stmt = "select \* from alumni where id \> 0 "
Tmp = Request.Form("iuprogramyear")
I = 1
iuenrollyear = ""
iuprogram = ""
For I = 1 to Len(Tmp)
If Isnumeric(Mid(Tmp,I,1)) then
iuenrollyear = Mid(Tmp,I)
iuprogram = Left(Tmp,I-1)
Exit For
End If
Next
For I = 1 to Len(iuenrollyear)
If Not Isnumeric(Mid(iuenrollyear,I,1)) then
iuenrollyear = Left(iuenrollyear,I-1)
exit for
end if
Next
tmpstmt = ""
If iuprogram "" then tmpstmt = tmpstmt & " AND iuprogram like '%" & iuprogram & "%'"
If iuenrollyear "" then tmpstmt = tmpstmt & "AND iuenrollyear like " & Clng(iuenrollyear)
if tmpstmt "" then stmt = stmt & tmpstmt
Das hier sollte deinen Vorstellungen näher kommen:
I = 1
iuenrollyear = ""
iuprogram = Tmp
For I = 1 To Len(Tmp)
If IsNumeric(Mid(Tmp, I, 1)) Then
iuenrollyear = Mid(Tmp, I)
iuprogram = left(Tmp, I - 1)
Exit For
End If
Next
For I = 1 To Len(iuenrollyear)
If Not IsNumeric(Mid(iuenrollyear, I, 1)) Then
iuenrollyear = left(iuenrollyear, I - 1)
Exit For
End If
Next
tmpstmt = ""
If iuprogram "" Then stmt = stmt & " AND iuprogram like '%" & Trim(iuprogram) & "%'"
If iuenrollyear "" Then stmt = stmt & " AND iuenrollyear=" & CLng(iuenrollyear)
Irgendwo fehlt das MID zum Abschneiden des führenden AND:
If stmt "" Then stmt = Mid(stmt, 5)
Ich kenne ja auch deine Datentypen nicht - wenn iuenrollyear ganzzahlig ist (was ich mal hoffe bzw. annehme) solltest du nicht mit „LIKE“ vergleichen!
Ansonsten: Debuggen - z.B. ein Response.Write an die richtige Stelle, die SQL ausgeben lassen und damit z.B. in den Access-Abfrageeditor gehen - dann sieht man meist, woran es hapert…
Gruss aus dem Norden
Reinhard Kraasch
1 „Gefällt mir“
Hi Reinhard!
Danke für den Tipp mit dem Debuggen… ist doch das erste mal dass ich zu ein Projekt mache dass alles irgendwie kombiniert… Datenbanken, ASP, VBScript, SQL …
Jedenfalls hab’ ich mir mit hilfe eines response.writes mir Deinen Code nochmal angeschaut, 2 kleinigkeiten geändert und jetzt geht’s!! … außer dass er leerstellen als buchstaben wertet, aber das passt jetzt schon so :o)
Was das ganze werden soll: eine Website für die „Ehemaligen“ an meiner Uni.
Danke und nochmals danke!!!
Dennis =o)