DoCmd.GoToControl bei ASP-Sites?

Jerinca

Erfahrenes Mitglied
Hallo Freunde!

Kennt jemand von Euch eine JavaScript-Funktion, die auf einer ASP-Site dassselbe macht wie VBA's "DoCmd.GoToControl" in Access?

Oder geht sowas auf Websites gar nicht?

Ich habe schon an einen Link innerhalb des Dokuments gedacht, aber es soll eher wie eine Suchfunktion gehen: Man soll eine Seriennummer eingeben können und zu dieser wird dann in einer Liste gesprungen, ohne, daß der User lange scrollen muß.

Danke schonmal für Eure Mühen!

Gruß, Jerinca
 
Morgen,

vielleicht solltest Du mal erklären, was die VBA-Funktion machen soll. Nicht alle sind fitt in VBA und können atoc mit der Funktion was anfangen.

Vielleicht kann man Dir aufgrund einer Beschreibung eher einen Tipp geben. :)
 
Hallo Luzie!

Man soll eine Seriennummer eingeben können und zu dieser wird dann in einer Liste gesprungen, ohne, daß der User lange scrollen muß.

Genau das macht die Funktion: Wenn da eine Liste von Datensätzen ist, dann kann man die Befehle "DoCmd.GoToControl" und "DoCmd.FindRecord" z.B. hinter einen Button legen (bzw. in dessen Quellcode schreiben).

Und dann wird automatisch zu einem bestimmten Datensatz in der Liste gesprungen (den muß man natürlich noch definieren)!

Ich möchte das mit einer Art Suchfunktion machen: Der User soll eine Nummer eingeben und zu dieser soll dann in der Liste automatsich gesprungen werden (falls vorhanden).

Das ist doch sicher kein Problem für Dich, oder ;)

Danke schonmal für alle Tipps :)
 
Huhu

naja, kommt jetzt drauf an, ob nur ein eindeutiger Datensatz dabei rausrommen soll oder ein Sprung auf eine Nummer bei allen ausgegebenen Datensätzen.

In Javascript habe ich allerdings keine Lösung (Ahnung :)). Gibts aber mit Sicherheit. Einfach mal bei Selfhtml stöbern.

Wenn Du es in ASP machen möchtest mit einer Suchfunktion, dann wird die SQL auf die Wert eines Formularfeldes oder nach Übertragen des Parameters über die URL gefiltert

select * from tabelle where id = " & Request.Form("id")

Das liefert jetzt einen Datensatz, wenn vorhanden. Mann kann jetzt noch mit den Operatoren spielen wie > oder >=, liefert Dir alle Datensätze die größer sind...

ansonsten könnte man auch den eingegebenen Wert in einen Anker schreiben, dern dann automatisch an die Stelle der Liste springt. .
 
Hallo mein persönlicher ASP-Guru :p

Also, erstmal muß ich gestehen, daß ich den zweiten Teil dieses Satzes nicht verstehe:
kommt jetzt drauf an, ob nur ein eindeutiger Datensatz dabei rausrommen soll oder ein Sprung auf eine Nummer bei allen ausgegebenen Datensätzen.
Was meinst Du mit einer Nummer bei allen Datensätzen?

Dein zweiter Vorschlag sagt mir auf Anhieb zu, allerdings wird die Liste der Datensätze mit einer While-Schliefe dynamisch generiert und die Felder heißen dann immer gleich. Es gibt also nicht für die Nummer des ersten Datensatzes in der Liste einen Namen "feld1" und dann so weiter... Sondern die Namen sind gleich. Wie könnte ich dann da auf ein bestimmtes Feld verweisen?
Wenn Du es in ASP machen möchtest mit einer Suchfunktion, dann wird die SQL auf die Wert eines Formularfeldes oder nach Übertragen des Parameters über die URL gefiltert

select * from tabelle where id = " & Request.Form("id")

Und Dein dritter Vorschlag mit dem Anker... Naja, ich habe da mal bei :google: gesucht und denke herausgefunden zu haben, daß Anker immer statisch sind... Aber ich möchte den User ja eine Nummer eingeben lassen, zu der dann in der Liste gesprungen wird.

