unterbrechen
Ingrid
- asp.net
Hallo
Ich habe folgendes Problem:
Ich habe eine Webseite, wo der User was eingeben kann und das sollte dann
aus der Datenbank gezogen und dargestellt werden.
Das funktioniert eigentlich auch. Nur wenn der User einen Wert eingibt, der
nicht in der DB vorhanden ist, dann checke ich das und schreibe 'ne Meldung
auf den Bildschirm. Dann aber laeuft das Programm weiter.
Ich habe schon alles moegliche versucht, um das Programm nach der Meldung zu
stoppen, aber bisher hat nichts funtkioniert.
Wie muss ich das denn machen?
Gruss
Ingrid
Hi Ingrid,
du solltest entsprechend programmieren, was im einzelnen bedeutet, mit sub, "function", "exit" "sub|function" zu arbeiten.
Vorgänge wie Datenbankupdates oder Datenbankfetches etc lassen sich gut in function blöcken kapseln und können damit auch rückgabewerte haben, die sich auswerten lassen.
wenn suche = erfolgreich dann starte Prozedur DBAusgabe sonst schreibe HTML-Meldung
GOTO-Sprungbefehle aus dem richtigen VB funktionieren in VBScript leider nicht, schade eigentlich!
HTH, Ciao, Frank
Hallo,
im VB gibt es noch GOTO?
ist es nicht bewiesen worden, das jedes Programm ohne GOTo auskommen kann?
Eine andere Untersuchung zeigte, das mit zunehmender anzahl der goto's auch die programmfehler anstiegen...
Odium
Hallo,
im VB gibt es noch GOTO?
ist es nicht bewiesen worden, das jedes Programm ohne GOTo auskommen kann?
Eine andere Untersuchung zeigte, das mit zunehmender anzahl der goto's auch die programmfehler anstiegen...
Odium
Hi Odium,
1.) in der 6er Pro von VB gibt es noch GOTO
2.) sicher kann jedes Programm ohne GOTO auskommen
3.) mag sein, vernünftig angewendet bietet es aber gute Möglichkeiten, Ausnahmen abzufangen bzw. auf Benutzerblödheit zu reagieren. z.b. packe ich in Prozeduren mit vielen offenen Recordsetobjekten immer einen entsprechenden Block ans Ende, wo alle offenen Sachen sauber geschlossen und gekillt werden. Diesen block kann ich bequem von überall in der Prozedur ansteuern, wenn beispielsweise ein EOF auftritt, was mir nicht gefällt und welches die Prozedur brechen würde...
Verwendung gezielt und in Maßen lautet die Devise
Tschau, Frank
Hallo Ingrid,
lösen die GOTO Antworten eigentlich Dein Problem ? Ich hätte eher gedacht, dass Du ein Kriterium brauchst, nachdem ein Datenbank-Zugriff eben _nicht_ durchgeführt wird, wenn ein Eingabe-Problem vorliegt. Was verstehst Du in diesem Zusammenhang unter "Programm weiterlaufen" ? Wenn ein User Daten in ein Form eingegeben hat und abschickt, wird vermutlich eine (Auswerte-)ASP-Datei aufgerufen und der ASP-Parser tut, was er tun soll (Datenbank-Abfrage bei gültigen Daten) und tut hoffentlich nicht, was er nicht tun soll (keine Datenbank-Abfrage bei fehlerhaften Daten).
Kannst Du also Dein Problem noch etwas präzisieren ?
Ciao
Hans-Peter
Hallo Ingrid,
lösen die GOTO Antworten eigentlich Dein Problem ? Ich hätte eher gedacht, dass Du ein Kriterium brauchst, nachdem ein Datenbank-Zugriff eben _nicht_ durchgeführt wird, wenn ein Eingabe-Problem vorliegt. Was verstehst Du in diesem Zusammenhang unter "Programm weiterlaufen" ? Wenn ein User Daten in ein Form eingegeben hat und abschickt, wird vermutlich eine (Auswerte-)ASP-Datei aufgerufen und der ASP-Parser tut, was er tun soll (Datenbank-Abfrage bei gültigen Daten) und tut hoffentlich nicht, was er nicht tun soll (keine Datenbank-Abfrage bei fehlerhaften Daten).
Kannst Du also Dein Problem noch etwas präzisieren ?
Ciao
Hans-Peter
Hi Hans-Peter,
um GOTO ging es gar nicht, sondern um die Kapselung von klassifizierbaren Aktionen (DB Insert/SELECT sonstwas) in Prozeduren und Funktionen mit Rückgabewerten.
Bei Ingrid kann ich mir das so vorstellen:
<%
IF Request.FOrm("name") = "" THEN
Response.Write "Sie haben keinen Namen angegeben"
END IF
'// hier soll das Script aber eigentlich aufhören mit arbeiten
strSQL = "SELECT * FROM tbl1 WHERE NAme='" & name & "'"
set rsSQL = conn.execute(strSQL)
....
....
%>
Programmiertechnik ....
eine genaue Problemspezifikation wäre aber vielleicht ganz nützlich... bzw. ist immer zweckdienlich...
Gruß, Frank
Hi
um GOTO ging es gar nicht, sondern um die Kapselung von klassifizierbaren Aktionen (DB Insert/SELECT sonstwas) in Prozeduren und Funktionen mit Rückgabewerten.
ja eben ...
<%
IF Request.FOrm("name") = "" THEN
Response.Write "Sie haben keinen Namen angegeben"
ELSE
strSQL = "SELECT * FROM tbl1 WHERE NAme='" & name & "'"
set rsSQL = conn.execute(strSQL)
END IF
%>
... vom Prinzip her zumindest.
Ciao
Hans-Peter
Hi
um GOTO ging es gar nicht, sondern um die Kapselung von klassifizierbaren Aktionen (DB Insert/SELECT sonstwas) in Prozeduren und Funktionen mit Rückgabewerten.
ja eben ...
<%
IF Request.FOrm("name") = "" THEN
Response.Write "Sie haben keinen Namen angegeben"
ELSE
strSQL = "SELECT * FROM tbl1 WHERE NAme='" & name & "'"
set rsSQL = conn.execute(strSQL)
END IF
%>
... vom Prinzip her zumindest.
Ciao
Hans-Peter
Hi,
genau jenes Prinzip!
Tschau und schönen Feierabend
Frank
Hallo
also, ums nochmal ein bisschen genauer zu machen.
Ich habe eine Seite mit Formular, wo der User einen Wert eingibt.
Beim Abschicken wird eine andere Seite geoeffnet, an einer bestimmten Stelle (ein case in einem select). Dort mache ich eine adodb-connection auf und selektiere mit dem Wert des Users was aus einer DB.
Wenn nun dieser Wert in der DB nicht existiert, so soll das Script abbrechen. Es steigt aber nur aus dem select/case aus und durchlaeuft dann aber den Rest des Scriptes. Und eben das will ich nicht.
Zur Zeit habe ich's so geloest, dass ich dann ein neues Fenster aufmache, dort mit js ein window.close abschicke. Das funktioniert, ist aber nicht gerade das Gelbe vom Ei.
Gibts da eine schoene Loesung?
Gruss
Ingrid
Hallo Ingrid,
wäre es nicht ganz einfach möglich, dass Du in genau jenem case-Statement nach der Ausgabe der Fehlermeldung ein Flag setzt, das einen Fehlerzustand signalisiert. Und nach dem kompletten select-Befehl führst Du die Datenbank-Abfrage nur aus, wenn dieses (und ggf. noch weitere) Fehlerflag _nicht_ gesetzt ist (sind) ?
Mit Client-seitigen Mechanismen würde ich da - ohne Not - nicht rum machen, wenn Du ASP zur Verfügung hast. Und das Eltern-Fenster einfach abschießen ... hm, wie soll ich sagen: Du bist sicher schon sehr verzweifelt an dem Problem, stimmts ? :-)
Ciao
Hans-Peter
Hallo,
nicht in der DB vorhanden ist, dann checke ich das und schreibe 'ne Meldung
auf den Bildschirm.
und gibst alle Resourcen frei bzw. schließt die offenen Verbindungen und rufst Response.End() auf, womit die Bearbeitung abgeschlossen wird.
Oder du legst alles in einen try-catch-Block (JScript) bzw. setzt ein onerror (VBScript) und löst eine Exeption aus. Abfangen tust du dies sinnigerweise am Ende der Seite.
also 1.
if (_Falsche_Eingabe_) {
_Resourcen_frei_geben;
_Fehlermeldung_schreiben;
Response.End(); //- Hier ist Schluß
}
oder 2.
try {
_Mein_Script_;
if (_Falsche_Eingabe_)
throw "Falsche Eingabe"; //- Exeption auslösen, sofern nötig
_Mein_Script_;
}
catch (error) {
_Resourcen_frei_geben;
_Fehlermeldung_schreiben;
}
//- Dateiende, Kein Script mehr da
Wenn du dabei noch schreibend auf die DB zugreifst, so solltest du mit Transaktionen arbeiten bzw. diese einleiten, damit du im Fehlerfall diese wieder Rückgängig machen kannst (siehe Connection Objekt, BeginTrans, CommitTrans, RollbackTrans);
hth
thorsten