Russian Qt Forum
Май 18, 2012, 19:19
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Базы данных
(Модератор:
Sergeich
) >
Attempt to write to read-only database
Страниц: [
1
]
2
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Attempt to write to read-only database (Прочитано 1294 раз)
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Attempt to write to read-only database
«
:
Октябрь 12, 2011, 21:35 »
Всем привет. Вчера впервые решил опробывать работу своих программ в Windows 7 64 bit.
Сборку делал на Win XP 32 bit. Все безупречно работает. Но вот почему то в новой версии виндоуз выдает ошибку при попытке записи данных в БД SQlite3: Attempt to write to read-only database.
В чем может быть дело ? Может быть кто-нибудь уже сталкивался ?
Записан
Пантер
Administrator
Джедай : наставник для всех
Online
Сообщений: 4122
Жаждущий знаний
Re: Attempt to write to read-only database
«
Ответ #1 :
Октябрь 12, 2011, 21:36 »
Права есть на запись?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
BRE
Джедай : наставник для всех
Offline
Сообщений: 3231
Re: Attempt to write to read-only database
«
Ответ #2 :
Октябрь 12, 2011, 21:37 »
Цитата: Yuriy от Октябрь 12, 2011, 21:35
В чем может быть дело ? Может быть кто-нибудь уже сталкивался ?
В правах к самому файлу или папке где он лежит. Ты его не в Program Files положил?
Записан
Каждое препятствие – это возможность
.
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Re: Attempt to write to read-only database
«
Ответ #3 :
Октябрь 12, 2011, 21:40 »
Я честно говоря не знаю. Документы сохраняются и в папку программы и там откуда считываю БД, но вот например на C: не сохраняются. Думаю это такой трюк Win 7. Пользоваться этой поделкой от M$ не собираюсь, но вдруг кто-нибудь будет использовать мое приложение под Win7, нужно быть уверенным, что все работает.
у меня два exe-шника и оба лежат C:\Visual3D\bin
Записан
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Re: Attempt to write to read-only database
«
Ответ #4 :
Октябрь 12, 2011, 21:43 »
И в эту папку пишутся файлы, конфиги, и читаются без проблем из под программы. Без проблем создаются файлы из под моей программы с помощью fopen, fflush и fclose. Только не в корневой папке C: А БД почему-то не сохраняются. Вообще я использую БД SQlite3 и не задаю userName, password, port и hostName при открытии БД. Может быть дело в этом
«
Последнее редактирование: Октябрь 12, 2011, 21:51 от Yuriy
»
Записан
Пантер
Administrator
Джедай : наставник для всех
Online
Сообщений: 4122
Жаждущий знаний
Re: Attempt to write to read-only database
«
Ответ #5 :
Октябрь 12, 2011, 22:01 »
Покажи как создаешь подключение.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
BRE
Джедай : наставник для всех
Offline
Сообщений: 3231
Re: Attempt to write to read-only database
«
Ответ #6 :
Октябрь 12, 2011, 22:03 »
[off] Микрософт наконец дошел до того, что права доступа все таки нужны, добавили их в win7 (ну через жопу конечно сделали), а пользователи не поняв что это все для их блага, либо сразу отрубают UAC, либо по традиции работают с админскими правами.
Сам недавно столкнулся, пришлось проработать вопрос...
Еще понравилось решение вопроса с повышением привилегий программ-установщиков. Кто-то скажет нужен специальный файл манифест, где все это будет описано, но есть способ проще. Используется специальный эвристический алгоритм, который анализирует имя запускаемого файла и если там есть что-то типа setup, install или чего-то подобного, до венда без всяких манифестов запросит пароль и поднимет привилегии этому процессу.
[/off]
Записан
Каждое препятствие – это возможность
.
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Re: Attempt to write to read-only database
«
Ответ #7 :
Октябрь 12, 2011, 22:06 »
В одной статические функции, а в первой (потому как реже используются БД) обычным классом:
Добавляю соединение:
Код:
void readconstants::openDB(const int &Type)
{
QSqlDatabase db;
switch (Type)
{
case 0:
db = QSqlDatabase::addDatabase("QSQLITE","myConstConnect");
break;
case 1:
db = QSqlDatabase::addDatabase("QSQLITE","myRoomConnect");
break;
case 2:
......
Здесь работаю с БД разными функциями
Код:
void writedb::writePanelsState(const QString &fileName,const QByteArray &geo_data,const QByteArray &layout_data)
{
QSqlDatabase db = QSqlDatabase::database("mySettingsConnect",false);
db.setDatabaseName(fileName);
if (!db.open())
{
QMessageBox::warning(0, QString::fromUtf8("Ошибка"), QString::fromUtf8("Ошибка при подключении к базе данных %1.").arg(fileName));
return;
}
db.transaction();
QSqlQuery query(db);
query.exec("DELETE FROM PanelsData;");
query.prepare("INSERT INTO PanelsData (LayoutData, GeoData) "
"VALUES (:layout, :geo)");
query.bindValue(":layout", layout_data);
query.bindValue(":geo", geo_data);
if (!query.exec())
QMessageBox::warning(0, QString::fromUtf8("Ошибка"), QString::fromUtf8("Не смогли записать информацию о панелях."));
db.commit();
//if (db.isOpen()) db.close(); memory leak - закрываю с помощью RemoveDB
}
Убираю соединение:
Код:
void readconstants::closeDB(const int &Type)
{
switch (Type)
{
case 0:
QSqlDatabase::removeDatabase("myConstConnect");
break;
case 1:
QSqlDatabase::removeDatabase("myRoomConnect");
break;
case 2:
QSqlDatabase::removeDatabase("mySettingsConnect");
break;
case 3:
QSqlDatabase::removeDatabase("myBaseMaterialConnect");
break;
Записан
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Re: Attempt to write to read-only database
«
Ответ #8 :
Октябрь 12, 2011, 22:10 »
Цитата: BRE от Октябрь 12, 2011, 22:03
[off] Микрософт наконец дошел до того, что права доступа все таки нужны, добавили их в win7 (ну через жопу конечно сделали), а пользователи не поняв что это все для их блага, либо сразу отрубают UAC, либо по традиции работают с админскими правами.
Сам недавно столкнулся, пришлось проработать вопрос...
Еще понравилось решение вопроса с повышением привилегий программ-установщиков. Кто-то скажет нужен специальный файл манифест, где все это будет описано, но есть способ проще. Используется специальный эвристический алгоритм, который анализирует имя запускаемого файла и если там есть что-то типа setup, install или чего-то подобного, до венда без всяких манифестов запросит пароль и поднимет привилегии этому процессу.
[/off]
Ну и хрень, как бы тогда права 0666 установить с помощью InnoSetup скрипта на установленную папку.
И еще не смог WiFi подключить под эту ОС, поэтому в Debian или Win XP могу только выйти на форум, потом уже перезагружать в Win 7 и пробывать... Вообщем бред из бреда.
Записан
Пантер
Administrator
Джедай : наставник для всех
Online
Сообщений: 4122
Жаждущий знаний
Re: Attempt to write to read-only database
«
Ответ #9 :
Октябрь 12, 2011, 22:12 »
В InnoSetup это делается очень легко, на сколько я помню. Поищи в хэлпе. А еще лучше, создавай БД в ApplicationData.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Re: Attempt to write to read-only database
«
Ответ #10 :
Октябрь 12, 2011, 22:28 »
погуглил немного, а то ведь в Win 7 инета не будет
http://sqlite.phxsoftware.com/forums/t/1163.aspx
Решение следующее:
This a reccurrent error in Vista and 7. The user must set the administrator privileges to the aplication in the properties. Otherwise the error appears.
И всего - навсего нужно будет объяснить конечным пользователям это же. Создать какую-нибудь политику и куда-нибудь ее всунуть! Блин, как же это все напрягает если честно. Эти sheduled task'и пачками, которые невозможно отключить, это шерстение на жестком диске, вся эта "умная" Windows'овская обработка в тихушку ! Блин это не система а вирус
Записан
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Re: Attempt to write to read-only database
«
Ответ #11 :
Октябрь 12, 2011, 22:37 »
А вот и решение по запуску программ с повышенными привелегиями, которое я теперь заучу и буду диктовать по телефону своим клиентам:
1) Запускаете планировщик заданий (Пуск ---> Все программы ---> Стандартные ---> Служебные ---> Планировщик заданий)
2) Нажимаете "Создать задачу"
3) Указываете Имя для новой задачи и ставите флажок "Выполнять с наивысшими правами"
4) Переходите на вкладку Действия, нажимаете "Создать", в следующем окне нажимаем "Обзор"
5) Указываете путь к нужному приложению и нажимаете "Открыть"
6) Нажимаете "ОК", затем снова "ОК"
7) Создайте ярлык на рабочем столе ( Нажмите правую кнопку мыши, выберете "Создать" ---> "Ярлык")
В поле Расположение объекта введите:
schtasks /run /tn mytask_admin
где mytask_admin - имя созданной нами задачи. Если в имеми содержаться робелы, обязательно укажите его в кавычках.
9) Введите имя ярлыка и нажмите Готово
И кто мне скажет, что такой подход - не КОСТЫЛЬ ? И после этого еще кто-то говорит что Linux для "красноглазых"
Записан
Пантер
Administrator
Джедай : наставник для всех
Online
Сообщений: 4122
Жаждущий знаний
Re: Attempt to write to read-only database
«
Ответ #12 :
Октябрь 12, 2011, 22:40 »
Что-то больно все сложно. Уверен, что это единственное решение?
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
Yuriy
Чайник
Offline
Сообщений: 76
OCC development
Re: Attempt to write to read-only database
«
Ответ #13 :
Октябрь 12, 2011, 22:45 »
Пантер, спасибо за Ваше участие в обсуждении проблемы.
Я немного расстроился. Нужно было модели доделывать, а я два дня с этим Win 7 занимаюсь вместо основной работы. Ну а как же еще. Либо сторонние приложения использовать типа Elevated Shortcut, либо демон писать и его в службы засовывать, либо вот так по телефону клиентам толдычить. Возможность переноса папки с программой в этом случае проблематичная. Я всегда делал программы Portable, которые имеют свои настройки и содержатся в пределах одной папки, а теперь придется вот такие трюки выполнять и как только клиент переустановит Windows снова ему перезаряжать программу.
А может быть какой-нибудь exe-шничек сейчас сварганю, типа FirstConfig.exe чтобы он вшивал программу в систему, но уж очень я не люблю таких вещей.
Записан
Пантер
Administrator
Джедай : наставник для всех
Online
Сообщений: 4122
Жаждущий знаний
Re: Attempt to write to read-only database
«
Ответ #14 :
Октябрь 12, 2011, 22:47 »
Мне все равно кажется, что есть простое решение. К сожалению, сейчас под рукой нет винды, но завтра на работе постараюсь глянуть, если время будет.
Записан
1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
С уважением.
Пантер.
Страниц: [
1
]
2
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
=> Архив
===> Программирование
=====> Python
===> Веб программирование
=====> PHP, PERL, CGI
Загружается...