Nach Hause
Top.Mail.Ru Yandeks.Metrika
Forum: "Grundlagen";
Aktuelles Archiv: 2002.01.08;
Herunterladen: [xml.tar.bz2];

Nach unten

Eine abstrakte Frage zur Optimierung. Finden Sie ähnliche Zweige


Котелок   (2001-11-30 02:16) [0]

Die Frage ist ...

Der folgende Code kann irgendwie optimieren .... ???

Und er schrieb und ich pereklinilo. Mir fällt nichts anderes ein ....: - (((

procedure TFSearch.BitBtn3Click (Sender: TObject);
war
s: string;
katId, strId: integer;
filt: string;
beginnen
wenn edit2.text <> "" dann
beginnen
dm1.q1.close;
dm1.q1.sql.clear;
dm1.q1.sql.add ("Wählen Sie * aus Straßen mit Name =: Name");
dm1.q1.prepare;
dm1.q1.ParamByName ("name"). asstring: = edit2.text;
dm1.q1.open;
strId: = dm1.q1.fieldbyname ("idstreet"). asinteger;
end;

wenn edit3.text <> "" dann
beginnen
dm1.q1.close;
dm1.q1.sql.clear;
dm1.q1.sql.add ("Wählen Sie * aus der Kategorie aus, in der name =: name");
dm1.q1.prepare;
dm1.q1.ParamByName ("name"). asstring: = edit3.text;
dm1.q1.open;
katId: = dm1.q1.fieldbyname ("idkat"). asinteger;
end;

sqlsearch: = "select" +
"otd.predpr," +
"otd.otdid", +
"pre.idPredpr", +
"otd.name as otdname," +
"otd.phone", +
"pre.katalog," +
"otd.kindid", +
"vorname als orgname," +
"otd.home" +
"otd.office" +
"str.name as street", +
"(Wählen Sie den Namen aus dem Katalog, in dem Idkat = pre.katalog) als katal," +
"kat.name as kateg" +
"von" +
"otdel otd," +
"predpr pre", +
"straßen str, kategorie kat" +
"wobei otd.predpr = pre.IdPredpr und otd.kindId = kat.idkat und otd.streetId = str.IdStreet";

wenn edit1.text <> "" dann
beginnen
sqlsearch: = sqlsearch + "und vorname wie" + "" * "+ edit1.text +" * "";
end;
wenn edit4.text <> "" dann
sqlsearch: = sqlsearch + "und otd.home =" + "" "+ edit4.text +" "" ";
wenn edit5.text <> "" dann
sqlsearch: = sqlsearch + "und otd.office =" + "" "+ edit5.text +" "" ";
wenn edit6.text <> "" dann
sqlsearch: = sqlsearch + "und otd.name wie" + "" * "+ edit6.text +" * "" ";
wenn edit7.text <> "" dann
sqlsearch: = sqlsearch + "und otd.phone wie" + "" * "+ edit7.text +" * "" ";

dm1.qSearch.close;
dm1.qSearch.sql.clear;
dm1.qSearch.sql.add (sqlsearch);
dm1.qSearch.Prepare;

filt: = "";
wenn edit2.text <> "" dann
filt: = "street =" "+ edit2.text +" "" ";
if (edit3.text <> "") und (edit2.text <> "") dann
filt: = filt + "und kateg =" "+ edit3.text +" "" ";
if (edit3.text <> "") und (edit2.text = "") dann
filt: = filt + "kateg =" "+ edit3.text +" "" ";
dm1.qSearch.open;
wenn filt <> "" dann
beginnen
dm1.qSearch.Filter: = filt;
dm1.qSearch.Filtered: = true;
Ende
sonst
dm1.qSearch.Filtered: = false;
end;



kaif   (2001-11-30 04:40) [1]

Kleiner Kommentar. Ich habe mich nicht eingehend damit befasst. Aber es scheint mir gefährliche Konstruktionen wie "kateg =" "+ edit3.text +" "" ". Sie müssen ParamByName verwenden, andernfalls stellen Sie sich vor, was passiert, wenn der Benutzer ein Anführungszeichen in den Text einfügt. Sie können es versuchen, ich habe schon einmal einen großen Reiz ... Und wenn ich völlig unerträglich bin, dann verwenden Sie besser "kateg =" + QuotedStr (edit3.text). Die QuotedStr-Funktion schützt Sie vor Fehlern, wenn der Benutzer Anführungszeichen verwendet. Es ersetzt alle einfachen Anführungszeichen durch doppelte Anführungszeichen im Text.



Котелок   (2001-11-30 08:21) [2]

Hmmm .....
Ich wusste nicht über einen solchen Betreiber ...
TNX ......

ParamByName ist nicht geeignet, weil Dieser Anfragetext wird dann in anderen Aufrufen auf anderen Formularen verwendet ...
Zum Beispiel, um nach verschiedenen Feldern zu sortieren.
Wenn ich anrufe, produziere ich über die folgenden Aktionen:


dm1.qSearch.close;
dm1.qSearch.sql.clear;
dm1.qSearch.sql.add (sqlsearch);
dm1.qSearch.sql.add ("order by otd.home");
dm1.qSearch.Prepare;
dm1.qSearch.open;



kaif   (2001-12-01 02:37) [3]

ParamByName kann immer verwendet werden, nachdem Sie "order by otd.home" hinzugefügt haben. Beginnen Sie mit der Übergabe von Parametern an Abfragen (zu diesem Zweck müssen Sie sie im Text mit zwei Punkten vor dem Text ": myparam" benennen). Sie werden bald überzeugt sein, dass es sehr bequem und stilvoll ist. Nachdem Sie den Text in die SQL-Eigenschaft eingegeben und Prepare ausgeführt haben, übergeben Sie Werte für alle Parameter, beispielsweise für die Zeichenfolge: ParamByName ("myparam"). AsString: = .. Der wichtigste Vorteil der Parameter besteht darin, dass sie die richtigen Datentypen übergeben. Beispielsweise hat jemand die regionale Installation in Windows von "TT / MM / JJ" in "MM / TT / JJ" geändert. Dann verursachen alle von der Zeichenfolge übertragenen Datumsparameter einen Fehler und die als AsDateTime übertragenen funktionieren ordnungsgemäß. Dann ist Prepare nur sinnvoll, wenn Sie verschiedene Parameter mit demselben Text an die Abfrage senden und die Abfrage erneut öffnen (siehe Prepare).



ilysha   (2001-12-01 16:29) [4]

Sie können den Code auch folgendermaßen optimieren:

if Edit2.Text <> "" then beginne mit dm1.q1 machen beginne Schließen; Sql.Clear; Sql.Add ("Wählen Sie * aus Straßen mit Name =: Name"); Vorbereiten; ParamByName ("name"). Asstring: = edit2.text; Öffnen; strId: = dm1.q1.FieldByName ("idstreet"). AsInteger; Ende; Ende;



Котелок   (2001-12-04 08:15) [5]

> Kaif
Guy ... Ich habe es zuerst getan, aber dann musste ich es aufgeben.
Parameter erhalte ich aus einem dynamisch erstellten Formular. Zum Beispiel hat der Benutzer auf die Suchschaltfläche geklickt. Das Formular sprang heraus, er gab die Suchbegriffe ein. Ich habe genau diese Abfrage erstellt und das Formular zerstört. Nehmen wir an, derselbe Juzver hat beschlossen, das Suchergebnis nach einem anderen Feld zu sortieren. Und was soll ich in diesem Fall tun? Hier bin ich durch einen Garten geklettert. Die Anfrage wird variabel im Hauptformular gespeichert.
PS: Wie man Parambynamen benutzt, weiß ich. ;-) Und um ehrlich zu sein, bevorzuge ich diesen Weg.

> ilysha
Ich weiß nicht, ich habe einmal in einigen Artikeln eine Warnung gesehen, die beim Arbeiten mit Datenbanken nicht mit Konstruktionen verwendet werden sollte. Obwohl es falsch sein kann ...



kaif   (2001-12-04 16:10) [6]

Speichern Sie die Parameter in einigen Variablen und übermitteln Sie sie so oft wie Sie möchten, nachdem Sie den Abfragetext in Bezug auf ORDER BY ersetzt haben. Obwohl im Prinzip nichts schlechtes in Ihrer Version, sehe ich nicht. Für einen optimalen Code muss nicht gejagt werden. Aber für Klarheit und Sichtbarkeit ist. Brauchen Sie plötzlich einen Monat, um zu diesem Programm zurückzukehren? Manchmal ist es wichtig, Ihre zukünftige Arbeitszeit zu sparen. Die beste Option ist es, im Allgemeinen eine universelle Prozedur zu schreiben, die etwas Ähnliches tut.



Seiten: 1 ganze Branche

Forum: "Grundlagen";
Aktuelles Archiv: 2002.01.08;
Herunterladen: [xml.tar.bz2];

nach oben









Speicher: 0.85 MB
Zeit: 0.029 c
3-21908
Dup
2001-11-28 13:27
2002.01.08
Anwendung hängen


6-22304
sedoy
2001-10-11 14:09
2002.01.08
Client-Server im Internet über einen Proxy


1-22117
Tulnyk
2001-12-19 18:59
2002.01.08
Wie kann ich den Start der Datei unterbrechen?


14-22366
Vlados
2001-11-05 10:41
2002.01.08
Plotten


7-22425
Andrey
2001-06-19 15:45
2002.01.08
Scannerfunktion





Afrikanisch Albanien Arabisch Armenisch Aserbaidschanisch Baskisch Weißrusse Bulgarian katalanisch Chinesisch (vereinfacht) Chinesische Tradition) kroatisch Tschechisch Dänisch Dutch Englisch estnisch Philippinisch Finnish Französisch
Galicisch Georgisch Deutsch Griechisch haitian Creole Hebräisch Hindi ungarisch isländisch Indonesian irisch Italian Japanisch Koreanisch lettisch litauisch Makedonisch Malay Maltesisch Norwegian
persisch Polnisch Portugiesisch Rumänisch Russisch serbisch Slovakisch Slowenisch Spanisch Suaheli Swedish Thai Türkisch Ukrainisch Urdu Vietnamesisch Walisisch Jiddisch Bengalisch bosnisch
cebuano Esperanto Gujarati Hausa Hmong igbo Javanisch kannada khmer Laotisch Lateinisch Maorisch Marathi Mongolisch nepali Pandschabi Somalisch Tamilisch Telugu Yoruba
Zulu
Английский Französisch Deutsch Italienisch Португальский Russisch Spanisch