Ach ja, wenn Du keine Funktion in JavaScript weißt, ist nicht so schlimm, weißt Du denn sowas in VBScript? Denn dann könnte ich mir das eventuell umschreiben bzw., wenn ich ein Schlagwort von VBScript habe, kann ich nach einer äquivalenten Funktion in JavaScript suchen ;-)

Aber wie immer: Vielen Dank schonmal wieder für Deine Mühen :p
 
Hi

dass, was Du letztendlich auf den Bildschirm bekommst ist die Ausgabe des Browsers nach einer Aktion. Wenn Du serverseitig veranlasst, dass sich die Nummer hinter die URL als Anker setzt, kannst Du diese spielend auslesen.

Schau hier
http://www.pts.info/dw/liste.asp

Alle Seminar werden in einer While-Schleife ausgelesen. Als Anker habe ich die Nummer eingesetzt und mit in die Schleife gelegt.

Über das Formular wird eine Nummer eingefügt, dann kommt eine Abfrage, ist das Feld ausgefüllt, wenn ja, setz mir diese Nummer hinter die URL, welche über den Redirect wieder an die Seite geschickt wird.

Dein zweiter Vorschlag sagt mir auf Anhieb zu, allerdings wird die Liste der Datensätze mit einer While-Schliefe dynamisch generiert und die Felder heißen dann immer gleich. Es gibt also nicht für die Nummer des ersten Datensatzes in der Liste einen Namen "feld1" und dann so weiter... Sondern die Namen sind gleich. Wie könnte ich dann da auf ein bestimmtes Feld verweisen?
Dies verstehe ich jetzt nicht. Es muss doch eine eindeutige ID oder Nummer vorhanden sein. Gefiltert wird über die SQL.

Schau nochmal hier
http://www.pts.info/aktuell/start.asp

Gibt oben rechts in das Suchfeld einfach mal den Begriff Technik ein. Sobald das Formular verschickt wird, werden alle Datensätze auf den Begriff Technik gefiltert. Genauso ist das bei einer Nummer.
 
Hallo Luzie!

Oh ja ja ja! Genau sowas "einfaches", wie hinter Deinem Link http://www.pts.info/dw/liste.asp steht, bräuchte ich :p

Aber leider kann ich mir nicht den Quellcode ansehen, der dahinter steckt, ich meine den, der für die Aktion zuständig ist. Es muß ja irgendwo hier was passieren:

Code:
<form name="form1" method="post" action="liste.asp">
  <input name="kursid" type="text" id="kursid">
Bitte hier eine von den links stehenden Nummern einfügen
<hr>
</form>

Wenn man da dann auf Enter drückt, passiert doch was, aber wie? Könntest Du mir hier noch die dazugehörige While-Schleife posten, die Du angesprochen hast?

Es muss doch eine eindeutige ID oder Nummer vorhanden sein. Gefiltert wird über die SQL.

Natürlich gibt es eine unique ID, aber ich dachte, Du beziehst Dich auf das HTML-Feld, also meinetwegen das Textfeld, in dem die ID steht, und diese Felder/Steuerelemente haben alle denselben Namen :rolleyes:

Vielen, vielen Dank schonmal wieder!

Grüßle, Jerinca
 
nun, es werden halt 2 Anforderungen an den client geschickt, zum einen das Formular mit der Nummer, dann der Aufruf der URL mit der Nummer als Ankernamen.

Das Formular wird erstmal an die gleiche Seite geschickt. Dann wird der Wert des Formularfeldes abgefragt und hinter eine Weiterleitung gesteckt.

bsp. asp/vbscript

Code:
<%
if Request.Form("kursid") <> "" then Response.redirect "liste.asp#" & Request.form("kursid")
%>

Den eigentlichen Anker habe ich dann einfach in die Whileschleife mit eingefügt und habe ihm den Namen der ID verpasst, die ja auch über das Formular angefordert werden kann.

bsp. asp/vbscript

Code:
<%
[...]
while not rs.eof
Response.write "<a name=""" & rs(1) & """></a>" &  rs(1) & " " & rs(2) & "<br>" & vbcrlf
rs.movenext
wend
rs.close
set rs=nothing
%>

Das wars, und es ist sehr einfach.

Es wäre sogar möglich, dass Du dir mit Hilfe eines kl. Javascript eine Anforderung sparen könntest. Aber da kann ich Dir nicht helfen, ich nutze sehr wenig clientseitiges Javascript, da müsstest Du einfach mal googlen oder bei Selfhtml schauen. Wenn Du das Prinzip verstanden hast.
 
Hallo liebe Luzie :-(

Sorry, daß ich mich erst jetzt wieder melde, aber ich mußte mich kurzfristig anderen Dingen zuwenden, sodaß ich erst heute wieder dazu gekommen bin, mich mit diesem Problem zu beschäftigen...

Vielen Dank für Deinen Tipp mit den dynamischen Ankern! Es klappt auch soweit! Bei mir sieht es nur etwas anders aus, denn ich suche nicht - wie Du - über die Enter-Taste, sondern über einen Button, hinter dem folgende JavaScript-Funktion steht (allerdings noch ohne Exception-Behandlung - das kommt später):
Code:
<script language="javascript">
	function SNsuchen() {
	var suchen = document.form0.SN.value; // der Wert des Steuerelements "SN" im Formular mit Namen "form0" wird abgefragt
		if (suchen != "") { // wenn dieser Wert existiert, also nicht leer ist
			document.form0.action="stammdatenanzeige.asp#" + suchen + ""; // Formular-Action definieren
			document.form0.submit(); // submitten
			return false;
		}
		else return false; // sonst mache nichts
}
</script>

Der Anker sieht etwa so aus:
Code:
<A name="<%= Recordset.Fields.Item("Seriennummer").Value %>" 
HREF="stammdaten_bearbeiten.asp?"SN="<%= + Recordset.Fields.Item("Seriennummer").Value %>">
<%=(Recordset.Fields.Item("Seriennummer").Value)%>
</A>

Dadurch passiert folgendes: Man gibt eine Nummer in das Feld ein, drückt auf "Suchen" und im Dokument wird zur eingegebenen Nummer gesprungen.

Das Problem, das mir erst eben aufgefallen ist: Man kann das nur einmal machen! Und ich habe keine Ahnung, warum :( In Deinem Beispiel kann man das nämlich immer wieder machen, nur bei mir geht's net so! Wenn man einen anderen als den ersten Wert ins Feld einträgt und auf "Suchen" klickt, dann wird der Wert zwar in der Adress-Leiste angezeigt, aber es wird nicht dorthin gesprungen :(

Ich krieg echt die Krise! Beim ersten Mal klappt's ohne Probleme, aber ein weiteres Mal macht er nicht mit! Was ist denn das dann für 'ne Suche?

Ich hab' auch mal probiert, mit einem einfachen window.location zu arbeiten, aber das Problem bleibt: Die Suche funktioniert nur beim ersten Mal :mad:
Code:
<script language="javascript">
	function SNsuchen() {
	var suchen = document.form0.SN.value; // der Wert des Steuerelements "SN" im Formular mit Namen "form0" wird abgefragt
		if (suchen != "") { // wenn dieser Wert existiert, also nicht leer ist
			window.location="stammdatenanzeige.asp#" + suchen + ""; // Link zum Anker
		}
		else return false; // sonst mache nichts
}
</script>

Könntest Du da vielleicht nochmal ein Ass aus dem Ärmel schütteln :suspekt:

LG, Jerinca
 
Zuletzt bearbeitet:
Uuuiii

zufällig habe ich dies gelesen, habe hierauf keine Benachrichtigung bekommen...komisch.

Nun, was Javascript betrifft, kann ich Dir echt nicht weiterhelfen. Nur was ASP betrifft, welche das Formular immer an die gleiche Seite sendet und somit reloaded.

Ich vermute mal, dass hier das Problem liegt.
Naja, vermutlich hast Du mittlerweile selbst eine Lösung gefunden. Sorry, dass ich mich erst jetzt melde, wollte nicht unhöflich sein. ;)
 
Zurück