например
Table1.UpdateCursorPos;if DBFSeek( Table1, xVal1 ) then {_не_ delphi-функция - смотри ниже}beginif DBFLocate( Table1, 'CUSTNAME', xVal2 ) then {_не_ delphi-функция - модификация из faq)begin... делаем все, что необходимоend;end; |
Tom
ps.
{============================================================ { DBFSeek { поиск величины с использованием индекса - простой путь {============================================================} function DBFSeek( const Table1: TTable; const sValue: string): boolean; var sExpValue : DBIKEYEXP;bmPos : TBookMark;nOrder : integer; begin Result := False; with Table1 dobeginif (Active) and (Length(IndexName) > 0) thenbeginbmPos := GetBookMark;DisableControls; StrPCopy( sExpValue, sValue );if (DbiGetRecordForKey( Handle, True, 0, strlen(sExpValue), @sExpValue, nil ) = DBIERR_NONE ) thenResult := TrueelseGotoBookMark( bmPos); FreeBookMark( bmPos );EnableControls;end;end;end; {================================================================================== { DBFLocate { поиск величины, не связанный с ключевым полем { замена из faq, теперь акцептует fieldname, величина может быть частичной {================================================================================} function DBFLocate( const Table1: TTable; const sFld, sValue: string): boolean; var bmPos : TBookMark;bFound : boolean;len : integer;begin Result := False;if (not StrEmpty(sValue)) and (not StrEmpty(sFld) )thenbeginwith Table1 dobeginDisableControls;bFound := False;bmPos := GetBookMark;len := Length(sValue);First; while not EOF dobeginif FieldByName(sFld).AsString <> sValue thenNextelsebeginResult := True;bFound := True;Break;end;end; if (not bFound) thenGotoBookMark( bmPos); FreeBookMark( bmPos );EnableControls;end;end;end; |
[000563]