Форум программистов, компьютерный форум, киберфорум
Delphi: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/9: Рейтинг темы: голосов - 9, средняя оценка - 4.89
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488

Как освободить память после использования SQLite?

09.08.2017, 18:56. Показов 1897. Ответов 21
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Как освободить память после использование sqlite?
Delphi
1
2
3
4
    
  SQLiteDatabase := TSQLiteDatabase.Create(datadir);
  SQLiteTable := SQLiteDatabase.GetTable('SELECT * FROM home');
  SQLiteDatabase.Free;
Смотрел в диспетчере задач с каждым вызовом SQLiteDatabase.GetTable память увеличивается. Как почистить SQLiteTable ?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.08.2017, 18:56
Ответы с готовыми решениями:

Как освободить память (ресурс) после его использования
private void installButton_MouseEnter(object sender, EventArgs e) { installButton.Image =...

Как освободить память после закрытия формы
Использую на событии OnClose данный код Action := caFree; Но мне нужно, чтобы можно было повторно открыть форму, стояло form1.show; но...

Как освободить память после удаления объекта из вектора
Всем доброго времени суток. Никак не могу понять как освободить память, после удаления объекта из вектора... ...

21
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
09.08.2017, 19:23
А не логично ли что как-то так?:
Delphi
1
2
3
4
5
  SQLiteDatabase:=TSQLiteDatabase.Create(datadir);
  SQLiteTable:=SQLiteDatabase.GetTable('SELECT * FROM home');
  FreeAndNil(SQLiteDatabase);
  ...
  FreeAndNil(SQLiteTable);
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
09.08.2017, 20:07  [ТС]
GoodWeather, я просто думал что если мы не создаем то и уничтожать не нужно..
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
10.08.2017, 07:56
не подскажите, а что вы делаете этим кодом?
зачем использовать SQLiteDatabase.GetTable()?
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
10.08.2017, 11:26  [ТС]
qwertehok, по идее выбираю нужную таблицу
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
10.08.2017, 11:47
а зачем?
что происходит дальше?
0
Айлурофил
 Аватар для Massaraksh7
514 / 447 / 112
Регистрация: 27.05.2017
Сообщений: 2,701
Записей в блоге: 5
10.08.2017, 11:50
Если посмотреть исходник, то таки-создаем:
Delphi
1
2
3
4
function TSQLiteDatabase.GetTable(const SQL: String): TSQLiteTable;
begin
  Result := TSQLiteTable.Create(Self, SQL);
end;
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
10.08.2017, 13:12  [ТС]
Дальше я перебираю всю таблицу
Delphi
1
While not SQLiteTable.EOF do
Добавлено через 5 минут
Цитата Сообщение от qwertehok Посмотреть сообщение
не подскажите, а что вы делаете этим кодом?
зачем использовать SQLiteDatabase.GetTable()?
а что использовать?
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
10.08.2017, 13:16
Цитата Сообщение от Олег2000про Посмотреть сообщение
а что использовать?
обычный Query\FDQuery, или сторонние аналоги
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
10.08.2017, 14:41  [ТС]
qwertehok, спасибо. а как перебрать всю таблицу?

Добавлено через 5 минут
во всех примерах используется именно такая конструкция. с использованием
Delphi
1
2
SQLiteDatabase:=TSQLiteDatabase.Create(datadir);
  SQLiteTable:=SQLiteDatabase.GetTable('SELECT * FROM home');
0
5978 / 4553 / 1095
Регистрация: 29.08.2013
Сообщений: 28,180
Записей в блоге: 3
10.08.2017, 15:31
Delphi
1
2
3
4
5
query.sql.text:='select * from T';
while not query.EOF do begin
  ..
  query.next;
end;
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
10.08.2017, 22:14  [ТС]
GoodWeather, кстати пытаюсь освободить SQLiteTable вылетает AV

Добавлено через 2 минуты
использую обертки SQLiteTable3.pas SQLite3.pas
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
10.08.2017, 22:29
Исходники надо смотреть, или документацию, а у меня их нету.
Судя по #7 оно создаёт TSQLiteTable и передаёт ему TSQLiteDatabase, так что при FreeAndNil(SQLiteDatabase); возможно созданное через GetTable() само уничтожается...
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
10.08.2017, 23:34  [ТС]
Исходя из статти http://www.webdelphi.ru/2010/0... lphi-2010/ надо использовать Destroy
0
Айлурофил
 Аватар для Massaraksh7
514 / 447 / 112
Регистрация: 27.05.2017
Сообщений: 2,701
Записей в блоге: 5
11.08.2017, 08:17
Delphi
1
2
3
4
5
SQLiteDatabase:=TSQLiteDatabase.Create(datadir);
SQLiteTable:=SQLiteDatabase.GetTable('SELECT * FROM home');
...
SQLiteTable.Free;
SQLiteDatabase.Free;
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
11.08.2017, 12:33  [ТС]
что за херня. пытаюсь освободить память вылетает AV. не освобождаю - в диспетчере с каждым использованием увеличивается занимаемая память на 1-1.5 мб
0
Айлурофил
 Аватар для Massaraksh7
514 / 447 / 112
Регистрация: 27.05.2017
Сообщений: 2,701
Записей в блоге: 5
11.08.2017, 12:35
Значит, в чём-то другом дело. Полный код приведи.
0
-4 / 0 / 0
Регистрация: 13.11.2015
Сообщений: 488
11.08.2017, 13:18  [ТС]
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
function getdata(s:string):string;
var
  SQLiteDatabase : TSQLiteDatabase;
  SQLiteTable    : TSQLiteTable;
begin
    SQLiteDatabase := TSQLiteDatabase.Create(datadir);
    SQLiteTable := TSQLiteTable.Create(SQLiteDatabase,'SELECT * FROM home');
    While not SQLiteTable.EOF do
    begin
      try
        Result := Result + SQLiteTable.FieldAsString(SQLiteTable.FieldIndex['act'])+'^';
      finally
        SQLiteTable.Next;
      end;
    end;
    SQLiteDatabase.Destroy;
    SQLiteTable.Destroy;//тут AV
end;
0
Айлурофил
 Аватар для Massaraksh7
514 / 447 / 112
Регистрация: 27.05.2017
Сообщений: 2,701
Записей в блоге: 5
11.08.2017, 13:40
А Result у тебя чему равен в начале?

Добавлено через 1 минуту
У меня всё работает:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
procedure TMainForm.Button2Click(Sender: TObject);
var
  SQLiteDatabase : TSQLiteDatabase;
  SQLiteTable    : TSQLiteTable;
  s:string;
begin
    s:='';
    SQLiteDatabase := TSQLiteDatabase.Create('e:\g\d\appl2002\delphi2010\sqlite\geomarks\data\hoyat.db');
    SQLiteTable := TSQLiteTable.Create(SQLiteDatabase,'SELECT * FROM r_objects');
    While not SQLiteTable.EOF do
    begin
      try
        s:=s+SQLiteTable.FieldAsString(SQLiteTable.FieldIndex['MM4'])+'^';
      finally
        SQLiteTable.Next;
      end;
    end;
    SQLiteDatabase.Destroy;
    SQLiteTable.Destroy;
end;
0
Модератор
 Аватар для D1973
9924 / 6460 / 2457
Регистрация: 21.01.2014
Сообщений: 27,410
Записей в блоге: 3
11.08.2017, 16:07
Ну как так??? Вы сначала грохнули Базу, а потом пытаетесь грохнуть таблицу в этой Базе? Вам последовательность действий ни на что не намекает?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
11.08.2017, 16:07
Помогаю со студенческими работами здесь

Как освободить старые ImageVew чтобы освободить память
Привет всем Я новичок поэтому прошу сильно не пинать. В общем мое первое приложение типа интернет магазин. Одно окно в котором...

Как правильно освободить память после работы с динамическим массивом
Здравствуйте! Помогите понять в чём проблема при освобождении памяти. Простой пример: #define _CRT_SECURE_NO_WARNINGS #include...

Освободить оперативную память, после удаление формы
Помогите. Создаю форму так: Form1 notific = new Form1(); notific.Visible = true; Уничтожаю так: ...

Как высвободить память после использования приложения?
Как высвободить память после использования приложения, но перед закрытием текстового окна (хочется проконтролировать время выполнения...

Как написать формулы в sqlite или отказаться от использования sqlite вовсе
Доброго времени суток. Друзья, пишу справочник по физике, недавно столкнулся с проблемой - как написать формулы в sqlite? пользуюсь DB...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru