Dreamweaver UltraDev - Sinn und Zweck einer Code-Sequenz...

Jerinca

Erfahrenes Mitglied
Hallo Freunde ;)

Ich arbeite mit Dreamweaver UltraDev und bin mittlerweile soweit fortgeschritten, daß ich von selbst drauf gekommen bin, daß so mancher Code, den der Dreamweaver generiert, ziemlich unnötig ist *stolz-dreinguck*

An dieser Stelle schonmal einen Gruß an Luzie, die mich schon ganz zu Anfang von dieser Tatsache überzeugen wollte :rolleyes:

Nun bin ich also schon soweit, daß ich alle INSERTS, UPDATES und DELETES sehr platzsparend und effizient selbst programmiert habe, um den ultra-langen Dreamweaver-Code zu ersetzen.

Meine Frage bezieht sich nun auf folgenden Code:
Code:
<%
// *** Recordset Stats, Move To Record, and Go To Record: declare stats variables

// set the record count
var Recordset3_total = Recordset3.RecordCount;

// set the number of rows displayed on this page
if (Recordset3_numRows < 0) {            // if repeat region set to all records
  Recordset3_numRows = Recordset3_total;
} else if (Recordset3_numRows == 0) {    // if no repeat regions
  Recordset3_numRows = 1;
}

// set the first and last displayed record
var Recordset3_first = 1;
var Recordset3_last  = Recordset3_first + Recordset3_numRows - 1;

// if we have the correct record count, check the other stats
if (Recordset3_total != -1) {
  Recordset3_numRows = Math.min(Recordset3_numRows, Recordset3_total);
  Recordset3_first   = Math.min(Recordset3_first, Recordset3_total);
  Recordset3_last    = Math.min(Recordset3_last, Recordset3_total);
}
%>
<%
// *** Recordset Stats: if we don't know the record count, manually count them

if (Recordset3_total == -1) {

  // count the total records by iterating through the recordset
  for (Recordset3_total=0; !Recordset3.EOF; Recordset3.MoveNext()) {
    Recordset3_total++;
  }

  // reset the cursor to the beginning
  if (Recordset3.CursorType > 0) {
    if (!Recordset3.BOF) Recordset3.MoveFirst();
  } else {
    Recordset3.Requery();
  }

  // set the number of rows displayed on this page
  if (Recordset3_numRows < 0 || Recordset3_numRows > Recordset3_total) {
    Recordset3_numRows = Recordset3_total;
  }

  // set the first and last displayed record
  Recordset3_last  = Math.min(Recordset3_first + Recordset3_numRows - 1, Recordset3_total);
  Recordset3_first = Math.min(Recordset3_first, Recordset3_total);
}
%>
Leider kann ich nicht mehr nachvollziehen, wann Dreamweaver diesen Code generiert hat, aber er kommt in den meisten meiner ASP-Sites vor. In einer File habe ich diesen Code dann mal weggemacht und es ist nix passiert :confused:

Für was ist dieser Code also gut?

Anhand der fetten Dreamweaver-Kommentare denke ich mal, daß es was mit dem Ordnen der Datensätze oder so zu tun hat, aber wie gesagt: Ohne scheint es auch zu gehen...

Ich möchte nur sicher gehen, bevor ich überall diesen Code rausschmeiße ;-]

Vielen Dank schonmal für Eure Hilfe!

Gruß, Jerinca
 

Luzie

Erfahrenes Mitglied
Huhu

das ist vermutlich der Code, der generiert wird, wenn Blätterlinks eingesetzt werden (vor, zurück, Anfang, Ende).

Dieser Code ist ein Quälcode sondergleichen. Genauso, wenn Du Dir ausgeben lässt, wieviele Datensätze Du gerade anforderst.

Solltest Du im Region-Repeat-Bereich nur eine bestimmte Anzahl an Datensätzen ausgeben, wird die Vorbereitung dazu getroffen, dass auch diese Blätterlinks (Serververhalten: Gehe zum nächsten Datensatz, gehe zum vorherigen etc. ) generiert werden müssen.

