Deiv
Гость
|
|
« : Ноябрь 02, 2004, 09:39 » |
|
/****************************************************** В чем может быть дело? Пример стандартный, немного переделанный не создает таблицу, сволочь а в конце концов выдает сообщение (в аттаче) QT 3.3.2 win, XP sp2, SQL сервак на линухе IBM Informix 9.21, CSDK-2.50 Exel к источнику данных коннектится нормально и делает запросы QT судя по всему коннектится к источнику, но нифига сделать дальше не может в qt например есть демка demo в закладке DATABASE -> SQL explorer По кнопке Connect: DRIVER,DATABASE NAME,USERNAME,HOSTNAME,PORT=default (аналогично тексту внизу) Некоторое время думает, но потом выдает список таблиц в базе, т.е он сервак на эту тему опросил, тот ответил и QT-прога поняла Но никакие простейшие запросы (select * from client) или двойной клик по таблице положительного результата не вызывают или сообщение в аттаче или "Database reported an error" Не знаю чего делать ******************************************************/
#include <qapplication.h> #include <qsqldatabase.h> #include <qdatatable.h> #include <qsqlcursor.h> #include <qmessagebox.h>
/* Modify the following to match your environment */ #define DRIVER "QODBC3" //QSQLITE" /* see the Qt SQL documentation for a list of available drivers */ #define DATABASE "bti" //:memory:" /* the name of your database */ #define USER "informix" /* user name with appropriate rights */ #define PASSWORD "mix2001" /* password for USER */ #define HOST "" /* host on which the database is running */
class SimpleCursor : public QSqlCursor { public: SimpleCursor () : QSqlCursor( "simpletable" ) {} protected: QSqlRecord* primeInsert() { /* a real-world application would use sequences, or the like */ QSqlRecord* buf = QSqlCursor::primeInsert(); QSqlQuery q( "select max(id)+1 from simpletable" ); if ( q.next() ) buf->setValue( "id", q.value(0) ); return buf; } };
void message(char *str) { QMessageBox::message("DBG",str,"OK",NULL,0); }
int main( int argc, char ** argv ) { QApplication a( argc, argv );
QSqlDatabase * db = QSqlDatabase::addDatabase( DRIVER ); db->setDatabaseName( DATABASE ); db->setUserName( USER ); db->setPassword( PASSWORD ); db->setHostName( HOST );
if( !db->open() ){ db->lastError().showMessage( "An error occured. Please read the README file in the sqltable" "dir for more information.\n\n" ); return 1; }
message("Point number 1"); if (!db->tables().contains("simpletable")) { message("Point number 2"); QSqlQuery q("create table simpletable(id int, name varchar(20), address varchar(20))", db); q.lastError().showMessage("FAQ"); }
SimpleCursor cursor;
QDataTable table( &cursor ); /* data table uses our cursor */ table.addColumn( "name", "Name" ); table.addColumn( "address", "Address" ); table.setSorting( TRUE );
a.setMainWidget( &table ); table.refresh(); /* load data */ table.show(); /* show widget */
return a.exec(); }
|