deutschsprachige FoxPro User Group
Forum View
Home
  
  SQL Statement zu lang- #23740 in section [741231]
Sec: (1) Allgemeines
Von: Ulf Neugebauer
An: Harro Schippan
Am/Um: 23.04.2018 09:50:54 gelesen

Hallo Harro,

das Problem hatte ich auch mal.
* - Error 1812 - SQL: Anweisung zu lang - verhindern
da hilft z.B. SYS(3055,1000)

Was mir auch geholfen hast ist das Zusammenbauen per Textmerge und die Ausführung per. Execscript().
Anbei ein Beispiel, das man leicht Nachvollziehen kann.
Ist eine Kategorie nicht ausgewählt (lcGes = "") fliegt sie raus, ansonsten je nach Bedingung:
DO Case
CASE This.cGes = "w"
lcGes = " AND Cdbw1.Geschlecht = 2"
CASE This.cGes = "m"
lcGes = " AND Cdbw1.Geschlecht <> 2"
ENDCASE

wird sie eingefügt bzw. evaluiert << lcGes >>.

LOCAL lcScript AS String ,;
lcBetrieb AS String ,;
lcZeitraum AS String ,;
lcAnw AS String ,;
lcTyp AS String ,;
lcDia AS String ,;
lcBeh AS String ,;
lcMed AS String ,;
lcGes AS String ,;
lcSuche AS String ,;
lcTier AS String ,;
lcHgList AS String ,;
lcLaList AS String ,;
lcBeleg AS String ,;
lcCharge AS String

lcZeitraum = " Farm_09.Datum >= {" + TRANSFORM( This.dVon ) + "} AND Farm_09.Datum <= {" + TRANSFORM( This.dBis ) + "}"


lcBetrieb = " AND Farm_09.Bnrc = '" + gcBnrc + "' AND Cdbw1.Bnrc = '" + gcBnrc + "'"

IF EMPTY( This.cAeList )
This.cAeList = PADL( TRANSFORM( gnAe ) ,2 ,"0" )
ENDIF
lcBetrieb = lcBetrieb + " AND Farm_09.Ae IN (" + This.cAeList + ") AND Cdbw1.Ae IN (" + This.cAeList + ") "

lcAnw = IIF(This.cAnw == "-" ,"" ," AND Farm_09.Name = '" + This.cAnw + "'" )
lcTyp = IIF(This.cTyp == "-" ,"" ," AND Farm_09.Typ = '" + This.cTyp + "'" )
lcBeh = IIF(This.cBeh == "-" ,"" ," AND Farm_09.B_Bez = '" + This.cBeh + "'" )
lcMed = IIF(This.cMed == "-" ,"" ," AND Farm_09.Medikament = '" + This.cMed + "'" )
lcDia = IIF(This.cDia == "-" ,"" ," AND Farm_09.D_Bez = '" + This.cDia + "'" )

lcGes = ""
DO Case
CASE This.cGes = "w"
lcGes = " AND Cdbw1.Geschlecht = 2"
CASE This.cGes = "m"
lcGes = " AND Cdbw1.Geschlecht <> 2"
ENDCASE


lcHgList = ""
*-- Haltungsgruppe aktuell
IF !EMPTY( This.cHgList )
lcHgList = lcHgList + " AND Cdbw1.Hg IN (" + This.cHgList + ") "
ENDIF
*-- Haltungsgruppe zur Untersuchung
IF !EMPTY( This.cHgListAlt )
lcHgList = lcHgList + " AND Farm_09.Hg IN (" + This.cHgListAlt + ") "
ENDIF

lcLaList = ""
*-- Laktation aktuell
IF !EMPTY( This.cLaList )
lcLaList = lcLaList + " AND Cdbw1.Laktation IN (" + This.cLaList + ") "
ENDIF
*-- Laktation zur Untersuchung
IF !EMPTY( This.cLaListAlt )
lcLaList = lcLaList + " AND Farm_09.Laktation IN (" + This.cLaListAlt + ") "
ENDIF

lcBeleg = ""
IF !EMPTY( ALLTRIM(This.cBeleg) )
lcBeleg = " AND Farm_09.Beleg = '" + ALLTRIM(This.cBeleg) + "'"
ENDIF

lcCharge = ""
IF !EMPTY( ALLTRIM(This.cCharge) )
lcCharge = " AND Farm_09.Charge = '" + ALLTRIM(This.cCharge) + "'"
ENDIF

