Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > БД в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.05.2015, 13:51   #1
sg-ua
Пользователь
 
Регистрация: 13.04.2013
Сообщений: 21
Лампочка Ошибка

при нажатии на кнопку, программа создает список listview и заполняет его с БД Mysql. Потом я нажимаю на строчку, и через параметр делаю новый запрос и заполняем следующий listview и тут выскакивает ошибка. На винде работает все норма, а от на андроид выбивает ошибка, нажимаю окей, программа на секунд 10 зависает а потом срабатывает
Код:
procedure TForm2.ListView1Click(Sender: TObject);
var
  LItem: TListViewItem;
  ms: TMemoryStream;
  begin
     ListView2.ClearItems;
     MyQuery1.Active:=false;
     MyQuery1.SQL.Text:='select * from dish, type where type.id_type=dish.id_type and type.name_type= :parType';
     MyQuery1.Params.ParamByName('parType').Value:=ListView1.Selected.Text;
     MyQuery1.Active:=true;
     while (not myQuery1.Eof) do
          begin
            LItem := ListView2.Items.Add;
	          LItem.Text:=MyQuery1.FieldByName('name_dish').AsString;
            LItem.Detail:='Состав: '+ MyQuery1.FieldByName('struktyre').AsString;
            IdHTTP1 := TIdHTTP.Create(Application);
            ms := TMemoryStream.Create;
            IdHTTP1.Get(MyQuery1.FieldByName('image').AsString , ms);
            LItem.Bitmap.LoadFromStream(ms);
            MyQuery1.Next;
          end;
     TabControl1.Next();
  end;
Изображения
Тип файла: png 5120.png (20.7 Кб, 57 просмотров)

Последний раз редактировалось sg-ua; 25.05.2015 в 13:58.
sg-ua вне форума Ответить с цитированием
Старый 25.05.2015, 14:12   #2
xxbesoxx
Участник клуба
 
Регистрация: 10.08.2010
Сообщений: 1,389
По умолчанию

Если только на эту procedure TForm2.ListView тогда обрашайте таким обиекту который не существует . Пропробуйте закоментировать это код { } и проверите будеть это Ошибка или нет , изучайте отладка кода http://habrahabr.ru/post/178007/

Последний раз редактировалось xxbesoxx; 25.05.2015 в 14:17.
xxbesoxx вне форума Ответить с цитированием
Старый 25.05.2015, 14:27   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
ListView2.ClearItems;
...
MyQuery1.Params.ParamByName('parTyp e').Value:=ListView1.Selected.Text;
Меня одного только смутило, что ты пытаешься взять что-то из уже опустошенного списка?
Может стоит очищать список непосредственно после активации запроса?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 25.05.2015, 14:27   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

MemoryStream создается в цикле кучу раз и ни разу не освобождается. Его до цикла создать один раз и после цикла освободить один раз
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 25.05.2015, 22:45   #5
sg-ua
Пользователь
 
Регистрация: 13.04.2013
Сообщений: 21
По умолчанию

Stilet, я очищаю ListView2, а беру с ListView1..это часть кода где происходит ошибка...
Аватар, освободил но не чего не происходит
Код:
ms.Free;
ошибка происходит там где используется параметре, но по ему там ошибка? все кажись же правильно сделано

Что не кто не знает почему через параметр к запросу может быть такая ошибка?

Последний раз редактировалось Stilet; 27.05.2015 в 18:29.
sg-ua вне форума Ответить с цитированием
Старый 27.05.2015, 18:31   #6
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Да, эт я не внимательно...
1) Комментируй операции, и запускай. Посмотришь на какой из них падения. после раскомментирования.
2) после IdHTTP1.Get рекомендуется переводить курсор потока в ноль (ms.position:=0). чтоб следующие функции работы с ним не пытались считать за концом потока.
Цитата:
ошибка происходит там где используется параметре
Если это так, то нужно проверять ListView1.Selected на nil.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2015, 15:11   #7
sg-ua
Пользователь
 
Регистрация: 13.04.2013
Сообщений: 21
По умолчанию

Все таки параметр, а как проверит ListView1.Selected на nil?
sg-ua вне форума Ответить с цитированием
Старый 02.06.2015, 16:14   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
как проверит ListView1.Selected на nil?
Код:
if ListView1.Selected=nil then ... Пробелма
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 02.06.2015, 18:35   #9
sg-ua
Пользователь
 
Регистрация: 13.04.2013
Сообщений: 21
По умолчанию

не правильно составил вопрос...я проверил selected не nil, а как исправить основную ошибку, я что не могу понять
Код:
procedure TForm1.ListView1Click(Sender: TObject);
var
  LItem: TListViewItem;
  ms: TMemoryStream;
  parType: string;
  begin
    if ListView1.Selected=nil then ShowMessage('NULL')
    else
    begin
    ShowMessage('NOT NULL')
    end;
    TabItem2.Visible:=True;
    ListView2.ClearItems;
    MyQuery1.Active:=false;
    MyQuery1.SQL.Text:='select * from dish, type where type.id_type=dish.id_type and type.name_type= :parType';
    MyQuery1.Params.ParamByName('parType').Value:=ListView1.Selected.Text;
    MyQuery1.Active:=true;
     while (not myQuery1.Eof) do
          begin
            LItem := ListView2.Items.Add;
	          LItem.Text:=MyQuery1.FieldByName('name_dish').AsString;
            LItem.Detail:='Состав: '+ MyQuery1.FieldByName('struktyre').AsString;
            IdHTTP1 := TIdHTTP.Create(Application);
            ms := TMemoryStream.Create;
            IdHTTP1.Get(MyQuery1.FieldByName('image').AsString , ms);
            LItem.Bitmap.LoadFromStream(ms);
            MyQuery1.Next;
          end;
          TabControl2.Next();
     ms.Free;
    IdHTTP1.Free;

end;
sg-ua вне форума Ответить с цитированием
Старый 02.06.2015, 18:45   #10
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

На какой хоть строке ошибка?

PS C утечкой памяти по ms так и не исправил

ЗЫ - IdHTTP1.Free; это что, освобождение созданного мышкой? При следующем входе в ListView1Click обязательно при обращении к IdHTTP1 будет исключение.

PS Какое-то хаотичное программирование
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Nero - ошибка драйвера DMA. ошибка CRC NecRoMat Софт 5 09.05.2012 01:29
Где ошибка в этом исходном коде на языке Си? Или ошибка в Excel? ArchiCurtis Помощь студентам 2 07.04.2012 14:16
Ошибка run-time Error 1004 общая ошибка ODBC kaval88 Microsoft Office Excel 0 27.02.2011 20:20
Ошибка в коде, ошибка в css или это проблема с совместимостью с браузерами? ankris HTML и CSS 5 23.11.2010 16:58
Это ошибка Delphi или моя ошибка??? bloodeagle Общие вопросы Delphi 3 12.11.2009 15:26