powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
6 сообщений из 6, страница 1 из 1
FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
    #40048054
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно сабж, несколько часов уже мучаюсь.
Какие только комбинации не перепробовал

Код: pascal
1.
FibDataset.ExtLocate('SGTIN', memo2.lines[i], [eloInSortedDS, eloCaseInsensitive]);



Код: pascal
1.
FibDataset.ExtLocate('SGTIN', copy(memo2.lines[i], 1, 27), [eloInSortedDS, eloCaseInsensitive);



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



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

Код: pascal
1.
2.
3.
FibDataset.SQLs.SelectSQL.Clear;
FibDataset.SelectSQL.Text := 'Select * From CurDataMatrixes order by SGTIN';
FibDataset.Open;  



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

П.С. Delphi 2007, FibPlus 7.0.15
...
Рейтинг: 0 / 0
FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
    #40048061
ъъъъъ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
арт2010,

Посмотри в исходниках, и увидишь, как сделано.
Зачем мучиться - непонятно.
...
Рейтинг: 0 / 0
FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
    #40048064
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ъъъъъ, дак в том то и дело что вроде как locate по строковым полям есть


Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
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'

Код: pascal
1.
2.
3.
4.
function TFIBCustomDataSet.InternalLocate(const KeyFields: string;
  KeyValues:array of Variant; Options: TExtLocateOptions;FromBegin:boolean = False;
  LocateKind:TLocateKind = lkStandard; ResyncToCenter:boolean =False
  ): Boolean;
...
Рейтинг: 0 / 0
FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
    #40048084
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Короче, locate по строкам работает, сам косякнул
...
Рейтинг: 0 / 0
FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
    #40048143
Cobalt747
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
арт2010,

напиши хоть что надо было поменять?
...
Рейтинг: 0 / 0
FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
    #40048187
арт2010
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Cobalt747, ничего не надо, все работает прекрасно. Был всецело мой косяк и еще совпадение, что все "символьно-цифровые" строки на самом деле не отбирались запросом (в силу некоторых ограничений в самом запросе) и только чисто "цифровая" строка отбиралась (так уж совпало), поэтому на нее locate и срабатывал, а на отсутствующие в запросе строки locate логично локейтился на самую первую строку. Короче полный фейспалм с моей стороны и беспочвенный наезд на FibPlus )
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Delphi [игнор отключен] [закрыт для гостей] / FibPlus не в состоянии сделать Locate по символьно-цифровому полю?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]