Hello I am running Ubuntu 14.04. I have installed qt from the package qt-sdk I have also installed the following package which should have installed the postgres driver:
libqt5sql5-psql
My Qt version is:
Qt Creator 3.0.1 based on Qt 5.2.1
When I try to create a Qt db object of type postgres like so:
QSqlDatabase db = QSqlDatabase::addDatabase(“QPSQL”);
I get a lot of errors like so:
/home/bc/projects/qt_test/main.cpp:12: error: stray '\342' in program
QSqlDatabase db = QSqlDatabase::addDatabase(“QPSQL”);
^
/home/bc/projects/qt_test/main.cpp:12: error: 'QPSQL' was not declared in this scope
QSqlDatabase db = QSqlDatabase::addDatabase(“QPSQL”);
I am obviously not doing something correctly. I don't know what though. Perhaps I am missing a package, or I have mis-configured something.
Help is appreciated.
This isn't a database issue: the compiler is telling you that you have non-ASCII characters in your code that it doesn't recognize:
error: stray '\342' in program
Take care of those and you should at least get as far as compiling.
Use proper quotes, not the fancy ones from some blogs:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
Related
I've installed DBI module via cpan. CPAN has been configured to use local directory, so I have ~/perl5 and ~/.cpan directories. The module apparently is in ~/.cpan/build/DBI-1.642-0, which in fact does have DBI.pm file there.
However, when I execute the following command as a test, the command suggests there is no "connect" object:
$ perl -e 'use lib qw( .cpan/build/DBI-1.642-0/ ); DBI->connect("dbi:SQLite:dbname=foo.sqlite","","");'
Can't locate object method "connect" via package "DBI" (perhaps you forgot to load "DBI"?) at -e line 1.
Environment: Debian-based distribution, perl 5.26.2 .
Note on possible duplicates:
Can't locate object method via package subclassing DBI Asks about module subclassing, not what I'm doing
Addendum: From the discussion in the comments, it's clear that a lot of users focus on just use DBI statement. As I've mentioned in the comments:
The whole goal is to make use of DBI module installed via cpan. Prior to installing DBD::SQLite neither use lib nor use DBI were giving a working solution. So the suggestion use DBI by itself was not useful.
Please note, I have tried both use DBI and use lib qw() methods prior to asking the question. The use DBI line by itself was not effective without installing DBD::SQLite module as mentioned in my answer.
Converted from a command line script to an actual program, your code looks like this:
use lib qw( .cpan/build/DBI-1.642-0/ );
DBI->connect("dbi:SQLite:dbname=foo.sqlite","","");
And the error message you get is:
Can't locate object method "connect" via package "DBI" (perhaps you forgot to load "DBI"?) at -e line 1.
That error is pretty clear.
(perhaps you forgot to load "DBI"?)
The problem here is that you are missing the line of code which actually loads the DBI module. You need to add this:
use DBI;
Your use lib qw( .cpan/build/DBI-1.642-0/ ) line is very strange. You're asking Perl to load the module from the temporary build directory that was used during the installation. That's not the version that you want to use at all. When cpan has finished its work, you will have a version of DBI installed in your standard Perl library directories that you will be able to access without the need for any use lib code.
I'll also add that if you're using the system-installed version of Perl, there's no need to use cpan to install the most popular modules. You can use your distribution's repository of pre-built packages. For example apt get install libdbi-perl (on Debian and similar) or dnf install perl-DBI (on Red Hat).
In your answer, you have silently added the missing use DBI statement and you claim that installing DBD::SQLite solved your problem. That may have solved a different problem that you had, but it didn't solve the problem in your original question.
Issue with perl -e has been resolved, since apparently SQLite was not installed. I had to open cpan shell and run install DBD::SQLite. Now, the command-line works properly:
$ $ perl -e 'use DBI; my $db = DBI->connect( "dbi:SQLite:dbname=foo.sqlite","","" );my $stmt = qq(CREATE TABLE foo(a int, b text); ); $db->do($stmt)'
$ sqlite3 foo.sqlite
SQLite version 3.23.1 2018-04-10 17:39:29
Enter ".help" for usage hints.
sqlite> .tables
foo
sqlite> .schema foo
CREATE TABLE foo(a int, b text);
sqlite>
As for the module itself, it has been installed in ~/perl5/lib/perl5/x86_64-linux-gnu-thread-multi/DBD/ directory.
Based on Berserk's answer, the following also works for explicitly calling the :
$ perl -e 'use lib qw( /home/user/perl5/x86_64-linux-gnu-thread-multi/DBD ); use DBI; my $db = DBI->connect( "dbi:SQLite:dbname=foo.sqlite","","" );my $stmt = qq(CREATE TABLE foo(a int, b text); ); $db->do($stmt)'
To ensure this uses the library declaration from use lib qw() explicitly, I've also cleared the #inc array in some of my tests.
How can I add a new Environment Variable to the Qt installer. I know that it should go in the .qs script something like the following:
var path = installer.environmentVariable("PATH") + ";" + installer.value("TargetDir");
component.addElevatedOperation("EnvironmentVariable","PATH",path,true);
I'm trying the above on Linux, but it's complaining about EnvironmentVariable not existing when I install my program.
Well this operation is only supported on windows, but you can try do this:
component.addElevatedOperation("AppendFile", "/etc/environment", "export PATH=\"$PATH;#TargetDir#\"\n");
Warning: do this only on installation process
if (installer.isInstaller()) {
[...]
}
If this runs on unistallation, maybe can delete other things of /etc/environment
I'm trying to use ROracle. My Oracle database version is Oracle Database 12c Release 12.1.0.1.0 - 64bit Production, and I have installed Instant Client and SDK for the version 12.1.0.2.0 (12.1.0.1.0 isn't available on Oracle's site).
I can access the Oracle database through Oracle SQL Developer without any issues. The error message I get in RStudio is:
Error in .oci.Driver(.oci.drv(), interruptible = interruptible, unicode_as_utf8 = unicode_as_utf8, :
In case it's useful, I have installed Instant Client and SDK here:
C:\oreclient_install_dir\instantclient_12_1
I'm running a Windows machine and I followed the instructions on CRAN:
http://cran.us.r-project.org/web/packages/ROracle/INSTALL
Including adding the environment variables.
After some searching (e.g. here) it looks like I need to set LD_LIBRARY_PATH and ORACLE_HOME and "OCI_LIB", which I did:
Sys.setenv(LD_LIBRARY_PATH="C:/oreclient_install_dir/instantclient_12_1")
Sys.setenv("ORACLE_HOME" = "C:/oreclient_install_dir/instantclient_12_1")
Sys.setenv("OCI_LIB" = "C:/oreclient_install_dir/instantclient_12_1")
Same error comes up. I'm likely not doing this right, however; I'm not a DBA and don't know all the details.
Any help with this would be appreciated.
LD_LIBRARY_PATH is for Linux. Assuming that you already have Rtools installed in C:\Rtools, you can use the following code to install ROracle
Sys.setenv(OCI_LIB64="C:\\oreclient_install_dir\\instantclient_12_1")
Sys.setenv(PATH=paste0(Sys.getenv("PATH"),";C:\\oreclient_install_dir\\instantclient_12_1"))
install.packages("ROracle", type="source", INSTALL_opts="--no-multiarch")
For using the ROracle package, you can use the following:
Sys.setenv(OCI_LIB64="C:\\oreclient_install_dir\\instantclient_12_1")
Sys.setenv(PATH=paste0(Sys.getenv("PATH"),";C:\\oreclient_install_dir\\instantclient_12_1"))
library(ROracle)
I'm trying to build a sample project using Qt 5.7 over Linux. Previously, the same project have been built with Qt 5.4.2 without issues. When I try with Qt 5.7, I get the followings errors:
undefined reference to `QJsonValue::toString() const'
I have tried installing Qt5.7 with Qt Maintenance Tool and also download from Qt official site and install it using .run file. When I run a locate to qjsonvalue I get the followings results:
$ locate qjsonvalue
/opt/Qt/5.4/Src/qtbase/include/QtCore/qjsonvalue.h
/opt/Qt/5.4/Src/qtbase/src/corelib/json/qjsonvalue.cpp
/opt/Qt/5.4/Src/qtbase/src/corelib/json/qjsonvalue.h
/opt/Qt/5.4/android_armv7/include/QtCore/qjsonvalue.h
/opt/Qt/5.4/android_x86/include/QtCore/qjsonvalue.h
/opt/Qt/5.4/gcc_64/include/QtCore/qjsonvalue.h
/usr/include/qt5/QtCore/qjsonvalue.h
/usr/share/doc/qt5/qtcore/qjsonvalue-members.html
/usr/share/doc/qt5/qtcore/qjsonvalue.html
According with the previous results, seems that I need to install something becuase qjsonvalue.h/cpp is not in my Qt5.7 core. Any ideas about how to solve it? Need to install anything else? As note, when I start Qt Maintenance Tool I get an alert message that says the following:
Your installation seems to be corrupted. Please consider re-installing from scratch.
Found this comming here via google. I had the same issue.
The API changed from a default argument
QString QJsonValue::toString(const QString & defaultValue = QString()) const
to two overloads.
QString QJsonValue::toString() const
QString QJsonValue::toString(const QString &defaultValue) const
You should build with the headers of the oldest version you want to support. But if you just need this one error fixed you can just change the call from
QJsonValue someval;
QString str = someval.toString();
to
QString str = someval.toString(QString());
But you will probably get some other linker error in the wake of fixing this one.
I'm trying to set up dsn with qt and i cant get it to work. The dsn does work with isql.
I'm using ubuntu 12.04
POSTGRES is the dsn.
connection line:
QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
db.setHostName("localhost");
db.setDatabaseName("POSTGRES");
error:
FATAL: database "POSTGRES" does not exist.
I don't understand why qt doesn't do the look up to find the database behind. i made symlink (usr/local/etc) to odbc.ini and have odbcinst.ini aswell sqli does work with POSTGRES dsn.
Perhaps where will qt look for these files? Googled for 3 days now without success
I kind of gave up cant solve this thank you for any help.
I believe your problem is that you're using the wrong driver. According to the Qt documentation, you need to be using the ODBC driver for DSN files to work - for example:
db = QSqlDatabase::addDatabase("QODBC");
Also note that, again according to the Qt documentation, if you're trying to pass a DSN filename to setDatabaseName, then it MUST have a ".dsn" file extension:
For the QODBC driver, the name can either be a DSN, a DSN filename (in which case the file must have a .dsn extension), or a connection string.
And, finally, it must be listed in your odbc.ini.