Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Anmeldungen zum Forentreffen 2018 sind auf der Anmeldeseite möglich
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Klassvar 100x langsamer wie LOCAL?

SQL Express von Boris Borzic

Moderator: Moderatoren

Antworten
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 780
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Kontaktdaten:

Klassvar 100x langsamer wie LOCAL?

Beitrag von satmax » Mo, 13. Jul 2015 19:19

Folgendes ist mir völlig unerklärlich:

Hier dauert das Execute ca. 10 Sekunden

Code: Alles auswählen

::oCursor:SQLString := "SELECT top 1  " + AuftragFelder;
              " FROM Auftrag WHERE typAuftrag BETWEEN (?) AND (?) "+;
              " ORDER BY _ID DESC"
DebugPrint("Switch Filter 7", ::NavigateTypAuftragTo)
 	nTreffer:= ::oCursor:Execute({0, 99})           // DAUER 10 ca. Sekunden
DebugPrint("Switch Filter 8", ::NavigateTypAuftragTo)

Hier dauert die gleiche Abfrage nicht mal 0,1 Sekunden, inkl. cFelder:= ::AuftragFelder :

Code: Alles auswählen

Local cFelder
...
cFelder:=::AuftragFelder
 	::oCursor:SQLString := "SELECT top 1  " + cFelder + ;
              " FROM Auftrag WHERE typAuftrag BETWEEN (?) AND (?) "+;
              " ORDER BY _ID DESC"
DebugPrint("Switch Filter 7", ::NavigateTypAuftragTo)
 	nTreffer:= ::oCursor:Execute({0, 99})      // Dauer nicht messbar < 0,1 
DebugPrint("Switch Filter 8", ::NavigateTypAuftragTo)
Gruß
Markus

Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
Beiträge: 780
Registriert: Do, 02. Dez 2010 19:34
Wohnort: Biberbach in Österreich
Kontaktdaten:

Re: Klassvar 100x langsamer wie LOCAL?

Beitrag von satmax » Mo, 13. Jul 2015 19:39

Ändere ich die Classen-Methode in eine Funktion (aus :: wird oDlg, oDlg wird der Funktion übergeben), funktioniert das ebenfalls einwandfrei:

Code: Alles auswählen

oDlg:oCursor:SQLString := "SELECT top 1  " + oDlg:AuftragFelder + ;
              " FROM Auftrag WHERE typAuftrag BETWEEN (?) AND (?) "+;
              " ORDER BY _ID DESC"
DebugPrint("Switch Filter 7-", oDlg:NavigateTypAuftragTo)
 	nTreffer:= oDlg:oCursor:Execute({0, 99})
DebugPrint("Switch Filter 8-", oDlg:NavigateTypAuftragTo)
Gruß
Markus

Antworten