Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 11.06.2015, 17:52
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию Проблема с отображеннием данных

При нажатии поиска в программе вместо данных выводит (MEMO), но на другом компе у меня дома все нормально. База .acdb провайдер oldb 12 ставил все что нашел. Не помню что бы дома что то специфичное такое ставил. Не отображает только в поиске. В чем проблема?
Ответить с цитированием
  #2  
Старый 11.06.2015, 23:58
Аватар для Kailon
Kailon Kailon вне форума
Активный
 
Регистрация: 06.06.2010
Сообщения: 339
Версия Delphi: 10.4
Репутация: 429
Сообщение

Код в студию.
__________________
Всегда пишите код так, будто сопровождать его будет склонный к насилию психопат, который знает, где вы живете.
Ответить с цитированием
  #3  
Старый 12.06.2015, 02:18
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,029
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Почему-то при использовании запроса (не таблицы) при получении данных из нового Аксеса, Дельфи воспринимает результат как BLOB или CLOB. Что-то там не срастается нормально. Попытка принудительной конвертации типа в самом запросе не помогает. Можно попробовать создать поля в соответствующем TADOQuery с принудительном указанием типа.
Еще вариант - компиляция в версии с поддержкой Unicode или в более свежей версии (что-нить типа XE3 или выше), может там что с имплементацией ADO со стороны Дельфей поправили...
И еще вариант - переход на другую библиотеку доступа к данным (например, dbExpress или FireDAC).
Ответить с цитированием
  #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.
Ответить с цитированием
  #5  
Старый 12.06.2015, 15:29
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

А собственно в какой компонент ты выводишь этот текст? Приведенный тобой код никакого отношения к проблеме не имеет.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #6  
Старый 12.06.2015, 15:37
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
А собственно в какой компонент ты выводишь этот текст? Приведенный тобой код никакого отношения к проблеме не имеет.
Код:
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  
Старый 12.06.2015, 15:42
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

И опять-же.
Код:
ADOQuery1.SQL.Text := GetSearchQuery(Edit1.Text);
Это у тебя отрабатывает я думаю без проблем. Вот какой компонент у тебя показывает слово (MEMO)?
ПС:
Ага понял. В DBGrid ты пытаешься отобразить результаты, а вместо текста ответа видишь <memo>
А тип полей какой у тебя для столбцов задан?
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.

Последний раз редактировалось Страдалецъ, 12.06.2015 в 15:45.
Ответить с цитированием
  #8  
Старый 12.06.2015, 15:46
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Задолбал мелкософт своим апдейтом - идиоты. Я привык на правый Альт-шифт перелючаьб язык, а теперь фиг. В принципе отключена правая сторона. Уроды! Накипело просто
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
  #9  
Старый 12.06.2015, 16:23
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
И опять-же.
Код:
ADOQuery1.SQL.Text := GetSearchQuery(Edit1.Text);
Это у тебя отрабатывает я думаю без проблем. Вот какой компонент у тебя показывает слово (MEMO)?
ПС:
Ага понял. В DBGrid ты пытаешься отобразить результаты, а вместо текста ответа видишь <memo>
А тип полей какой у тебя для столбцов задан?
В самой БД короткий текст.
Ответить с цитированием
  #10  
Старый 12.06.2015, 16:24
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Задолбал мелкософт своим апдейтом - идиоты. Я привык на правый Альт-шифт перелючаьб язык, а теперь фиг. В принципе отключена правая сторона. Уроды! Накипело просто
На какой винде? У меня норм все.
Ответить с цитированием
  #11  
Старый 12.06.2015, 19:16
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Семерка стоит. Скачал апдейт на свою голову, теперь напрочь исчезла возможность переключать правым Аль+Шифт. только левым и все. В восьмерке таже хрень. Зачем, почему - вообще не понимаю, нафига они то сделали.

Как я понял у тебя тип полей Мемо в таблице, к которой ты собственно делаешь запрос. Ничего удивительного, что 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  
Старый 12.06.2015, 19:34
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Ответить с цитированием
  #13  
Старый 12.06.2015, 19:56
Аватар для Страдалецъ
Страдалецъ Страдалецъ вне форума
Гуру
 
Регистрация: 09.03.2009
Адрес: На курорте, из окна вижу теплое Баренцево море. Бррр.
Сообщения: 4,721
Репутация: 52347
По умолчанию

Ну не так же буквально...
У вас не ClientDataSet, а Query. Вот в нем и обработчик на мемо-поле(я) вешайте.
__________________
Жизнь такова какова она есть и больше никакова.
Помогаю за спасибо.
Ответить с цитированием
Этот пользователь сказал Спасибо Страдалецъ за это полезное сообщение:
Вовайн (12.06.2015)
  #14  
Старый 13.06.2015, 12:52
Вовайн Вовайн вне форума
Новичок
 
Регистрация: 14.02.2015
Сообщения: 68
Версия Delphi: Delphi EX7 21
Репутация: 10
По умолчанию

Цитата:
Сообщение от Страдалецъ
Ну не так же буквально...
У вас не ClientDataSet, а Query. Вот в нем и обработчик на мемо-поле(я) вешайте.
По разному прописывать побывал не выходит
Ответить с цитированием
  #15  
Старый 13.06.2015, 14:11
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

у TObject нет свойства AsString
__________________
Пишу программы за еду.
__________________
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:37.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter