
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.
|