Das Forentreffen 2018 findet am 20./21. April in Dresden statt. Weitere Infos hier
Zur Homepage des Deutschsprachige Xbase-Entwickler e. V.
Xbase++-Wiki des Deutschsprachige Xbase-Entwickler e. V.

Select zu komplex?

Alles zum SQL-Dialekt

Moderator: Moderatoren

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

Select zu komplex?

Beitrag von satmax » Di, 03. Dez 2013 17: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 Di, 03. Dez 2013 23:51, insgesamt 1-mal geändert.
Gruß
Markus

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

Re: Select zu komplex?

Beitrag von satmax » Di, 03. Dez 2013 20: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 Di, 03. Dez 2013 23:52, insgesamt 1-mal geändert.
Gruß
Markus

georg
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 1920
Registriert: Fr, 08. Feb 2008 21:29

Re: Select zu komplex?

Beitrag von georg » Di, 03. Dez 2013 21: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

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

Re: Select zu komplex?

Beitrag von satmax » Di, 03. Dez 2013 21: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

Antworten