Хотя, всё равно глючно работало. После трёх часов мучений пришёл к выводу, что надёжнее будет просто перебором. Вот даже кусочек кода, в котором показано это:
Код:
Procedure TForm10.Ochered(Rayon_name:String);
var
st_count1,qx:integer;
Begin
Table2.Active:=True;
Table2.Open;
Table2.First;
st_count1:=Form1.ListBox1.Items.Count-1; // Получаем реальное количество строк в ListBox'e.
For qx:=0 to st_count1 do
begin
If Table2.Locate('ID',Form1.ListBox1.Items.Strings[qx],[loCaseInsensitive]) then // При условии, что данной строки ещё нет в базе выполняем:
begin
Table2.Edit;
Table2.Fields[0].AsString:=Form1.ListBox1.Items.Strings[qx];// Счётчик цикла определяет индекс строки
Table2.Fields[1].AsString:='NNN';
Table2.Fields[3].AsString:=IntToStr(qx+1); //Для реального значения увеличиваем индекс на 1
Table2.Post;
Table2.FlushBuffers;
end
else // В случае, если такая строка уже есть в базе
begin
Table2.Append;
Table2.Fields[0].AsString:=Form1.ListBox1.Items.Strings[qx];
Table2.Fields[1].AsString:='NNN';
Table2.Fields[3].AsString:=IntToStr(qx+1);
Table2.Post;
Table2.FlushBuffers;
end;
end;
Table2.FlushBuffers;
Table2.Close;
Table2.Active:=False;
end;
end;
Вызывать процедуру при событии ListBox1
EndDrag.
Вроде всё так, может кому-то понадобится