![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
|
При нажатии поиска в программе вместо данных выводит (MEMO), но на другом компе у меня дома все нормально. База .acdb провайдер oldb 12 ставил все что нашел. Не помню что бы дома что то специфичное такое ставил. Не отображает только в поиске. В чем проблема?
|
|
#2
|
||||
|
||||
|
Код в студию.
|
|
#3
|
|||
|
|||
|
Почему-то при использовании запроса (не таблицы) при получении данных из нового Аксеса, Дельфи воспринимает результат как BLOB или CLOB. Что-то там не срастается нормально. Попытка принудительной конвертации типа в самом запросе не помогает. Можно попробовать создать поля в соответствующем TADOQuery с принудительном указанием типа.
Еще вариант - компиляция в версии с поддержкой Unicode или в более свежей версии (что-нить типа XE3 или выше), может там что с имплементацией ADO со стороны Дельфей поправили... И еще вариант - переход на другую библиотеку доступа к данным (например, dbExpress или FireDAC). |
|
#4
|
|||
|
|||
|
Цитата:
Код:
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.
|
|
#5
|
||||
|
||||
|
А собственно в какой компонент ты выводишь этот текст? Приведенный тобой код никакого отношения к проблеме не имеет.
|
|
#6
|
|||
|
|||
|
Цитата:
Код:
procedure TForm1.btnFindClick(Sender: TObject); begin If Trim(Edit1.Text) = '' Then Exit; DBGrid1.Visible:=true; BitBtn2.Visible := True; ADOQuery1.Active := False; ADOQuery1.SQL.Clear; ADOQuery1.SQL.Text := GetSearchQuery(Edit1.Text); ADOQuery1.Active:=true; dbgrid1.Columns[0].Width:=800; dbgrid1.Columns[1].Width:=60; dbgrid1.Columns[2].Width:=75; end; |
|
#7
|
||||
|
||||
|
И опять-же.
Код:
ADOQuery1.SQL.Text := GetSearchQuery(Edit1.Text); ПС: Ага понял. В DBGrid ты пытаешься отобразить результаты, а вместо текста ответа видишь <memo> А тип полей какой у тебя для столбцов задан? Последний раз редактировалось Страдалецъ, 12.06.2015 в 15:45. |
|
#8
|
||||
|
||||
|
Задолбал мелкософт своим апдейтом - идиоты. Я привык на правый Альт-шифт перелючаьб язык, а теперь фиг. В принципе отключена правая сторона. Уроды! Накипело просто
![]() |
|
#9
|
|||
|
|||
|
Цитата:
|
|
#10
|
|||
|
|||
|
Цитата:
|
|
#11
|
||||
|
||||
|
Семерка стоит. Скачал апдейт на свою голову, теперь напрочь исчезла возможность переключать правым Аль+Шифт. только левым и все. В восьмерке таже хрень. Зачем, почему - вообще не понимаю, нафига они то сделали.
Как я понял у тебя тип полей Мемо в таблице, к которой ты собственно делаешь запрос. Ничего удивительного, что TDBGrid тебе пишет вместо значений (Memo). Насколько я в курсе, он и не умеет иначе Мемо в табличке отображать. Удивительно другое, что он что-то другое где-то отображает вместо этого. Нашел тут забавное решение этой проблемы в инете. Для мемо поля в обработчике надо явно привести к строковому типу. Вводить новый текст в поле все так-же нельзя, но вот вывести он сможет: Код:
procedure TForm36.ClientDataSet1f2GetText(Sender: TField; var Text: string; DisplayText: Boolean); begin Text := Sender.AsString; end; Последний раз редактировалось Страдалецъ, 12.06.2015 в 20:06. |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Вовайн (12.06.2015)
| ||
|
#12
|
|||
|
|||
![]() |
|
#13
|
||||
|
||||
|
Ну не так же буквально...
![]() У вас не ClientDataSet, а Query. Вот в нем и обработчик на мемо-поле(я) вешайте. |
| Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение: | ||
Вовайн (12.06.2015)
| ||
|
#14
|
|||
|
|||
|
Цитата:
![]() |
|
#15
|
||||
|
||||
|
у TObject нет свойства AsString
|