2013-03-24 46 views
3

有人可以告訴我爲什麼這隻在aTbl.Edit後一次有效。 如果我刪除了四行來編輯表格,它會迭代所有49條記錄。看起來Edit和Post會將文件遊標定位在文件的末尾,因爲我只有一條記錄發生了變化,並且退出了EOF。Table.Edit強制光標到EOF

我正在使用D5,Zeos-6和SQLite3。我甚至嘗試在編輯之前抓取Auto-inc,然後在它後面找到一個Locate,但編輯後仍然退出。

感謝您提供的任何建議,但這一直在下午讓我瘋狂。我一直認爲這是愚蠢的,但我找不到它。 :)

aTbl.First;       // Test DB has 49 records 
while not aTbl.EOF do 
begin 
    for i := 0 to lbCt.Items.Count-1 do // Currently only two items in the list 
    begin        // and only the second makes a match 
    aMatch := False;     // which then forces the edit 
    CtStr := lbCt.Items[i]); 
    case InOut.ItemIndex of 
     0: aMatch := aTbl.FieldByName(fld_A).AsString = CtStr; 
     1: aMatch := aTbl.FieldByName(fld_B).AsString = CtStr; 
     2: aMatch := (aTbl.FieldByName(fld_A).AsString = CtStr) or 
        (aTbl.FieldByName(fld_B).AsString = CtStr); 
     3: aMatch := (aTbl.FieldByName(fld_A).AsString = CtStr) and 
        (aTbl.FieldByName(fld_B).AsString = CtStr); 
    end; 
    if aMatch then 
    begin 
     aTbl.Edit; 
     aTbl.FieldByName('Account').AsString := lbCt.Items[i]; 
     aTbl.FieldByName('Folder').AsString := lbCt.Items[i]; 
     aTbl.Post; 
    end; 
    end; 
    aTbl.Next; 
end; 
+0

嗯.. @TLama你有什麼編輯? – user983145 2013-03-24 22:56:31

+2

不客氣。 :-)我發佈了一個答案,以便其他人發現這個問題可以看到它。 (就代表事情而言,我只是根據@TLama發佈的解釋它的鏈接發佈了這個鏈接。現在我看,儘管如此,事實上,您已經接受了7個你已經收到答案的問題的7個答案(這是你提到的「綠色勾號」 - 你接受一個答案,通過點擊檢查把它變成綠色),所以我認爲你做得很好。) – 2013-03-25 01:59:05

+0

好吧,@TLama,我只是不知道我可能會有什麼做錯了。 :)那麼,除了代碼格式化,這是非常**個人的,我已經做了近40年的我的方式。儘管如此,我不會因編輯而感到厭煩。現在Ken已經解釋瞭如何看看有時做了什麼,我可以從編輯中學習。 – user983145 2013-03-25 18:27:07

回答

3

的問題是最有可能的,你必須使用兩種AccountFolder作爲索引字段的一個積極的指標。那些是你改變值的字段,如果它們中的任何一個都在當前的索引表達式中,它將把記錄指針移動到該行的新位置(實際上可能是EOF)。

+0

其實肯,有一個指數活躍,但它是在編輯領域的陰影。我猜測Zeos或SQLite的特質。但是 - 現在一切正常,再次感謝。 – user983145 2013-03-25 18:28:26