Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
 FibPlus не в состоянии сделать Locate по символьно-цифровому полю?  [new]
арт2010
Member

Откуда:
Сообщений: 426
Собственно сабж, несколько часов уже мучаюсь.
Какие только комбинации не перепробовал

FibDataset.ExtLocate('SGTIN', memo2.lines[i], [eloInSortedDS, eloCaseInsensitive]);


FibDataset.ExtLocate('SGTIN', copy(memo2.lines[i], 1, 27), [eloInSortedDS, eloCaseInsensitive);


FibDataset.ExtLocate('SGTIN', '%' + copy(memo2.lines[i], 1, 27) + '%', [eloInSortedDS, eloCaseInsensitive, eloWildCards]);


В общем все какие возможно комбинации перепробовал. Так вот, эта скотина делает locate только если в поле SGTIN есть только цифры в символьном представлении. То есть если SGTIN = '032032302939302000087654321', то находит, но если хоть одна буква к примеру SGTIN = '03203230293930200008765432W', то все, хрен - показывает всегда самую первую запись - записи предварительно упорядочены в запросе order by:

FibDataset.SQLs.SelectSQL.Clear;
FibDataset.SelectSQL.Text := 'Select * From CurDataMatrixes order by SGTIN';
FibDataset.Open;  


Настройки FibDataset все перерыл, ничего не нашел, что повлияло бы на поиск. Комбинации опций тоже не помогают. Подскажите - можно ли решить данную проблему или это творение реально не в состоянии сделать locate по символьно-цифровому полю???

П.С. Delphi 2007, FibPlus 7.0.15
23 фев 21, 01:53    [22285006]     Ответить | Цитировать Сообщить модератору
 Re: FibPlus не в состоянии сделать Locate по символьно-цифровому полю?  [new]
ъъъъъ
Member

Откуда:
Сообщений: 1804
арт2010,

Посмотри в исходниках, и увидишь, как сделано.
Зачем мучиться - непонятно.
23 фев 21, 08:37    [22285019]     Ответить | Цитировать Сообщить модератору
 Re: FibPlus не в состоянии сделать Locate по символьно-цифровому полю?  [new]
арт2010
Member

Откуда:
Сообщений: 426
ъъъъъ, дак в том то и дело что вроде как locate по строковым полям есть

+

function CompareValues:boolean;
var
  i:integer;
  p:Pointer;
  vIsString:boolean;
  L:integer;
  dt:TDateTime;
  cResult:shortInt;
  InitStrValue:boolean;
  inWS:boolean;
  ts:TTimeStamp;
  fi:PFIBFieldDescr;
  dv:Double;
  fn:Integer;
 {$IFNDEF D6+}
  tempCurrency:Currency;
 {$ENDIF}
  function UDFCompStr(const s:string):integer;
  begin
   Result:=CompareFieldValues(TField(fl.List^[i]),KeyValues[i],s )
  end;

  function UDFCompWideStr(const s:Widestring):integer;
  begin
   Result:=CompareFieldValues(TField(fl.List^[i]),WideKey,s )
  end;

  procedure UDFUtf8DecodeA(var s:Ansistring);
  begin
  {$IFDEF   D12+}
   s:=UTF8ToString(S)
  {$ELSE}
   s:=UTF8Decode(s)
  {$ENDIF}
  end;



Может проблема в том что delphi 2007 последняя неюникодная версия. Но опять таки символы в строке у меня могут быть только латинские большие и малые, никакой кириллицы и знаков.

А может проблема в том что KeyValues - array of Variant, а я передаю ему строку. Но сколько видел в сети немногочисленные примеры, везде передается строка и вроде как работает. Единственное непонятно из-за малочисленности примеров в инете, какая именно строка передаются - цифровая в символьном виде типа '123456' или же полноценная символьно-строковая как у меня типа '123456W'

function TFIBCustomDataSet.InternalLocate(const KeyFields: string;
  KeyValues:array of Variant; Options: TExtLocateOptions;FromBegin:boolean = False;
  LocateKind:TLocateKind = lkStandard; ResyncToCenter:boolean =False
  ): Boolean;
23 фев 21, 09:31    [22285025]     Ответить | Цитировать Сообщить модератору
 Re: FibPlus не в состоянии сделать Locate по символьно-цифровому полю?  [new]
арт2010
Member

Откуда:
Сообщений: 426
Короче, locate по строкам работает, сам косякнул
23 фев 21, 11:15    [22285052]     Ответить | Цитировать Сообщить модератору
 Re: FibPlus не в состоянии сделать Locate по символьно-цифровому полю?  [new]
Cobalt747
Member

Откуда:
Сообщений: 2285
арт2010,

напиши хоть что надо было поменять?
23 фев 21, 14:55    [22285151]     Ответить | Цитировать Сообщить модератору
 Re: FibPlus не в состоянии сделать Locate по символьно-цифровому полю?  [new]
арт2010
Member

Откуда:
Сообщений: 426
Cobalt747, ничего не надо, все работает прекрасно. Был всецело мой косяк и еще совпадение, что все "символьно-цифровые" строки на самом деле не отбирались запросом (в силу некоторых ограничений в самом запросе) и только чисто "цифровая" строка отбиралась (так уж совпало), поэтому на нее locate и срабатывал, а на отсутствующие в запросе строки locate логично локейтился на самую первую строку. Короче полный фейспалм с моей стороны и беспочвенный наезд на FibPlus )

Сообщение было отредактировано: 23 фев 21, 16:58
23 фев 21, 17:04    [22285223]     Ответить | Цитировать Сообщить модератору
Все форумы / Delphi Ответить