2017-07-07 10 views
0

Wie Sie den Wert von db in progress 4gl abrufen, haben Sie zunächst eine Eingabe vom Benutzer, um den Datensatz basierend auf dem Wert der Datensatz wird angezeigt werden. Wir versuchen das, aber wir können den genauen Wert nicht abrufen.Wie Sie die Daten von db in progress 4gl abrufen?

Das ist unser Programm:

def var b as int. 
def var obj as int. 
/*set obj. 
prompt-for obj.*/ 
def var sum as int. 
def var a as int no-undo. 
def var i as int no-undo. 
for each po_mstr break by po_nbr. 
select count (*) from po_mstr. 
    assign 
     a = 1 
     b = 583 . 
    repeat: 
     if first-of (po_nbr) then 
      set obj. 
     prompt-for obj. 
     if (a le obj and obj lt b) then 
      disp po_nbr po_vend po_ship po_ord_date with 2 col. 
    end. 
end. 

ich nur ein einzigen Daten abrufen kann, wenn wir mehr als 2 Wert geben bedeutet, dass es den gleichen ersten Wert anzuzeigen.

+0

SELECT in ABL ist eine schlechte Idee! – Austin

Antwort

0

Lassen Sie uns das brechen. Du verwendest viele Befehle, ohne wirklich zu wissen, wofür sie sind.

FOR EACH öffnet einen Block und führt Datensatzlesevorgänge für jede Schleife in der ausgewählten Sortierreihenfolge aus (wenn keine ausgewählt ist, wird der Primärindex verwendet).

SELECT führt eine Datenbankoperation aus, die nicht unbedingt im laufenden Betrieb ausgeführt werden muss, aber möglicherweise.

REPEAT öffnet auch einen Block, in dem Sie möglicherweise Datensätze mit zusätzlichen Befehlen loopen. Nachdem ich das gesagt habe, hier ist, wie ich das schreiben würde:

def var a as int no-undo. 
def var b as int. 
def var sum as int. 
/* 
def var obj as int. 
update obj. 
def var i as int no-undo. 
you're not using this */ 
select count (*) into sum from po_mstr. 
/* is this what you wanted? To have the count in sum? I don't see a reason, but suit yourself */ 
assign a = 1 b = 583 . /* or use UPDATE a b. if you would like to make that variable */ 
/* Since a and b are not changing, I moved it to outside the loop */ 
for each po_mstr where po_nbr >= a and po_nbr < b: 
    disp po_nbr po_vend po_ship po_ord_date with 2 col. 
end. 

Ich nahm einige Freiheiten. Ich habe obj entfernt, da ich, soweit ich es beurteilen konnte, versucht haben, po_nbr-Werte in sie zu kopieren und sie dann zu verwenden, um zu sehen, ob sie in dem Bereich waren, den Sie sehen wollten. Da ich glaube, dass po_nbr für po-Nummer steht, und das ist wahrscheinlich einzigartig, würde ich auch erraten, dass jede Iteration einen anderen Wert dafür haben wird. Also keine Notwendigkeit zu verwenden, wenn zuerst. Außerdem müssen Sie es nicht mehr in eine Variable kopieren. Vergleichen Sie es direkt mit der Anzahl der Po's, die Sie sehen möchten. Schließlich sollte die Anzeige in Ordnung sein.

Ich gehe voran und gehe davon aus, dass dein Team nicht trainiert wurde. Dies wäre sehr wichtig für die Zukunft, da QAD (eigentlich jede ERP-Software) wirklich schnellen und schlecht geschriebenen Code aufblasen wird, selbst wenn es harmlos ist, was sich auf die Leistung und Benutzerfreundlichkeit auswirkt, was ein Problem für den gesamten Betrieb sein könnte. Stack Overflow kann hilfreich für pünktliche Fragen sein, aber die Art von Problemen, denen Sie begegnen werden, wenn Sie nicht vorbereitet sind, wird wahrscheinlich nicht möglich sein, hier zu lösen.

Hoffe, das hilft.

Verwandte Themen