*-- Tierfilter
lcSuche = CHRTRAN( This.cSuch ,CHRTRAN( This.cSuch ,"1234567890" ,"" ) ,"" )
lcTier = ""
IF !EMPTY( lcSuche )
IF This.nSuch = 1
*-- StNr
lcTier = " AND Cdbw1.StNr = " + TRANSFORM( lcSuche )
ELSE
*-- Ohrnummer
lcTier = " AND Farm_09.Ohrnummer LIKE '" + PADL( lcSuche ,15 ,"_" ) + "'"
ENDIF
ENDIF


TEXT TO lcScript NOSHOW TEXTMERGE PRETEXT 7

SELECT Cdbw1.ohrnummer ,;
Cdbw1.Stnr ,Farm_09.stnr AS StNrAlt ,;
Cdbw1.hg ,Farm_09.hg AS HgAlt ,;
Cdbw1.fg ,Farm_09.fg AS FgAlt ,;
Cdbw1.Laktation ,Farm_09.laktation AS LaktAlt ,;
Cdbw1.Geburt ,;
Cdbw1.Abgang ,;
Cdbw1.Zugang ,Cdbw1.Rasse ,;
Cdbw1.Geschlecht ,Cdbw1.mast ,;
Cdbw1.Archiv ,;
Farm_09.datum ,;
Farm_09.typ ,;
Farm_09.diagnose AS d_code ,;
Farm_09.b_bez ,;
Farm_09.behandlung AS b_code ,;
Farm_09.d_bez ,;
Farm_09.m_code ,;
Farm_09.medikament ,;
Farm_09.medikament AS m_bez ,;
Farm_09.charge ,;
Farm_09.charge AS m_charge,;
Farm_09.beleg ,;
Farm_09.beleg AS m_beleg ,;
Farm_09.menge ,;
Farm_09.menge AS m_menge,;
Farm_09.einheit ,;
Farm_09.einheit AS m_einheit ,;
Farm_09.nomelk_dat AS ms_datum,;
Farm_09.m_ms ,;
Farm_09.fleischspe AS fs_datum ,;
Farm_09.m_fs ,;
Farm_09.kont_datum AS ko_datum ,;
Farm_09.m_ko ,;
Farm_09.a_code ,;
Farm_09.name AS a_bez ,;
Farm_09.erledigt ,;
Farm_09.kosten,;
Farm_09.standort ,;
Farm_09.erfassung ,;
Farm_09.bnrc ,;
Farm_09.ae ,;
Farm_03.Ae_Name ,;
Farm_09.status ,;
Farm_09.ew_status ;
FROM Farm32!Farm_09 ;
INNER JOIN Farm32!Cdbw1 ;
ON (Farm_09.ohrnummer = Cdbw1.ohrnummer ;
AND Farm_09.Ae = Cdbw1.Ae ;
AND Farm_09.Bnrc = Cdbw1.Bnrc) ;
INNER JOIN Farm32!Farm_03 ;
ON (Farm_09.Bnrc = Farm_03.Bnrc AND Farm_09.Ae = Farm_03.Ae) ;
WHERE << lcZeitraum >> << lcBetrieb >> << lcAnw >> << lcTyp >> ;
<< lcDia >> << lcBeh >> << lcMed >> << lcHgList >> << lcTier >> ;
<< lcGes >> << lcLaList >> ;
<< lcCharge >> << lcBeleg >> ;
ORDER BY Farm_09.datum, Farm_09.stnr, Cdbw1.ohrnummer ;
INTO CURSOR vmBBuch READWRITE

ENDTEXT

EXECSCRIPT(lcScript)

mfg

Ulf Neugebauer


Fox on The Run (The Sweet)



Harro Schippan   19.04.2018 13:16
Hans-Peter Grözinger  19.04.2018 14:14
Harro Schippan  19.04.2018 15:37
Hans-Peter Grözinger  19.04.2018 17:40
Harro Schippan  20.04.2018 10:04
Erich TODT  20.04.2018 15:11
Thomas Geissler  20.04.2018 11:46
Harro Schippan  20.04.2018 14:18
Bernhard Sander  20.04.2018 12:20
Harro Schippan  20.04.2018 14:23
Bernhard Sander  20.04.2018 15:42
Tom Knauf  20.04.2018 14:49
Ulf Neugebauer  23.04.2018 09:50
Harro Schippan  24.04.2018 16:54
  
zurück zum Forum