С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder: Базы данных
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1

Поиск свободной ячейки в хранилище

26.08.2016, 11:01. Показов 844. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Моя задача такова: Есть хранилища nstorage символьного типа и укаждого хранилища есть пронумированные по-порядку ячейки nstack. Если в хранилище нет пропусков(все ячейки пронумированны по-порядку), то при добавлении новой записи создается новая ячейка с максимальным номером. если же где-то в середине запись вместе с какой-то ячейкой была удалена, то, при следующем добавлении записи, она преобретает этот номер ячейки.

пример:
А 1
А 2
А 3
Здесь я должен переменной n присвоить 4.

А 1
А 2
А 4
Здесь n=3.

Вот мой код

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
void __fastcall TAdd_in_Storage::Button1Click(TObject *Sender)
{
 AnsiString s=ComboBox1->Text;
 int n=0;
 ADOQuery1->SQL->Clear();
 ADOQuery1->SQL->Add("SELECT * FROM stack WHERE nstorage='"+s+"' ORDER BY nstack");
 ADOQuery1->Active=true;
 ADOQuery1->First();
 for (int i = 0; i < ADOQuery1->FieldCount; i++) {
     if (n==ADOQuery1->FieldByName("nstack")->AsInteger) {
       n++;
       ADOQuery1->Next();
     }
     else break;
 
 }
 Main->T_Stack->Append();
 Main->T_Stack->Edit();
 Main->T_Stack->FieldByName("nstorage")->AsAnsiString=s;
 Main->T_Stack->FieldByName("nstack")->AsInteger=n;
 Main->T_Stack->FieldByName("kode")->AsInteger=Main->Q_Exh->FieldByName("kode")->AsInteger;
 Main->T_Stack->Post();
 ADOQuery1->Active=false;
 Close();
}
У меня по какой-то причине при добавлении новой записи, если уже имеются ячейки 1,2,3, постоянно n присваивает 4, то есть получается:

А 1
А 2
А 3
А 4
А 4
А 4
Что в моем кривом алгоритме не правильно?

Добавлено через 20 часов 14 минут
содержание таблицы stack : kod(autoinc), kode(numeric), nstack(numeric), nstorage(shortstring)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
26.08.2016, 11:01
Ответы с готовыми решениями:

Поиск первой/последней свободной буквы диска
Ну вот опять... было достаточно не пописать буквально пару месяцев и всё забылось. Задача такая: нужно через subst в начале батника...

Откорректировать макрос так, чтобы поиск осуществлялся не с ячейки А1, а с ячейки C21
Как в этом макросе прописать, чтобы поиск осуществлялся в столбике &quot;С&quot;, но с 21-ой строки? Sub asd() Dim c As Range Set c =...

Макрос: Поиск совпадений, перенос совпавшей ячейки и рядом с ней стоящей ячейки
Доброго времени суток ! Прошу помощи с написанием макроса, очень очень очень выручите! Задача такова 1 - есть книга из 3х листов ( 1...

7
64 / 64 / 16
Регистрация: 07.05.2016
Сообщений: 304
26.08.2016, 12:27
Gubila_2000, и так перебирать каждый раз все строки?) ну да ладно из вот неумных вариантов, не удалять ячейки а обнулять, т.е
А 1
А 2
3
А 4
потом запрос ищем пустые если есть записываем в них, если нет то пишем в конец.
наверняка способ есть красивее и изящней, но у вас вообще некуда не годится_)
0
 Аватар для Sasha
4956 / 2420 / 531
Регистрация: 05.06.2008
Сообщений: 7,518
Записей в блоге: 3
26.08.2016, 22:47
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
Если в хранилище нет пропусков
А что у тебя в базе могут быть пропуски?
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
27.08.2016, 11:51  [ТС]
Sasha, я просто удаляю всю строку, если удаляю обьект привязанный к этой ячейке. Зачем мне хранить информацию, если в ней ничего не лежит? Поэтому при размещении нового обьекта я хочу создать ближайшую свободную ячейку, что почему-то не получается. То есть до 4 все нормально идет, а вот 5я почему-то приссваивает номер 4.
0
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
28.08.2016, 12:00  [ТС]
Еще такой вопрос. Как я уже писал, у меня координаты ячейки такие: nstorage (shortstring) и nstack(numeric). Как мне в запросе создать единое поле nstorage+nstack, при том что они совершенно разных типов?
0
11 / 11 / 4
Регистрация: 15.04.2015
Сообщений: 67
31.08.2016, 16:37
Gubila_2000, builder не под рукой, поэтому могу ошибиться. Проверьте
C++
1
ADOQuery1->FieldCount
, если не ошибаюсь после добавления данных этот вызов будет "считывать" старые данные.
1
 Аватар для Gubila_2000
7 / 3 / 3
Регистрация: 07.11.2014
Сообщений: 218
Записей в блоге: 1
03.09.2016, 10:04  [ТС]
SeaMonkey, единственный боле мене полезный ответ. Однако пока я так и не понял как мне лучше организовать эту процедуру
0
480 / 393 / 113
Регистрация: 24.04.2012
Сообщений: 1,632
Записей в блоге: 3
05.09.2016, 10:08
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
ADOQuery1->FieldCount
А причем здесь поля (Field)? Когда нужно использовать количество записей.
А лучше такие дела делать на стороне сервера.
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
Как мне в запросе создать единое поле nstorage+nstack, при том что они совершенно разных типов?
SQL
1
SELECT nstorage || nstack FROM stack
Добавлено через 4 минуты
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
пронумированные по-порядку ячейки nstack
заранее неизвестно кол-во??
Цитата Сообщение от Gubila_2000 Посмотреть сообщение
Зачем мне хранить информацию, если в ней ничего не лежит?
А зачем удалять инфу о ячейках даже если в них ничего не лежит?? Ячейка есть - есть, а лежит в ней что или не лежит это другой вопрос
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
05.09.2016, 10:08
Помогаю со студенческими работами здесь

Поиск алгоритма перемещения стопки карт в "Свободной ячейке"
Добрый день, друзья. Споткнулись на поиске алгоритма определения последовательности перемещения карт при перекладывании стопки в пасьянсе...

Нужно организовать поиск в Exchange'вом хранилище с учетом прав доступа
Люди, наверняка кто-то реализовывал следующее: нужно организовать поиск в Exchange'вом хранилище с учетом прав доступа (найти папки, в...

Поиск на 1 листе текста со 2-й ячейки 6 столбца со сравнением на 2-листе со 2-й ячейки 6 столбца
Прошу помочь Макрос поиска на 1-ом листе текста со 2-й ячейки 6 столбца с сравнением его на 2-листе со 2-й ячейки и далее 6 столбца и если...

Поиск непустой ячейки
Помогите сделать следующее: в столбце К нужно высчитать разницу между значениями столбцов B-I: от второго значения в столбце отнимать...

Поиск по содержимому ячейки
Помогите, что я делаю не так!? В ячейке А1 лист(поиск)- будет вводиться фамилия и нужно найти в листе (сбор данных), данную фамилию и...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru