Показать сообщение отдельно
  #4  
Старый 12.06.2015, 09:30
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Почему-то при использовании запроса (не таблицы) при получении данных из нового Аксеса, Дельфи воспринимает результат как BLOB или CLOB. Что-то там не срастается нормально. Попытка принудительной конвертации типа в самом запросе не помогает. Можно попробовать создать поля в соответствующем TADOQuery с принудительном указанием типа.
Еще вариант - компиляция в версии с поддержкой Unicode или в более свежей версии (что-нить типа XE3 или выше), может там что с имплементацией ADO со стороны Дельфей поправили...
И еще вариант - переход на другую библиотеку доступа к данным (например, dbExpress или FireDAC).
С библиотеками у меня не получилось. Побывал как то то не устанавливаются, то не работает.
Код:
unit SearchQuery;

interface

uses SysUtils;

function GetSearchQuery(Str : String) : String;

implementation

function GetSearchQuery(Str : String) : String;
const
  TblCPU : Array [1..2] Of String = (
    '[Процессоры_AMD]',
    '[Процессоры intel]'
  );
  Tbl : Array [1..25] Of String = (
    '[Звук карта ASUS]',
    '[Звук карта Creative]',
    '[hdd Hitachi]',
    '[hdd Seagate]',
    '[Оперативная память Kingston]',
    '[Оперативная память Samsung]',
    '[Оперативная память Corsair]',
    '[Мат Плата ASRock]',
    '[Мат Плата Asus]',
    '[Мат Плата Gigabyte]',
    '[кулер CoolerMaster]',
    '[кулер DEEPCOOL]',
    '[Блок питания Corsair]',
    '[Блок питания Chieftec]',
    '[Блок питания FSP]',
    '[Видеокарта ASUS]',
    '[Видеокарта MSI]',
    '[Видеокарта Gigabyte]',
    '[Корпус ATX]',
    '[Корпус DNS]',
    '[Корпус Zalman]',
    '[Мониторы BenQ]',
    '[Мониторы Samsung]',
    '[Мышь A4tech]',
    '[Клавиатура Genius]'
  );
  sQuery : String = 'Select [Название], [Цена], [Количество] FROM %s where [Название] like "%s"'#13#10;
  sQueryCPU : String = 'Select [Название], [Цена], [Количество] FROM %s where [Название] Like "%s" or [Сокет] like "%s"'#13#10;
  sUnion : String = 'union all'#13#10;
var
  I : Integer;
begin
  Str := '%' + Str + '%';

  Result := Format(sQueryCPU,[TblCPU[1],str,str]) +
            sUnion +
            Format(sQueryCPU,[TblCPU[2],str,str]) +
            sUnion;

  For I := Low(Tbl) To High(Tbl) Do
    Begin
      Result := Result + Format(sQuery,[Tbl[i],str]);
      If I < High(Tbl) Then Result := Result + sUnion;
    End;
end;

end.
Ответить с цитированием