FBDataSet (библиотека доступа к данным FireBird/Interbase.)

Модератор: Модераторы

Ответить
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

Добавил файл с этими данными.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

alexs

мне кажется или в ЮТФ8 поиск по TFBDataSet.Locate(LocateField,searchstring,[loCaseInsensitive, loPartialKey]); не разу не регистро не независимый ? можешь глянуть ? или ты тут не виновен ?
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

возможно - проверю
Vadim
долгожитель
Сообщения: 4112
Зарегистрирован: 05.10.2006 08:52:59
Откуда: Красноярск

Сообщение Vadim »

alexs писал(а):надо дублировать на этом сайте мысли по работе с FBDataSet

Надо, очень надо. :)
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

вроде всё работает. По крайней мере в линухе.
Там использую для регистронезависимого сравнения функцию AnsiCompareText. Может где-либо она не верно работает (в винде)?
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

ну в лине смогу только вечером проверить

Добавлено спустя 6 часов 33 минуты 12 секунд:
ага в лине пашет, для меня в принципе основной линух, так что это не так страшно,
завтра точно проверю по поводу работы в венде и пойду жаловаться в мантис и Максиму =)
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

В принципе можно добавить обёртку вокруг этого дела и сдать временно для винды сравнение через UTF8-процедуры в явном виде
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

если рускоезычное сообщество не исправит, то оно никогда не будет исправленно. завел баг 0012466.

в коде чего-то не пойму где концы =(
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

если нужно - могу костыль для винды пока вставить
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

alexs писал(а):если нужно - могу костыль для винды пока вставить

погодь пока, лучше раскажи куда после

Код: Выделить всё

    CompareTextAnsiStringProc : function(const S1, S2: ansistring): PtrInt;


копать =), чет не пойму где это описываться должно =/
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

как я понимаю - есть модуль корый подключает менеджер управления строками в винде. А вот что это за модуль - я ещё не искал. Еси найдёш - скажи.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

c:\FPC\2.2.2\fpcsrc\rtl\win\sysutils.pp

procedure InitWin32Widestrings;

widestringmanager.CompareTextAnsiStringProc:=@Win32AnsiCompareText;


function Win32AnsiCompareText(const S1, S2: string): PtrInt;
begin
result:=CompareString(LOCALE_USER_DEFAULT,NORM_IGNORECASE,pchar(s1),length(s1),
pchar(s2),length(s2))-2;
end;


function CompareString(Locale:LCID; dwCmpFlags:DWORD; lpString1:LPCSTR; cchCount1:longint; lpString2:LPCSTR;cchCount2:longint):longint; external 'kernel32' name 'CompareStringA';

что дальше не знаю =(
я так понимаю что надо CompareString заменить на что-то что работает с ЮТФ8

Добавлено спустя 8 минут 48 секунд:
а в лине так

Код: Выделить всё

function AnsiCompareText(const S1, S2: ansistring): PtrInt;
  var
    a, b: AnsiString;
  begin
    a:=UpperAnsistring(s1);
    b:=UpperAnsistring(s2);
    result:=StrCompAnsiIntern(pchar(a),pchar(b),length(a),length(b),true,true);
  end;


Добавлено спустя 12 минут 29 секунд:
сделал себе заплатку в fbmisc так

Код: Выделить всё

      if (loCaseInsensitive in Options) then
      {$IFDEF MSWINDOWS}
          Result := AnsiCompareText(UTF8UpperCase(S), UTF8UpperCase(S1)) = 0
      {$ELSE}
          Result := AnsiCompareText(S, S1) = 0
      {$ENDIF}
      else
        Result := AnsiCompareStr(S, S1) = 0;
Аватара пользователя
alexs
долгожитель
Сообщения: 4066
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь
Контактная информация:

Сообщение alexs »

чуть-чуть развернул твой код - сделал временную дерективу. Можено скачивать с шаманграда.
Аватара пользователя
Attid
долгожитель
Сообщения: 2588
Зарегистрирован: 27.10.2006 17:29:15
Откуда: 44°32′23.63″N 41°2′25.2″E
Контактная информация:

Сообщение Attid »

эксепшены показываются квадратикам. я так понимаю виноват сам UIB, но чет не пойму где он их хранит или откуда достает. не скажешь где глянуть ?
Аватара пользователя
mak
новенький
Сообщения: 24
Зарегистрирован: 26.11.2008 17:14:07
Откуда: г.Обнинск

Сообщение mak »

Всем добрый день!
Принимайте нового пользователя FBDataset'а.
Естественно, вместе с вопросами :)
Насколько сыра последняя ревизия (20) из Svn ?
Под Delphi 7 сразу не скомпилировалась. Пришлось немного подправить исходники, просто чтобы установился пакет.
Но может там еще что-то в промежуточной стадии разработки ? Если так, то хотелось бы знать, что недоделано ?
Ответить