Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 02.11.2018
Сообщений: 3

Проблемы с записью в grid из sqlite (нумерация ключевого поля)

24.07.2019, 08:26. Показов 1434. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Помогите начинающему в Python. Есть таблица SQlite:
SQL
1
2
3
CREATE TABLE [fmain](
  [NUMBER] INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, 
  [fam] CHAR(30))
Записываю в grid:
Python
1
2
3
4
5
6
7
     logins = self.cursor.execute('SELECT * from fmain')
        for row in logins:
            row_num = row[0]
            cells = row[1:]
            for i in range(0,len(cells)):
                if cells[i] != None and cells[i] != "null":
                    self.grid.SetCellValue(row_num-1, i, str(cells[i]))
Получаю ошибку, связанную нумерацией ключевого поля number.
После предыдущих удалений нумерация ключевого поля начинается со 114 и далее с пропусками до 1170.
Если же подключить другую базу с нумерацией 1,2,3, то все проходит, но когда добавишь запись и в number автоматически запишется 10 (после ряда удалений), то получишь пустые ряды с 4 по 9.
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
24.07.2019, 08:26
Ответы с готовыми решениями:

Нумерация ключевого поля
Ключевое поле называется idCount несколько раз удалял и добавлял строки, нумерация сбилась, то есть теперь не по порядку, как сделать так...

Заполнение базы данных с определенного номера поля ключевого поля
Добрый день, написан код для заполнения таблицы на c#, но при запуске выдает ошибку, что не может создать ключевое поле, которое уже...

Sqlite + grid
Здравствуйте! не могу сообразить как подключать и работать с бд. Создал бд в sqllitestudio. Кинул на форму grid, fdconnection. А как их...

3
115 / 23 / 3
Регистрация: 11.09.2017
Сообщений: 141
Записей в блоге: 4
24.07.2019, 08:52
bfarid, если мне не изменяет память, то вы только посылаете запрос EXECUTE, но самих данных я не нашел, где вы их получаете. Чтобы получить данные, я раньше использовал что-то вроде
Python
1
res = logins.fetchall()
0
0 / 0 / 0
Регистрация: 02.11.2018
Сообщений: 3
24.07.2019, 10:05  [ТС]
Если поставить logins.fetchall() после logins = self.cursor.execute('SELECT * from fmain'), то будет пустая запись.
БД читает и показывает правильно, если нумерация по ключевому полю 1,2,3.
Проблема где-то здесь (не знаю особенности wx.grid):
Python
1
2
3
4
5
row_num = row[0]
cells = row[1:]
      for i in range(0,len(cells)):
           if cells[i] != None and cells[i] != "null":
                self.grid.SetCellValue(row_num-1, i, str(cells[i]))
Почему то, считывает не последовательно записи, а берет число в ключевом поле пытается перейти к этой строке в grid,
а grid задан ограниченным.
Отладчик пишет:
wx._core.wxAssertionError: C++ assertion "(row >= 0 && row < GetNumberRows()) && (col >= 0 && col < GetNumberCols())" failed at ..\..\src\generic\grid.cpp(1307) in wxGridStringTable::SetValue(): invalid row or column index in wxGridStringTable

Добавлено через 6 минут
Сам grid задан так:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
        db = sqlite3.connect("test.sqlite")
        self.db = db
        self.cursor = self.db.cursor()
 
        vbox = wx.BoxSizer(wx.VERTICAL)
        self.grid = wx.grid.Grid(panel)
        rows = self.cursor.execute('SELECT Count(*) FROM fmain')
        val = rows.fetchone()
        self.db_exists = val[0]
        self.grid.CreateGrid(15,35) #Ряды, столбцы
        self.grid.Scroll(0,0)
 
        vbox.Add(self.grid)
Добавлено через 53 минуты
Вроде разобрался:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 vbox = wx.BoxSizer(wx.VERTICAL)
        self.grid = wx.grid.Grid(panel)
        rows = self.cursor.execute('SELECT Count(*) FROM fmain')
        val = rows.fetchone()
        self.db_exists = val[0]
        self.grid.CreateGrid(val[0],34) #указал число рядов, соответствующее таблице 
        self.grid.Scroll(0,0)
 
       # Данные
        logins = self.cursor.execute('SELECT * from fmain')
        ri = 0  
        for row in logins:
            row_num = row[0]
            ri = ri+1
            cells = row[1:]
            for i in range(0,len(cells)):
                if cells[i] != None and cells[i] != "null":
                    self.grid.SetCellValue(ri-1, i, str(cells[i])) #поставил ri вместо row_num
        self.Show()
        self.db.commit()
0
115 / 23 / 3
Регистрация: 11.09.2017
Сообщений: 141
Записей в блоге: 4
24.07.2019, 11:20
Цитата Сообщение от bfarid Посмотреть сообщение
Проблема где-то здесь (не знаю особенности wx.grid):
ниже даже читать не стал, не люблю читать столько текста.
Пришлите скрин ошибки
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
24.07.2019, 11:20
Помогаю со студенческими работами здесь

Обнуление ключевого поля
Здравствуйте. Начал изучать программирование баз данных и из-за этого постоянно сохранял новые строки в базу. Потом обнаружил, что даже...

Тип ключевого поля
Всем привет! Есть 3 таблицы. 1-ая является главной по отношению ко 2-ой, 2-ая является главной по отношению к 3-ей. Если ключевые поля...

Фиксация ключевого поля
Подскажите, как сделать? Есть издание, в нем сборник статей разных авторов. Делаю т.н. справочный аппарат. В БД несколько таблиц,...

Создание ключевого поля
Добрый день! есть два файла связанные между собой но в одном файле (в связанном, файл mde) основное поле не ключевое, и возможности...

Счетчик ключевого поля
Подскажите кто знает, при удалении ключевых записей, как сделать автообновление, чтобы ключи шли по порядку? к примеру на картинке...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Новые блоги и статьи
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru