Просмотр полной версии : Выборка из базы SQLite
Vos-svar
17.04.2025, 17:20
Добрый вечер. Подскажите пожалуйста, что я делаю не так.
На ПЛК200 лежит файл базы SQLite по вот такому пути:/home/root/CODESYS/otchet.db
Описание файла базы скрин 1 и 2.
83233 83234
Суть проблемы:
В терминальном доступе к ПЛК, ввожу команду: sqlite3 /home/root/CODESYS/otchet.db "SELECT * FROM otchet"
В ответ получаю выборку из базы.
Если попытаюсь отсортировать по 2 колонке, ввожу команду: sqlite3 /home/root/CODESYS/otchet.db "SELECT * FROM otchet WHERE "2"="OST""
В ответ получаю: Error: no such column: OST
скрин 3
83235
МихаилГл
17.04.2025, 17:27
Может чтото типа: otchet.2 = ...
PS А для текста не одинарные кавычки нужны?
Мысль от меня. Я могу быть не прав. Но попробую (так было в MySQL)
Обычно имена таблиц и колонок задаются в обратных апострофах.
А значения задаются в прямых апострофах.
А тут вообще вложенные кавычки: запрос в кавычках, и значения в нём в кавычках.
Кавычки экранируются через слеш.
То есть, записать надо так:
sqlite3 /home/root/CODESYS/otchet.db "SELECT * FROM `otchet` WHERE `2` = 'OST'"
А что там на первой картинке?
CREATE TABLE "otchet" ("id" INTEGER ...
А дальше?
из базы.
Если попытаюсь отсортировать по 2 колонке, ввожу команду: sqlite3 /home/root/CODESYS/otchet.db "SELECT * FROM otchet WHERE "2"="OST""
83235
И где тут сортировка? Сортировка задаётся кляузой order by, а не where. Это раз. Вместо номера так-то положено имя столбца указывать. Это два.
Vos-svar
17.04.2025, 22:56
А что там на первой картинке?
CREATE TABLE "otchet" ("id" INTEGER ...
А дальше?
На первой картинке дано описание структуры таблицы.
1-й столбец с именем "id" тип integer
2-й столбец с именем "1" тип text
и так далее до
24-й столбец с именем "23" тип text
Vos-svar
17.04.2025, 23:14
Вот результат проверки разных вариантов написания
83243
Может быть есть ограничения на названия столбцов в таблице? Нельзя например именовать цифрами?
МихаилГл
18.04.2025, 02:36
Вот результат проверки разных вариантов написания
83243
Может быть есть ограничения на названия столбцов в таблице? Нельзя например именовать цифрами?
Только вариант otchet.2 = не попробовали. В MSSQL, например, надо перед любым запросом либо делать активной саму базу, либо обращаться к столбцам базы через точку. А насчет наименования столбцов цифрами даже не знаю, у вас же создание таблицы проканало, возможно это не запрещено. И только одинарные кавычки не дают никаких сообщений об ошибках. Мельком глянул как запросы where в mysql делаются, но чего то хорошего описания так и не нашел, кроме использования ' для текста.
PS Кстати да, двойные "", как говорили выше, могут неправильно пониматься. Это надо не в запросах к базе искать как писать, а к самой конструкции для команды sqlite3
PS2 Почему на select '2' from... вылезли двойки, а не 1, 2, 3...
И еще для ознакомления Ключевые слова в SQLite (https://www.rldp.ru/sqlite/sqlite344/lang_keywords.html)
Похоже что либо [2] = "OST", либо `2` = "OST"
Одинарная или двойная ковычка не подходят.
sqlite3 /home/root/CODESYS/otchet.db "SELECT * FROM `otchet` WHERE `2` = 'OST'"
Наоборот.
SELECT * FROM otchet WHERE "2" = 'OST'
otchet не надо квотить никак
Может быть есть ограничения на названия столбцов в таблице? Нельзя например именовать цифрами?
Вообще-то есть. Имена должны начинаться с букв и не быть зарезервированными словами. Но, если очень хочется усложнить себе жизнь и потом позадавать глупые вопросы, то можно заключить такие имена в двойные кавычки.
PS2 Почему на select '2' from... вылезли двойки, а не 1, 2, 3...
Что просили, то и получили. Попросили константу в поле выборки - получили константу. Если хотели запросить значения колонки "2", то и нужно было бы писать
select "2" from...
Vos-svar
18.04.2025, 08:23
Вообще-то есть. Имена должны начинаться с букв и не быть зарезервированными словами. Но, если очень хочется усложнить себе жизнь и потом позадавать глупые вопросы, то можно заключить такие имена в двойные кавычки.
Какая то странная у вас манера общаться в оскорбительной форме.
Vos-svar
18.04.2025, 08:29
Проблема решилась переименовыванием нужных мне столбцов. Добавил к цифрам с левой стороны латинскую букву.
Что странно, я проверял правильность написания запросов в программе DB Browser for SQLite. В ней всё работало как задумывалось, с цифровыми именами столбцов.
Какая то странная у вас манера общаться в оскорбительной форме.
А в каком месте я Вас оскорбил? Или Вы считаете, что вопросы очень умные, если Вы даже с базовыми правилами, понятиями и синтаксисом не ознакомились?
Проблема решилась переименовыванием нужных мне столбцов. Добавил к цифрам с левой стороны латинскую букву.
Что странно, я проверял правильность написания запросов в программе DB Browser for SQLite. В ней всё работало как задумывалось, с цифровыми именами столбцов.
А в нём нельзя посмотреть запрос в формате SQL?
Vos-svar
18.04.2025, 09:59
Вот скрин с программы
83253
Причем не важно в одинарных или двойных кавычках OST
Наоборот.
SELECT * FROM otchet WHERE "2" = 'OST'
otchet не надо квотить никак
Спрашиваю, чтобы научиться: это в SQLite так? А то в MySQL квотится всё.
Причем не важно в одинарных или двойных кавычках OST
Это не важно для DB Browser, наверное. А в sqlite3 Вы с двойными кавычками получали правильный ответ от сервера, что столбца с таким именем не существует. Я ни капли не удивлюсь, если этот самый DB Browser на лету подменяет двойные кавычки на правильные.
Если в этом самом SQLite есть системные представления, где можно посмотреть пользовательский запросы, то это утверждение легко проверить.
Спрашиваю, чтобы научиться: это в SQLite так? А то в MySQL квотится всё.
Понятия не имею - я в Oracle проверял. ;) А с SQLite и MySQL не сталкивался. А что в MySQL квотится всё - для меня лично странно.
МихаилГл
18.04.2025, 12:02
Что просили, то и получили. Попросили константу в поле выборки - получили константу. Если хотели запросить значения колонки "2", то и нужно было бы писать
select "2" from...
Ну сразу бросилось в глаза, что все двойки из всей базы начал дергать, вместо второго столбца.
И вообще в маразм впадаю, похоже. Зачем то полез в mysql, когда вопрос про sqlite...
........Что странно, я проверял правильность написания запросов в программе DB Browser for SQLite. В ней всё работало как задумывалось, с цифровыми именами столбцов.
похожая тема
https://www.rusavtomatika.com/forum/viewtopic.php?f=1&t=999
Тупо в панеле движок БД старый, то что работает в DB Browser, не пашет на панеле. С ПЛК скорее всего та же история.
---------
Как у вас рука поднялась сделать имена столбцов не текстом, а цифрой?
CREATE TABLE "Products" ("Name" TEXT,"Date" TEXT,"Metal_mm" INT,"Correction" INT,"Oper_1" INT,"Oper_2" INT,"Oper_3" INT,"Oper_4" INT,"Oper_5" INT,"Oper_6" INT,"Oper_7" INT,"Oper_8" INT,"Oper_9" INT,"Oper_10" INT,"Oper_11" INT,"Oper_12" INT,"Oper_13" INT,"Oper_14" INT,"Oper_15" INT,"Oper_16" INT,"Oper_17" INT,"Oper_18" INT,"Oper_19" INT,"Oper_20" INT,"Angle_1" INT,"Angle_2" INT,"Angle_3" INT,"Angle_4" INT,"Angle_5" INT,"Angle_6" INT,"Angle_7" INT,"Angle_8" INT,"Angle_9" INT,"Angle_10" INT,"Angle_11" INT,"Angle_12" INT,"Angle_13" INT,"Angle_14" INT,"Angle_15" INT,"Angle_16" INT,"Angle_17" INT,"Angle_18" INT,"Angle_19" INT,"Angle_20" INT,"Width_1" INT,"Width_2" INT,"Width_3" INT,"Width_4" INT,"Width_5" INT,"Width_6" INT,"Width_7" INT,"Width_8" INT,"Width_9" INT,"Width_10" INT,"Width_11" INT,"Width_12" INT,"Width_13" INT,"Width_14" INT,"Width_15" INT,"Width_16" INT,"Width_17" INT,"Width_18" INT,"Width_19" INT,"Width_20" INT,"Pos1_1" INT,"Pos1_2" INT,"Pos1_3" INT,"Pos1_4" INT,"Pos1_5" INT,"Pos1_6" INT,"Pos1_7" INT,"Pos1_8" INT,"Pos1_9" INT,"Pos1_10" INT,"Pos1_11" INT,"Pos1_12" INT,"Pos1_13" INT,"Pos1_14" INT,"Pos1_15" INT,"Pos1_16" INT,"Pos1_17" INT,"Pos1_18" INT,"Pos1_19" INT,"Pos1_20" INT,"Pos2_1" INT,"Pos2_2" INT,"Pos2_3" INT,"Pos2_4" INT,"Pos2_5" INT,"Pos2_6" INT,"Pos2_7" INT,"Pos2_8" INT,"Pos2_9" INT,"Pos2_10" INT,"Pos2_11" INT,"Pos2_12" INT,"Pos2_13" INT,"Pos2_14" INT,"Pos2_15" INT,"Pos2_16" INT,"Pos2_17" INT,"Pos2_18" INT,"Pos2_19" INT,"Pos2_20" INT)
Решил проверить:
83274
Сработало:
- с двойными кавычками;
- с квадратными скобками;
- с апострофами;
всё остальное не сработало!!!
Решил проверить:
83274
Сработало:
- с двойными кавычками;
- с квадратными скобками;
- с апострофами;
всё остальное не сработало!!!
Не это Вы ещё сперва в базу заходите, а потом уже команды выполняете, ТС же не стал заморачиваться и из командной строки Линукса пытается работать
Vos-svar
19.04.2025, 22:50
Я писал свой код основываясь на примере видеоролика "50. Работа с СУБД SQLite" на ютубе канал "CodesysOneLove". Команда запроса формируется в моей программе и только потом передается в линукс на исполнение. Как сделать по другому я не знаю. Если у вас есть возможность, поделитесь мыслями какие еще есть варианты?
Vos-svar
19.04.2025, 23:03
похожая тема
https://www.rusavtomatika.com/forum/viewtopic.php?f=1&t=999
Тупо в панеле движок БД старый, то что работает в DB Browser, не пашет на панеле. С ПЛК скорее всего та же история.
---------
Как у вас рука поднялась сделать имена столбцов не текстом, а цифрой?
CREATE TABLE "Products" ("Name" TEXT,"Date" TEXT,"Metal_mm" INT,"Correction" INT,"Oper_1" INT,"Oper_2" INT,"Oper_3" INT,"Oper_4" INT,"Oper_5" INT,"Oper_6" INT,"Oper_7" INT,"Oper_8" INT,"Oper_9" INT,"Oper_10" INT,"Oper_11" INT,"Oper_12" INT,"Oper_13" INT,"Oper_14" INT,"Oper_15" INT,"Oper_16" INT,"Oper_17" INT,"Oper_18" INT,"Oper_19" INT,"Oper_20" INT,"Angle_1" INT,"Angle_2" INT,"Angle_3" INT,"Angle_4" INT,"Angle_5" INT,"Angle_6" INT,"Angle_7" INT,"Angle_8" INT,"Angle_9" INT,"Angle_10" INT,"Angle_11" INT,"Angle_12" INT,"Angle_13" INT,"Angle_14" INT,"Angle_15" INT,"Angle_16" INT,"Angle_17" INT,"Angle_18" INT,"Angle_19" INT,"Angle_20" INT,"Width_1" INT,"Width_2" INT,"Width_3" INT,"Width_4" INT,"Width_5" INT,"Width_6" INT,"Width_7" INT,"Width_8" INT,"Width_9" INT,"Width_10" INT,"Width_11" INT,"Width_12" INT,"Width_13" INT,"Width_14" INT,"Width_15" INT,"Width_16" INT,"Width_17" INT,"Width_18" INT,"Width_19" INT,"Width_20" INT,"Pos1_1" INT,"Pos1_2" INT,"Pos1_3" INT,"Pos1_4" INT,"Pos1_5" INT,"Pos1_6" INT,"Pos1_7" INT,"Pos1_8" INT,"Pos1_9" INT,"Pos1_10" INT,"Pos1_11" INT,"Pos1_12" INT,"Pos1_13" INT,"Pos1_14" INT,"Pos1_15" INT,"Pos1_16" INT,"Pos1_17" INT,"Pos1_18" INT,"Pos1_19" INT,"Pos1_20" INT,"Pos2_1" INT,"Pos2_2" INT,"Pos2_3" INT,"Pos2_4" INT,"Pos2_5" INT,"Pos2_6" INT,"Pos2_7" INT,"Pos2_8" INT,"Pos2_9" INT,"Pos2_10" INT,"Pos2_11" INT,"Pos2_12" INT,"Pos2_13" INT,"Pos2_14" INT,"Pos2_15" INT,"Pos2_16" INT,"Pos2_17" INT,"Pos2_18" INT,"Pos2_19" INT,"Pos2_20" INT)
Название столбцов цифрами сделал для более коротких запросов. Для добавления и изменения строк в таблице это не мешало, а вот выборка по таким столбцам стала не возможной.
Если у вас есть возможность, поделитесь мыслями какие еще есть варианты?
Вы ведь уже решили проблему, если остался файл который не выводит выборку на запрос, выкладывайте здесь
МихаилГл
20.04.2025, 07:26
У ТС проблема не с sqlite, а с работой с этой базой через codesys, не забывайте. Поэтому он с ней так и работает, проверяет запросы, которые воспринимает кодесис.
©Я так думаю...
У ТС проблема не с sqlite, а с работой с этой базой через codesys, не забывайте. Поэтому он с ней так и работает, проверяет запросы, которые воспринимает кодесис.
©Я так думаю...
где хоть один скрин из КДС?
таблица заполняется из КДС, полагаю по примеру из видео по работе с базой, с ней проблем нет. Прежде чем загружать в проект выборку из базы, нужно потренироваться в консоли, об этом здесь и шла пока речь, путаница с кавычками была и мешали те кто не разбирается
Другие варианты вместо консоли, вот 83287. И если таблица заранее не известна, помогает команда sqlite3 otchet.db ".schema"
Vos-svar
21.04.2025, 09:52
Доброго дня всем!
Файл тестовой базы во вложении.
Я понял вашу идею capzap,
Vos-svar
21.04.2025, 09:59
таблица заполняется из КДС, полагаю по примеру из видео по работе с базой, с ней проблем нет. Прежде чем загружать в проект выборку из базы, нужно потренироваться в консоли, об этом здесь и шла пока речь, путаница с кавычками была [/B]
Да всё так. При этом когда я отправлял запросы с выборкой из КДС и в ответ ничего не получал, полез в консоль выяснять почему ответа нет. Поэтому все скрины из консоли ПЛК.
Файл тестовой базы во вложении.
в самом начале темы был правильный ответ 83322
Доброе утро. ПЛК-200, нет связи с правой стороной входов-выходов, пишет "драйвер не найден". Единственное, что делал - привязывал в соотнесении булеву переменную на первый дискретный выход. Почему такое произошло и как это исправить?
8334983348
Евгений Кислов
23.04.2025, 09:44
Добрый день.
Судя по скриншоту - у вас версия таргет-файла в проекте не соответствует версии прошивки.
Напишите на support@owen.ru - посмотрим, в чем именно дело.
Powered by vBulletin® Version 4.2.3 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot