- Remove From My Forums
-
Question
-
Hi,
I am presently in the process of upgrading to VFP9 from 2.6. I am already using the Query wizard of VFP9 and it really helps a lot on the design process of a result files, the problem is that whenever i use the file in .dbf format to the program written in 2.6 i get a «not a database file» error message in 2.6, especially when i try to view the records… what could be wrong with VFP9.0? Please help, Thanks…
Yong
Answers
-
VFP 9 can’t read the file. Try recreating the file in VFP 9 first. Then go back to Fox 2.6 and open the table and copy to a comma delimited file ( copy to yourfile.txt type delimited ) . Now go back to VFP and open the new table, then append from the text file ( append from yourfile.txt type delimited ).
You will have some trouble jumping back and forth so just create copies in 9 and work with them.
-
Hai,
you cannot open VFP table (i.e. created in VFP) in foxpro for windows or foxpro for dos.
where as table created in foxpro dos or foxpro for windows can be opened in vfp.
once u open table created in fox on dos or fox on windows in VFP, then you cannot open the same in fox on dos or fox on windows.
the best option is to chek in VFP itself. or you can export to a text file. then in fox on dos or fox on windows you can import that text file into dbf and chek
-
VFP9 file formats are not readable by earlier versions.
To read a table created in VFP9 using FPW2.x copy it as type fox2x.
use myVFP9Table
copy to («c:MyPathmyTable») type fox2x
If you use views, you can read/write to fox2x tables w/o altering their structure. That lets the same tables to be used simultaneously by a fox2x and VFP9 application. In VFP9, fox2x type tables are also «free» tables (do not belong to a database container).
-
If table was created with «2.6» and you can not read it with «2.6» it seems you have a damaged table and you may try to fix it. If table was created with «VFP9.0» you can not read it with «2.6»; except for FOXBASE+ format.
#1
defonus
-
- Members
-
- 32 сообщений
Новый участник
Отправлено 31 октября 2013 — 10:00
Привет.
Есть база из мобильного приложения name.sqlite. Необходимо подключиться к этой базе и выполнить sql запрос.
Для подключения использую
Class.forName("org.sqlite.JDBC"); String dbURL = "jdbc:sqlite:/users/andrei_tsiarenia/Downloads/mobile2.sqlite"; Connection conn = DriverManager.getConnection(dbURL); if (conn != null) { Statement st = null; st = conn.createStatement(); ResultSet rs = null; rs = st.executeQuery("SELECT * FROM ZCRBRAND"); while (rs.next()) { System.out.print("Str1 " + rs.getString(6) //rs.getString("ZDISPLAYNAME") + " Str2 " + rs.getString(7)); } }
все валится на строке «rs = st.executeQuery(«SELECT * FROM ZCRBRAND»);» с ошибкой
java.sql.SQLException: [SQLITE_NOTADB] File opened that is not a database file (file is encrypted or is not a database) at org.sqlite.DB.newSQLException(DB.java:383) at org.sqlite.DB.newSQLException(DB.java:387) at org.sqlite.DB.throwex(DB.java:374) at org.sqlite.NestedDB.prepare(NestedDB.java:134) at org.sqlite.DB.prepare(DB.java:123) at org.sqlite.Stmt.execute(Stmt.java:113)
Подскажите в чем ошибка и как выполнить sql в этой sqlite?
-
0
- Наверх
#2
Petrov.Sergey
Petrov.Sergey
- ФИО:Petrov Sergey
- Город:МО, Лобня
Отправлено 31 октября 2013 — 12:51
Подскажите в чем ошибка и как выполнить sql в этой sqlite?
После гугления (а Вы пробовали гуглить?) и сопоставления с Вашей ошибкой
[SQLITE_NOTADB] File opened that is not a database file (file is encrypted or is not a database)
я понял, что файл БД должен иметь расширение *.db и быть файлом базы данных. Ваш файл mobile2.sqlite является файлом базы данных?
Пример из гугла:
Connection c = null; try { Class.forName("org.sqlite.JDBC"); c = DriverManager.getConnection("jdbc:sqlite:test.db"); } catch ( Exception e ) { System.err.println( e.getClass().getName() + ": " + e.getMessage() ); System.exit(0); }
В Вашем случае должно быть что-то вроде
String dbURL = "jdbc:sqlite:/users/andrei_tsiarenia/Downloads/mobile2.db";
-
0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).
- Наверх
#3
defonus
defonus
-
- Members
-
- 32 сообщений
Новый участник
Отправлено 31 октября 2013 — 13:00
Спасибо.
Да, гуглил. В нете, в основном примеры с файлами db, но попадались примеры и с моим расширеним(на ютубе)…пробовал убрать wal, добавить проперти — пока ничего не помогло (
Меня просто интересует получилось ли у кого-нибудь работать Именно с расширением .sqlite
-
0
- Наверх
#4
Vader
Отправлено 31 октября 2013 — 13:42
Расширение файла не имеет значения. Для начала попробуйте открыть базу, каким-нибудь sqlite менеджером (например, http://sqliteman.com/) и убедитесь что она не бита и не зашифрована.
String dbURL = "jdbc:sqlite:/users/andrei_tsiarenia/Downloads/mobile2.sqlite";
Я не знаю, как правильно работать с sqlite в Java, но разве здесь не должен быть полный путь к базе? Что-то вроде jdbc:sqlite:c:/users/andrei_tsiarenia/Downloads/mobile2.sqlite
-
0
- Наверх
#5
Petrov.Sergey
Petrov.Sergey
- ФИО:Petrov Sergey
- Город:МО, Лобня
Отправлено 31 октября 2013 — 14:16
Расширение файла не имеет значения. Для начала попробуйте открыть базу, каким-нибудь sqlite менеджером (например, http://sqliteman.com/) и убедитесь что она не бита и не зашифрована.
String dbURL = "jdbc:sqlite:/users/andrei_tsiarenia/Downloads/mobile2.sqlite";Я не знаю, как правильно работать с sqlite в Java, но разве здесь не должен быть полный путь к базе? Что-то вроде jdbc:sqlite:c:/users/andrei_tsiarenia/Downloads/mobile2.sqlite
Зависит от оси.
В винде нужно указывать диск.
В линуксах и андроиде полный путь начинается со слэша (/opt/ftpsite/…).
Так что в этом плане топикстартер указал корректно.
Плюс иначе ошибка жавы была бы FileNotFoundException (не могу найти файл). А жава нашла файл, но не смогла прочитать (шифровка или не БД)
-
0
Форум читаю набегами. По возникшим вопросам можно в скайп (в профиле).
- Наверх
#6
defonus
defonus
-
- Members
-
- 32 сообщений
Новый участник
Отправлено 31 октября 2013 — 15:07
Менеджерами, плагином для ФФ открывается — без проблем … без паролей и т.д. SQL запросы выполняются … а вот из явы — ошибка.
з.ы. либа ля работы с sql-lite — есть
<dependency> <groupId>org.xerial</groupId> <artifactId>sqlite-jdbc</artifactId> <version>3.7.2</version> </dependency>
-
0
- Наверх
#7
Vader
Отправлено 31 октября 2013 — 16:33
Зависит от оси.
В винде нужно указывать диск.
В линуксах и андроиде полный путь начинается со слэша (/opt/ftpsite/…).
Ну, это я понимаю. Просто указанный путь уж очень напоминает виндовый путь к %userprofile%, только без диска. В линуксе, я бы ждал увидеть что-то вроде /home/blablabla
defonus, вы на винде или на никсах все это проделываете?
-
0
- Наверх
#8
defonus
defonus
-
- Members
-
- 32 сообщений
Новый участник
Отправлено 31 октября 2013 — 16:46
Зависит от оси.
В винде нужно указывать диск.
В линуксах и андроиде полный путь начинается со слэша (/opt/ftpsite/…).Ну, это я понимаю. Просто указанный путь уж очень напоминает виндовый путь к %userprofile%, только без диска. В линуксе, я бы ждал увидеть что-то вроде /home/blablabla
defonus, вы на винде или на никсах все это проделываете?
Mac OS
-
0
- Наверх
#9
Vader
Отправлено 31 октября 2013 — 16:59
Mac OS
Тогда можете проигнорировать мой предыдущий комментарий
Кстати, это не ваш случай http://stackoverflow…12813850/735893 ?
-
0
- Наверх
#10
defonus
defonus
-
- Members
-
- 32 сообщений
Новый участник
Отправлено 01 ноября 2013 — 07:57
Mac OS
Тогда можете проигнорировать мой предыдущий комментарий
![]()
Кстати, это не ваш случай http://stackoverflow…12813850/735893 ?
хм на компе установлено SQLite version 3.7.12 — в коде джарка 3.7.2 — а есть разница в этих версиях,? (я видел, что в «стэке» это разрезорвило проблему — я просто не знаю ка кобновить версию sqlite на маке — погуглю и попробую )
спасибо
-
0
- Наверх
#11
defonus
defonus
-
- Members
-
- 32 сообщений
Новый участник
Отправлено 01 ноября 2013 — 13:50
Все решилось заменой драйвера — это ошибка в 3.7.2 заюзал 3.7.15 с https://bitbucket.or…-jdbc/downloads
-
0
- Наверх
Я работаю над приложением Windows .net 2.0 с базой данных sqlite, моя строка подключения остается в приложении.config like
<connectionStrings>
<add name="SQLiteDB"
connectionString="Data Source=|DataDirectory|database.s3db;version=3;password=mypassword;"
providerName="System.Data.Sqlite"/>
</connectionStrings>
в строке подключения я определил пароль как «mypassword» если я удалю этот пароль, все работает хорошо, но когда я использую предложение password, это дает мне ошибку в подключении.открыть() синтаксис
File opened that is not a database file
file is encrypted or is not a database
Я искал в сети и нашел какую-то проблему с версией, но я использую версию 3 только так, как я сказал в строке подключения я также пробовал удалить «version=3», но проблема остается той же.
Я делаю это в первый раз, каково решение этого?
2 ответов
когда вы указываете пароль в строке подключения, и база данных уже существует, SQLite предполагает, что база данных зашифрована и попытается расшифровать ее с помощью указанного пароля. Если вы еще не установили пароль в базе данных, это приведет к ошибке «файл зашифрован», потому что предоставленный пароль нельзя использовать для расшифровки незашифрованной базы данных.
вы можете либо удалить базу данных, и SQLite создаст новую зашифрованную базу данных, используя пароль в строка подключения. Или вы можете зашифровать существующую базу данных с помощью ChangePassword()
способ:
// Opens an unencrypted database
SQLiteConnection cnn = new SQLiteConnection("Data Source=c:test.db3");
cnn.Open();
// Encrypts the database. The connection remains valid and usable afterwards.
cnn.ChangePassword("mypassword");
ссылки: шифрование, расшифровка и присоединение к зашифрованным базам данных
ответ 2Toad в основном правильный, но я хотел добавить свой собственный, потому что есть некоторые разъяснения. Как сказал 2Toad, это правильно:
когда вы указываете пароль в строке подключения, и база данных уже существует, SQLite предполагает, что база данных зашифрована и попытается расшифровать ее с помощью указанного пароля. Если вы еще не установили пароль в базе данных, это приведет к ошибке» файл зашифрован», потому что предоставленный пароль не может использоваться для расшифруйте незашифрованную базу данных.
но эта ошибка также может произойти, если вы пытаетесь использовать conn.SetPassword("something")
после того, как у вас уже был другой в строке подключения. Или если вы делаете conn.ChangePassword("somethingelse")
, а еще Password=something
в строке подключения.
есть несколько сценариев:
- к базе данных был применен пароль, и он находится в строке подключения.
- у вас есть пароль в строке подключения, но база данных не применен, или пароль в строке не соответствует БД.
- в базе данных никогда не было пароля, и вы хотите его изменить.
- в базе данных есть пароль, и вы хотите его изменить.
резолюции:
-
поэтому код 2Toad предоставлены для выполнения
conn.ChangePassword("somethingelse")
только наполовину правильно и не учитывает, где вы находитесь, что еще вы сделали, и что вы хотите делать в будущем. Если у вас есть существующий пароль, и вы хотите его изменить, это правильно, но вы также должны быть уверены, что строка подключения будет обновлена после этого, или последующие соединения не удастся сfile is encrypted
ошибка. -
этот сценарий происходит, если вы пустой пароль с помощью
conn.SetPassword("")
а потом попробоватьconn.ChangePassword("somethingelse")
без предварительного подключения к базе данных безPassword=something
в строке подключения. ЭтоPassword=something
должно быть удалено из строка подключения, потому что пароль был удален программно из БД, и БД попытается подключиться к нему. Если он не удаляется из строки подключения одновременно с программным удалением из БД, вы получите то же самоеfile is encrypted
ошибка. -
потому что я начал с того, что сделал
conn.SetPassword("something")
в самом начале, когда у меня не было пароля применяется (и я считаю, что это способ сделать это), я не могу проверить без создание другой БД SQLite, но я не верю, что вы можете вызватьconn.ChangePassword("something")
если у вас никогда не было пароля в первую очередь. Вы должны сделатьconn.SetPassword("something")
для начального набора, а затем положитьPassword=something
в строке подключения. -
кстати я сделал смену пароля, где я сделал
conn.ChangePassword("somethingelse")
только послеconn.SetPassword("")
и очистивPassword=something
в строке подключения:// Changes an encrypted database to unencrypted and removes password string connString = "Data Source=c:test.db3;Password=something"; SQLiteConnection conn = new SQLiteConnection(connString); conn.SetPassword(""); //conn.Open(); // doesn't work because connString hasn't been updated // Update connString connString = "Data Source=c:test.db3;"; conn = new SQLiteConnection(connString); conn.Open(); // we've opened the DB without a password // Re-encrypts the database. The connection remains valid and usable afterwards until closed - then the connection string needs updating. conn.ChangePassword("somethingelse"); conn.Close(); // Update connString connString = "Data Source=c:test.db3;Password=somethingelse"; conn = new SQLiteConnection(connString); // must re-instantiate! conn.Open(); // we've opened the DB with our new password
это сработало. Я полагаю, вы также можете не ясно это из строки подключения и просто сделать conn.ChangePassword("somethingelse")
, а затем добавить Password=somethingelse
в строку, после:
// Opens an encrypted database
string connString = "Data Source=c:test.db3;Password=something";
SQLiteConnection conn = new SQLiteConnection(connString);
conn.Open();
// Encrypts the database. The connection remains valid and usable afterwards until closed - then the connection string needs updating.
conn.ChangePassword("somethingelse");
conn.Close();
// Update connString
connString = "Data Source=c:test.db3;Password=somethingelse";
conn = new SQLiteConnection(connString);
conn.Open(); // we've opened the DB with our new password
лично я храню пароль как зашифрованный в приложении (веб) .конфигурационный файл и вызовите его в переменную в моем приложении onload и динамически создайте из него строку подключения.
что я знаю, если вы удалите SQLite DB и попытаетесь вызвать его, вы просто получите ошибку — не воссозданную SQLite DB с новым паролем из вашего соединения string-по крайней мере, при использовании и вызове его из приложения C# .NET.
обновление Если вам нужна функция, которая будет использоваться для обновления пароля после того, как у вас уже есть один, вы не хотите иметь .SetPassword()
, а .ChangePassword()
. Я обнаружил, что также лучше всегда вычеркивать его, а затем изменять, как в моем первом примере в #4.