Code voor het schrappen van de backorders

0000001252     -      02-03-2011
Verouderd

Hierna 5 verduidelijkingen die kunnen helpen.

1) Een SQL-opdracht kan meerdere commando's bevatten. In uw geval: een om de lijnen te schrappen en een om de voetteksten te schrappen. Best in die volgorde, om een probleem van foregine key te vermijden.

Dus de code lijkt hierop:

text to cSql noshow
    delete from lignes_v where ...
    delete from pieds_v where ...
endtext

Hierdoor kunt u met één enkele SqlExec de volledige update van uw DB uitvoeren.

2) U doet veel moeite om uw data in te voeren als parameters. U hoeft enkel het ? te gebruiken voor een Foxpro-variabele of -formule om de waarden van deze parameters meteen in te voeren in SQL.

Voorbeeld:

text to cSql noshow
    delete from pieds_v where (pieds_v.date>=?m.DATE_1) and (pieds_v.date<= ?m.DATE_2) and ...
endtext

Met deze techniek kunt u de hele opdracht in het blok text...endtext plaatsen, wat de leesbaarheid ten goede komt.

3) Ik raad u ook sterk aan om de opdracht uit te voeren als transactie. Het zou immers kunnen dat een multi-gebruikerconflict verhindert dat de voetteksten worden geschrapt, terwijl u de lijnen net al had geschrapt. Ter herinnering hierna de standaardcode voor het uitvoeren van een transactie.

=sqlSetProp(m.M_SQL,'Transactions',2)
if sqlExec(m.M_SQL,m.cSQL)=1
    sqlCommit(m.M_SQL)
else
    sqlRollback(m.M_SQL)
endif
=sqlSetProp (m.M_SQL,'Transactions',1)

4) De pieds_s van een document die overeenstemmen met backorders hebben een niveauveld van meer dan nul. Dit laat toe om uw opdracht te verlichten. Overlappende opdrachten zijn zelden efficiënt.

5) Let op dat u de nulbackorders niet schrapt; deze worden in de DB behouden tot de respectieve betalingen zijn overgezet naar de boekhouding.



Hallo,

Een klant heeft ons gevraagd om zijn backorders tussen 2 data automatisch te kunnen schrappen. Met andere woorden: de leveringen schrappen waarvoor geen factuur is opgesteld.
Het schrappen van de geregistreerde lignes_v is geen probleem, maar ik slaag er niet in een manier te vinden om tegelijkertijd ook de pieds_v te schrappen.
Hebt u een idee hoe ik dit zou kunnen bereiken?

&& schrapt de lijnen van de bestelbonnen waarvoor al een factuur is opgemaakt
&& m.a.w. de lijnen van de backorders
LOCAL old_sel, cSql
old_sel = SELECT()
msg_txt="Datum van de backorders?"
DO do_form WITH 'ASKDATES', .f., .f.
IF msg_bout=2
    RETURN
endif
TEXT TO cSql
    delete lignes_v
     where lignes_v.ID in
    ( select pv.id
    from lignes_v LV
    inner join pieds_v pv on pv. id = lv.id
    where pv.type =2 and LV.s_cle1<>'' and
    pv .date>=convert(datetime,'
ENDTEXT
cSql=cSql+ DTOC(m.DATE_1)+"',103) and pv.date<=convert(datetime,'"+DTOC(m.DATE_2)+"',103) and exists (select ID from pieds_v P where P.piece_liee like '%'+ltrim(str(pv.piece,10))+'%' ) )"
stop(cSql)
&&WAIT 'Schrapt alle backorderlijnen. '
IF SQLEXEC(m.M_Sql, m.CSql, 'MyLignes_v')<>1
    zstoperror()
    SELECT(old_sel)
    RETURN
endif
stop("einde schrapping")
SELECT(old_sel)
return



Functionele cookies: Cookies die nodig zijn voor het gebruik van de website en voorkeurscookies. Ze bevatten geen persoonsgegevens. (Meer informatie)

Analytische cookies: Verzamelen van statistieken met betrekking tot het gedrag van internetgebruikers. (Meer informatie)

Marketingcookies: Om bezoekers op verschillende websites te volgen voor advertentiedoeleinden. (Meer informatie)

De pagina die u wenst te bekijken heeft betrekking op een versie van Mercator die commercieel niet meer beschikbaar is en niet meer wordt ondersteund.

Mercator is een applicatie .net en maakt gebruik van een database SQL Server. De gegevens op deze pagina stemmen niet overeen met deze eigenschappen.