Re: Delphi, Irbis64, создание читателя?
Пользователь:
S-presso (IP-адрес скрыт)
Дата: 17, April, 2012 18:05
Насколько я понимаю, поисковое выражение задается одинаковым образом при поиске по идентификатору и ФИО. Просто если поисковый термин состоит из трех слов, они идентифицируются как ФИО. Если нужен поиск только по фамилии, используем усечение: IC_search('RDR', Pchar('RI='+expr+'$'), 0, 1, '', rp, 32000). А для поиска по фамилии и идентификатору я бы сначала искал все записи, соответствующие данному идентификатору, а потом уже среди них выбрал читателей с данной фамилией. Можно вернуть массив нужных записей следующей функцией (на C#):
public int SearchDirect(string s_exp, out int[] mfn)
{
IntPtr answer = Marshal.AllocHGlobal(32000);
byte[] strBytes = Encoding.UTF8.GetBytes(s_exp);
int count = IRBIS64_Client.IC_search(dbCurrent, strBytes, 0, 1, "", answer, 32000);
answer = IRBIS64_Client.IC_delim_reset(answer);
byte[] foundBytes = new byte[32000];
Marshal.Copy(answer, foundBytes, 0, 32000);
string result = Encoding.GetEncoding(1251).GetString(foundBytes);
if (count != 0)
mfn = new int[count];
else
mfn = null;
int index = 0;
int i = 0, i0;
while (foundBytes[i] != '\0')
{
if (foundBytes[i] != '\r')
{
i0 = i;
i = result.IndexOf('#', i);
mfn[index++] = Convert.ToInt32(result.Substring(i0, i - i0));
}
else
i++;
i++;
}
return index;
}
Ее вызов для поиска по идентификатору:
int[] mfn = null;
SearchDirect("RI=" + id, out mfn);
Далее считываем каждую запись, беря ее номер из массива mfn, и находим поле "Фамилия".