Select zu komplex?

Alles zum SQL-Dialekt

Moderator: Moderatoren

Select zu komplex?

Beitragvon satmax » Di, 03. Dez 2013 18:56

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
Zuletzt geändert von satmax am Mi, 04. Dez 2013 0:51, insgesamt 1-mal geändert.
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
 
Beiträge: 776
Registriert: Do, 02. Dez 2010 20:34
Wohnort: Biberbach in Österreich

Re: Select zu komplex?

Beitragvon satmax » Di, 03. Dez 2013 21:01

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}

Zuletzt geändert von satmax am Mi, 04. Dez 2013 0:52, insgesamt 1-mal geändert.
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
 
Beiträge: 776
Registriert: Do, 02. Dez 2010 20:34
Wohnort: Biberbach in Österreich

Re: Select zu komplex?

Beitragvon georg » Di, 03. Dez 2013 22:15

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.
Liebe Grüsse aus der Eifel,

Georg
georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1807
Registriert: Fr, 08. Feb 2008 22:29

Re: Select zu komplex?

Beitragvon satmax » Di, 03. Dez 2013 22:27

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
Gruß
Markus
Benutzeravatar
satmax
1000 working lines a day
1000 working lines a day
 
Beiträge: 776
Registriert: Do, 02. Dez 2010 20:34
Wohnort: Biberbach in Österreich


Zurück zu SQL (Sprache)

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast