2011-01-07 10 views
0

hallo ich habe string ... in meinem string wenn item_type <> ‚Bemerkung‘ und gL_dept <> ‚‘ wird den Rekord .. , wenn der Datensatz in gl_dept gleichen Wert haben zum Beispiel die Überprüfung 400.400.401..der Wert für 400 kommt 2 mal heraus so nur 400 nur einmal hinzufügen, dann wird es zum nächsten Datensatz gehen..aber mein Problem ist wenn ich vergleiche wenn lstDept.indexOf (sdept) <> -1 nicht gehen auf diese Aussage, aber es wird auf diese Aussage zurück .. if (tblSODitemtype) .. wie kann ich den Wert in meine string hinzufügen ..Einsatzdaten in string nach dem Vergleich tun

lstDept := TStringList.Create; 
    tblSOD.DisableControls; 
    try  
    tblSOD.First; 
    while (not tblSOD.Eof) do begin 
     sDept := tblSODGL_DEPT.AsString; 
     if (tblSODITEM_TYPE.AsString <> 'REMARK') and (tblSODGL_DEPT.AsString <> '') then begin 
     if lstDept.IndexOf(sDept) <> -1 then begin 
      lstDept.add(tblSODGL_DEPT.asstring); 
      tblSOD.Next; 
     end;  
     end; 
    end; 
    finally 
    tblSOD.EnableControls; 
    lstDept.Free; 
    end; 

Antwort

9

Ich denke, das Problem ist die Position des Anrufs tblSOD.Next Funktion

versuchen dies zu ändern ist

while (not tblSOD.Eof) do begin 
    sDept := tblSODGL_DEPT.AsString; 
    if (tblSODITEM_TYPE.AsString <> 'REMARK') and (tblSODGL_DEPT.AsString <> '') then begin 
    if lstDept.IndexOf(sDept) <> -1 then begin 
     lstDept.add(tblSODGL_DEPT.asstring); 
     tblSOD.Next; //Problem 
    end;  
    end; 
end; 

dieser

while (not tblSOD.Eof) do begin 
    sDept := tblSODGL_DEPT.AsString; 
    if (tblSODITEM_TYPE.AsString <> 'REMARK') and (sDept <> '') then begin 
    if lstDept.IndexOf(sDept) <> -1 then 
     lstDept.add(sDept);     
    end; 
    tblSOD.Next; 
end; 
+1

Darüber hinaus gibt es ein paar zusätzliche Anrufe zu tblSODGL_DEPT.AsString was könnte ersetzt werden mit sDept. –

+4

+1 für das Verständnis der Frage :) – jpfollenius