Seite 1 von 1

Select zu komplex?

Verfasst: Di, 03. Dez 2013 17:56
von satmax
Ich habe ein SQL Statement um eine Simple AND Clause erweitert. In der Zeile Execute() wird das Programm ohne jede Meldung beendet:

Code: Alles auswählen

     " WHERE _ID_Kunde = (?)"+;
     " AND WARE LIKE (?)"+;  // Problem!
     " ORDER BY AuftragNr DESC, t.TerminVon, t.TerminBis ")

 oDlg:nAnzahlTreffer:=oDlg:oCursAuftrag:Execute(1,"")

In der MMC funktioniert obiger Code Problemlos.

So geht noch auch noch alles

Code: Alles auswählen

     " WHERE _ID_Kunde = (?)"+;
     " ORDER BY AuftragNr DESC, t.TerminVon, t.TerminBis ")

 oDlg:nAnzahlTreffer:=oDlg:oCursAuftrag:Execute(1)

Folgendes bring einen Stack Error:

Code: Alles auswählen

     " WHERE _ID_Kunde BETWEEN (?) AND (?)"+;
     " AND WARE LIKE (?)"+;  // Problem!
     " ORDER BY AuftragNr DESC, t.TerminVon, t.TerminBis ")

 oDlg:nAnzahlTreffer:=oDlg:oCursAuftrag:Execute(1,1)

Code: Alles auswählen

FATAL ERROR LOG 
Stack Overflow
SYS Thread-ID: 1508 
Module: EH
Error Codes: EH: 12 Sub: 0(0) OS: 0 XPP: 16
Call Stack of Thread 1 (604):
MAIN(519)
Call Stack of GUI Thread (792):
Call Stack of Thread 3 (1508):
SQLERRORHANDLER(170)
(B)@SQLCONNECTION@I@INIT@0001(419)
__DISPLAYERROR(138)
@SQLSTATEMENT@I@__DISPLAYERROR(38)
@SQLSTATEMENT@I@EXECUTE(489)
@SQLSELECT@I@EXECUTE(1668)
AUFTRAGSUCHEMAIN(243)
File: C:\dev....
TimeStamp: 20131203 17:54
End of FATAL ERROR LOG.

Ratlos
Markus

Re: Select zu komplex?

Verfasst: Di, 03. Dez 2013 20:01
von satmax
Fehler gefunden, :Execute() erwartet bei mehr als einem Parameter diese in einem Array, dann klappt es. Gemein ist nur, dass sich das Programm ohne jeder Meldung verabschiedet.

Code: Alles auswählen

// Falsch
:execute(1,1) 

// Richtig
:excute({1,1}
//Richtig
aParam:={}
AADD(aParam,1)
AADD(aParam,1)
:excute({aParam}


Re: Select zu komplex?

Verfasst: Di, 03. Dez 2013 21:15
von georg
Hallo, Markus -


es ist übrigens "Clause".

LIKE solltest Du nur dann verwenden, wenn Du auch einen entsprechenden Begriff verwendest, also "KUNDE LIKE 'M%LLER'". Verwendest Du kein Wildcard-Symbol, ist = einfacher für den Server.

Es gibt Server, die mögen "KUNDE LIKE 1" definitiv nicht.

Re: Select zu komplex?

Verfasst: Di, 03. Dez 2013 21:27
von satmax
Passt schon, danke. Die Kundennummer wird mit = bzw. BETWEEN abgefragt,

In etwa so
" WHERE a._ID_Kunde BETWEEN (?) AND (?) "+;
" AND t.WARE LIKE (?)"+;
" AND t.LAND LIKE (?)"+;
" AND t.PLZ LIKE (?)"+;
" AND t.ORT LIKE (?)"+;
Der Kunde füllt die Suchmaske aus, dann übertrage ich alle Felder in aParam[], leere Felder, also wo nichts eingeben ist und es Textfelder sind werden mit "%" belegt.
In etwa so:

Code: Alles auswählen

IF LEN(ALLTRIM(oLand:editBuffer())) > 0
   oDlg:aParam[SUCHE_LAND]:= ALLTRIM(oLand:editBuffer()) +"%"
ELSE
   oDlg:aParam[SUCHE_LAND]:="%"
ENDIF

Code: Alles auswählen

:Execute(oDlg:aParam)  
geht echt schon SUPER!, habe über 400000 Aufträge aus der DOS DB übernommen, Antwortzeiten praktisch 0. Außer man mach gar keine Eingabe, dann dauert es halt so 6-10 Sekunden. Aber bei normaler Suche..., gewaltig!

THINK SQL

Aus heutiger Sicht bin ich froh diesen Schritt gemacht zu haben, hat mich 4-5 Wochen gekostet (dreier Schicht :) ), aber war es Wert!

Und hier das Forum, was besseres gibt es nicht.

Beste Grüße
Markus