Ist das der Fall, dann darfst Du ihn nicht rauslöschen.
 

Jerinca

Erfahrenes Mitglied
Hallo Luzie!

Was meinst Du denn mit:
Dieser Code ist ein Quälcode sondergleichen.
Ansonsten - wenn ich Dich richtig verstanden habe - brauche ich diesen Code nur, wenn ich solche Navigationslinks habe?

Sonst nicht? Komisch, dann muß ich die mal eingefügt und dann wieder entfernt haben...

Aber das würde mir schon weiterhelfen :)

Danke schonmal wieder!

Gruß, Jerinca
 

Luzie

Erfahrenes Mitglied
Hallo

mit Quälcode wird der ASP-Dreamweaver Code bezeichnet :p :p :p
Also nix gegen Dich und ist nicht persönlich gemeint.

Das Programm versucht, eine optimale Lösung für User zu finden, die nicht selbst programmieren können. Aus dem Grunde packt es alles dort hinein, was u.U. möglich sein könnte und es produziert sich eine enorme Abfrage, wie soll es dies auch anders machen.

Bsp.

Das zählen der Anzahl von Datensätzen, die für die Operation benötigt wird.

anzahl = rs.RecordCount

Dies funktioniet nicht bei einem Standardöffen eines Recordsets, weil die Änderung der Cursor-Einstellungen nicht benötigt wird (es soll ja optimal sein und schnell laufen).

Wird diese Anzahl der Datensätze benötigt, muss man nach dem Öffnen des Recordsets diese Curor-Einstellungen verändern, entweder als Wert (Zahl) oder als Konstante

bsp.
Set rs = CreateObject("ADODB.Recordset")
rs.CursorLocation = 2 ' adUseServer
rs.CursorType = 1 ' adOpenKeyset
rs.LockType = 3 ' adLockOptimistic

Welchen Wert sie haben, wo sie eingesetzt werden können etc., kannst Du hier nachlesen
http://www.aspheute.com/artikel/20000518.htm
http://www.aspheute.com/artikel/20000516.htm

Allerdings solltest Du nicht im Quellcode manipulieren, ohne richtig zu wissen, was Du da tust. Meinst sind noch Einstellungen in den Serververhalten vorhanden, die man zuerest löschen sollte. Fehlerhafte Einstellungen kennzeichnen sich mit einem roten Ausrufezeichen!.

Wenn Du aber Spass am Experimentieren hast (nur so kann man auch was lernen, was die Zusammenhänge betrifft) dann immer auf einer Kopie.

Das Programm generiert keine Fehler. Wenn aber durch eigenständige Manipulation Fehler auftreten, sind diese dann nur schwer zu finden (bei 1000 Zeilen Code). ;-)
 

Jerinca

Erfahrenes Mitglied
Hallo nochmal!

Ich habe diesen spezifischen Code jetzt drin gelassen, wo ich mir die Anzahl der Datensätze anzeigen lasse (Recordset_total), weil ich nicht dahinter komme, wie der das zählt...

Aber das habe ich bei anderen SQL-Kommandos mittlerweile ja auch gemerkt, was da so viel Code produziert wird! z.B. habe ich einen Datensatz-Insert an meine Bedürfnisse angepaßt und so von ursprünglich 85 Zeilen auf 15 kürzen können ^^

Auf die angesprochenen Ausrufezeichen gebe ich mittlerweile gar nix mehr, denn der Horizont vom Dreamweaver ist wirklich so beschränkt! Wenn man sich ein bißchen auskennt und einige Modifikationen vornimmt, dann sind plötzlich überall diese Ausrufezeichen! Aber nicht, weil es falsch ist, sondern nur, weil es nicht DW-Standard ist! Wirklich lästig :mad:

Naja, aber wie immer: Vielen Dank für Deine Zeit und Mühe!
 

Luzie

Erfahrenes Mitglied
Jerinca hat gesagt.:
Hallo nochmal!
Aber das habe ich bei anderen SQL-Kommandos mittlerweile ja auch gemerkt, was da so viel Code produziert wird! z.B. habe ich einen Datensatz-Insert an meine Bedürfnisse angepaßt und so von ursprünglich 85 Zeilen auf 15 kürzen können ^^
Naja, aber wie immer: Vielen Dank für Deine Zeit und Mühe!
Na siehst Du, auch so ein Parade-Beispiel :)

Das mit den Ausrufezeichen sehe ich allerdings so
Wenn das Verhalten gebraucht wird, sollte es vom DW generiert werden, ansonsten nimm es weg und mach es händisch.

Mit der Zeit häufen sich nämlich viele redundate Abfragen und Script-Codeteile an und das ist keine saubere Programmierung mehr.

Weiter kommt noch hinzu, aktvierst Du diese Verhalten später einmal wieder, sprich, klickst dann darauf, dann überschreibt das Programm möglicherweise Deine Änderungen.

Das Gefühl kommt mit der Zeit, Du wirst es sehen. Zumindest bist Du auf dem Wege, es perfekter zu machen.
 

Jerinca

Erfahrenes Mitglied
Weiter kommt noch hinzu, aktvierst Du diese Verhalten später einmal wieder, sprich, klickst dann darauf, dann überschreibt das Programm möglicherweise Deine Änderungen.
Ja, das habe ich auch schon bemerkt am Anfang meines Selbstfindungstripps :rolleyes:

Aber das ist auch schon bei Kleinigkeiten so: Laut DW darf man keine while-Schleifen innerhalb des ASP- bzw. HTML-Codes (Serververhalten: Bereich wiederholen) verschachteln! Was ein Quatsch! Natürlich geht das, nur der DW will es von sich aus nicht machen!

Man muß sich eben dran gewöhnen, die Ausrufezeichen zu ignorieren - so mach' ich das jedenfalls mittlerweile :)

Ach ja: Was meinst Du eigentlich mit:
Wenn das Verhalten gebraucht wird, sollte es vom DW generiert werden, ansonsten nimm es weg und mach es händisch.
Alles, was ich programmiere, brauche ich doch irgendwo, sonst würde ich es doch wegschmeißen ;-]

Grüßle, Jerinca
 

Luzie

Erfahrenes Mitglied
Ich will mal versuchen, Dir dies an einem Beispiel aus Erhahrung zu dokumentieren:

Du hast das SV Datensatz einfügen aktiviert. DW legt es auf einer neuen Seite an. Alles ganz gut und schön.

Du möchtest aber die Formularfelder vorher serverseitig validieren (überprüfen), also nicht mit Javascript.

Du hast ein schönes einfaches Script, was dies tut nur...es muss sich alles auf einer Seite abspielen.. Formulareingabe und Insert.

Es geht, wenn Du den generierten Insert-Code von der einen Seite auf die andere packst, eine Abfrage erstellst, wo alle Pflichtfelder abgefragt werden mit dem Ergebnis, dass das Insert nur stattfinden kann, wenn alles in Ordnung ist.

Das geht alles nur...

Wenn man sich den generierten Insertcode ansieht, wird man feststellen, dass diese Abfragen, die Du manuell oben ... unten, wo auch immer, eingefügt hast. bereits im SV vorhanden sind. Man muss die Stellen nur kennen. So schiebt man Scriptcode von oben nach unten, von rechts nach links um nicht Variablen und Abfragen doppelt und dreifach zu generieren.

Was ich letztlich damit sagen möchte ist, greift man tief in die Verhalten ein, muss man dies auch berücksichtigen damit keine Redundanzen erzeugt werden.

Jetzt frag ich mich natürlich, wer macht sowas?
 

Neue Beiträge