Следующая статья: TDBGrid - копирование в буфер обмена.
Надежней и быстрее (если вы ищете отдельные записи) выполнить поиск строки с помощью Seek (если найдена первая запись) или Locate (индекс не требуется).
Пример:
// DBFSeek - поиск величины с использованием индекса - простой путь
function DBFSeek(const Table1: TTable; const sValue: string): boolean;
var sExpValue: DBIKEYEXP; bmPos: TBookMark; nOrder: integer;
begin
Result:=False;
with Table1 do
begin
if (Active) and (Length(IndexName) > 0) then
begin
bmPos:=GetBookMark;
DisableControls;
StrPCopy(sExpValue, sValue);
if (DbiGetRecordForKey(Handle, True, 0, StrLen(sExpValue), @sExpValue, nil)=DBIERR_NONE) then
Result:=True
else
GotoBookMark(bmPos);
FreeBookMark(bmPos);
EnableControls;
end;
end;
end;
// DBFLocate - поиск величины, не связанный с ключевым полем; замена теперь принимает FieldName,
величина может быть частичной
function DBFLocate(const Table1: TTable; const sFld, sValue: string): boolean;
var
bmPos: TBookMark;
bFound: boolean;
len: integer;
begin
Result:=False;
if (sValue <>'') and (sFld <>'') then
begin
with Table1 do
begin
DisableControls;
bFound:=False;
bmPos:=GetBookMark;
len:=Length(sValue);
First;
while not EOF do
begin
if FieldByName(sFld).AsString<>sValue then
Next
else
begin
Result:=True;
bFound:=True;
Break;
end;
end;
if (not bFound) then GotoBookMark(bmPos);
FreeBookMark(bmPos);
EnableControls;
end;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
Table1.UpdateCursorPos;
if DBFSeek(Table1, xVal1) then
begin
… // делаем все, что необходимо
if DBFLocate(Table1,'CUSTNAME', xVal2) then
begin
… // делаем все, что необходимо
end;
end;
end;