Criando-um-metodo-que-recebe-um-objeto-qualquer-e-faz-uma-insercaeo-em-uma-tabela-de-um-banco-de-dad: Difference between revisions

From Qt Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 1: Line 1:
Como prometi no topico "Como Manipular uma Classe Qualquer?":http://forum.qt.io/viewthread/26452/, vou mostrar agora como fazer um metodo que recebe uma classe qualquer.
Como prometi no topico "Como Manipular uma Classe Qualquer?":http://forum.qt.io/viewthread/26452/, vou mostrar agora como fazer um metodo que recebe uma classe qualquer.


O objetivo em questao é receber um objeto qualquer e fazer um "insert" em um banco de dados (no caso usei o sqlite) a partir das propriedades do objeto.
O objetivo em questao é receber um objeto qualquer e fazer um "insert" em um banco de dados (no caso usei o sqlite) a partir das propriedades do objeto.


segue o código:
segue o código:


meu objeto &quot;C1&amp;quot;<br /><code><br />#ifndef C1_H<br />#define C1_H
meu objeto "C1"<br /><code><br />#ifndef C1_H<br />#define C1_H


#include &lt;QObject&amp;gt;<br />#include &lt;QtScript/QScriptClass&amp;gt;
#include <QObject><br />#include <QtScript/QScriptClass>


class C1 : public QObject<br />{<br /> Q_OBJECT
class C1 : public QObject<br />{<br /> Q_OBJECT


//aqui definiremos as propriedades do objeto e seus respectivos metodos de leitura, onde:<br />// Q_PROPERTY(&lt;tipo e nome da propriedade&amp;gt; READ &lt;nome funçao que retorna o valor da sua propriedade&amp;gt;)<br />// o &quot;READ&amp;quot; serve para especificar qual a funçao que retornara o valor da minha propriedade<br /> Q_PROPERTY(int x READ X)<br /> Q_PROPERTY(QString campo1 READ Campo1)<br /> Q_PROPERTY(int campo2 READ Campo2)<br /> Q_PROPERTY(QString parameters READ parameters)
//aqui definiremos as propriedades do objeto e seus respectivos metodos de leitura, onde:<br />// Q_PROPERTY(<tipo e nome da propriedade> READ <nome funçao que retorna o valor da sua propriedade>)<br />// o "READ" serve para especificar qual a funçao que retornara o valor da minha propriedade<br /> Q_PROPERTY(int x READ X)<br /> Q_PROPERTY(QString campo1 READ Campo1)<br /> Q_PROPERTY(int campo2 READ Campo2)<br /> Q_PROPERTY(QString parameters READ parameters)


public:<br /> explicit C1(QObject *parent = 0);
public:<br /> explicit C1(QObject *parent = 0);


QString parameters()<br /> {<br />//aqui eu posso retornar os parametros a seguir:<br /> return &quot;table(c1);colums(campo1,campo2,x)&quot;;<br />//ou nada, indicando que todas as propriedades serao inseridas na tabela<br /> //return &quot;&quot;;<br /> }
QString parameters()<br /> {<br />//aqui eu posso retornar os parametros a seguir:<br /> return "table(c1);colums(campo1,campo2,x)";<br />//ou nada, indicando que todas as propriedades serao inseridas na tabela<br /> //return "";<br /> }


QString Campo1();//const;<br /> int Campo2();<br /> int X();
QString Campo1();//const;<br /> int Campo2();<br /> int X();
Line 23: Line 23:
#endif // C1_H<br /></code>
#endif // C1_H<br /></code>


arquivo cpp do meu objeto:<br /><code><br />#include &quot;c1.h&amp;quot;
arquivo cpp do meu objeto:<br /><code><br />#include "c1.h"


C1::C1(QObject *parent) :<br /> QObject(parent)<br />{<br /> x=20;
C1::C1(QObject *parent) :<br /> QObject(parent)<br />{<br /> x=20;


//aqui, se preferirem indiquem o um nome para o objeto…<br />// no caso, estou usando ele para referenciar o nome da tabela<br />//se nao for informado o nome da tabela sera o mesmo da minha classe…<br /> // this-&gt;setObjectName(&quot;C1&amp;quot;);<br />}
//aqui, se preferirem indiquem o um nome para o objeto…<br />// no caso, estou usando ele para referenciar o nome da tabela<br />//se nao for informado o nome da tabela sera o mesmo da minha classe…<br /> // this->setObjectName("C1");<br />}


QString C1::Campo1()<br />{<br /> return &quot;Rodrigo&amp;quot;;<br />}
QString C1::Campo1()<br />{<br /> return "Rodrigo";<br />}


int C1::Campo2()<br />{<br /> return 3;<br />}
int C1::Campo2()<br />{<br /> return 3;<br />}


int C1::X()<br />{<br /> return this-&gt;x;<br />}<br /></code>
int C1::X()<br />{<br /> return this->x;<br />}<br /></code>


minha classe &quot;ConnectionDB&amp;quot;:<br /><code><br />#ifndef CONNECTIODB_H<br />#define CONNECTIODB_H
minha classe "ConnectionDB":<br /><code><br />#ifndef CONNECTIODB_H<br />#define CONNECTIODB_H


#include &lt;QObject&amp;gt;<br />#include &lt;qsql.h&amp;gt;
#include <QObject><br />#include <qsql.h>


class ConnectioDB : public QObject<br />{<br /> Q_OBJECT<br />public:<br /> explicit ConnectioDB(QObject *parent = 0);
class ConnectioDB : public QObject<br />{<br /> Q_OBJECT<br />public:<br /> explicit ConnectioDB(QObject *parent = 0);
Line 53: Line 53:
#endif // CONNECTIODB_H<br /></code>
#endif // CONNECTIODB_H<br /></code>


arquivo de codigo do meu &quot;ConnectionDB&amp;quot;
arquivo de codigo do meu "ConnectionDB"


<code><br />#include &quot;connectiodb.h&amp;quot;<br />#include &lt;QMessageBox&amp;gt;<br />#include &lt;QSqlDatabase&amp;gt;<br />#include &lt;QSqlError&amp;gt;<br />#include &lt;QSqlQuery&amp;gt;<br />#include &quot;QString&amp;quot;<br />#include &quot;QDebug&amp;quot;<br />#include &quot;QtGui&amp;quot;<br />#include &quot;QMetaObject&amp;quot;<br />#include &lt;QVariant&amp;gt;
<code><br />#include "connectiodb.h"<br />#include <QMessageBox><br />#include <QSqlDatabase><br />#include <QSqlError><br />#include <QSqlQuery><br />#include "QString"<br />#include "QDebug"<br />#include "QtGui"<br />#include "QMetaObject"<br />#include <QVariant>


ConnectioDB::ConnectioDB(QObject '''parent) :<br /> QObject(parent)<br />{
ConnectioDB::ConnectioDB(QObject '''parent) :<br /> QObject(parent)<br />{
Line 63: Line 63:
plugin* - É informado o plugin referente ao banco de dados que sera feito a conexão.
plugin* - É informado o plugin referente ao banco de dados que sera feito a conexão.


local* - Apenas para o QSQLITE onde pode assumir os valores &quot;memory&amp;quot; ou &quot;null&amp;quot;
local* - Apenas para o QSQLITE onde pode assumir os valores "memory" ou "null"


connectionname* - Nome da conexão que sera criada
connectionname* - Nome da conexão que sera criada
Line 76: Line 76:


'''falta descrever alguns parametros….
'''falta descrever alguns parametros….
<br />'''/<br /> QSqlDatabase db = QSqlDatabase::addDatabase(plugin, connectionName);<br /> if(!memory)<br /> {<br /> if(!Hostname.isEmpty())<br /> db.setHostName(Hostname);<br /> if(!user.isEmpty())<br /> db.setUserName(user);<br /> if(!pass.isEmpty())<br /> db.setPassword(pass);<br /> if(!DBname.isEmpty())<br /> db.setDatabaseName(DBname);<br /> }<br /> else db.setDatabaseName(&quot;:memory:&quot;);
<br />*/<br /> QSqlDatabase db = QSqlDatabase::addDatabase(plugin, connectionName);<br /> if(!memory)<br /> {<br /> if(!Hostname.isEmpty())<br /> db.setHostName(Hostname);<br /> if(!user.isEmpty())<br /> db.setUserName(user);<br /> if(!pass.isEmpty())<br /> db.setPassword(pass);<br /> if(!DBname.isEmpty())<br /> db.setDatabaseName(DBname);<br /> }<br /> else db.setDatabaseName(":memory:");


if (!db.open())<br /> {<br /> QMessageBox::critical(0, qApp-&gt;tr(&quot;Cannot open database&amp;quot;),<br /> qApp-&gt;tr(&quot;Unable to establish a database connection.&quot;<br /> &quot;This example needs SQLite support. Please read &quot;<br /> &quot;the Qt SQL driver documentation for information how &quot;<br /> &quot;to build it.&quot;<br /> &quot;Click Cancel to exit.&quot;), QMessageBox::Cancel);<br /> qDebug()&lt;&lt;&quot;Create Connection&amp;quot;&lt;&lt;connectionName&amp;lt;&lt;false&amp;lt;&lt;&quot;- DATA BASE:&quot;&lt;&lt;DBname;<br /> return false;<br /> }
if (!db.open())<br /> {<br /> QMessageBox::critical(0, qApp->tr("Cannot open database"),<br /> qApp->tr("Unable to establish a database connection."<br /> "This example needs SQLite support. Please read "<br /> "the Qt SQL driver documentation for information how "<br /> "to build it."<br /> "Click Cancel to exit."), QMessageBox::Cancel);<br /> qDebug()<<"Create Connection"<<connectionName<<false<<"- DATA BASE:"<<DBname;<br /> return false;<br /> }


qDebug()&lt;&lt;&quot;Create Connection&amp;quot;&lt;&lt;connectionName&amp;lt;&lt;true&amp;lt;&lt;&quot;- DATA BASE:&quot;&lt;&lt;DBname;<br /> return true;<br />}
qDebug()<<"Create Connection"<<connectionName<<true<<"- DATA BASE:"<<DBname;<br /> return true;<br />}


bool ConnectioDB::insert(QObject '''obj, QString connectionName)<br />{
bool ConnectioDB::insert(QObject '''obj, QString connectionName)<br />{
<br /> const QMetaObject''' metaObject = obj-&gt;metaObject();<br /> QString colums=&quot;&quot;;<br /> QString table=obj-&gt;objectName();//estou usando o nome do objeto para referenciar o nome da tabela<br /> QString values=&quot;&quot;;<br /> //processa os parametros
<br /> const QMetaObject''' metaObject = obj->metaObject();<br /> QString colums="";<br /> QString table=obj->objectName();//estou usando o nome do objeto para referenciar o nome da tabela<br /> QString values="";<br /> //processa os parametros


//pega a propriedade que possui o nome &quot;parameters&amp;quot;<br /> // QVariant v = obj-&gt;property(metaObject-&gt;property(metaObject-&gt;indexOfProperty(&quot;parameters&amp;quot;)).name());<br /> QVariant v = obj-&gt;property(&quot;parameters&amp;quot;);//retorna um valor a partir do nome da propriedade
//pega a propriedade que possui o nome "parameters"<br /> // QVariant v = obj->property(metaObject->property(metaObject->indexOfProperty("parameters")).name());<br /> QVariant v = obj->property("parameters");//retorna um valor a partir do nome da propriedade


//leitura dos parametros<br /> QString parameters=v.toString();<br /> //separa e joga em uma lista<br /> QStringList list=parameters.split(&quot;;&quot;);
//leitura dos parametros<br /> QString parameters=v.toString();<br /> //separa e joga em uma lista<br /> QStringList list=parameters.split(";");


for (int i = 0; i &lt; list.size(); +''i)<br /> {<br /> QString str=list.at(i).toLocal8Bit().constData();<br /> if(str.contains(&quot;colums&amp;quot;))<br /> {<br /> // str.remove(&quot;colums(&quot;);<br /> str.remove(&quot;colums&amp;quot;);<br /> // str.remove(&quot;)&quot;);<br /> colums=str;<br /> qDebug()&lt;&lt;&quot;colums=&quot;&amp;lt;&amp;lt;colums;<br /> }else if(str.contains(&quot;table&amp;quot;))<br /> {<br /> str.remove(&quot;table(&quot;);<br /> str.remove(&quot;)&quot;);<br /> table=str;<br /> qDebug()&lt;&lt;&quot;table=&quot;&amp;lt;&amp;lt;table;<br /> }<br /> }
for (int i = 0; i < list.size(); +''i)<br /> {<br /> QString str=list.at(i).toLocal8Bit().constData();<br /> if(str.contains("colums"))<br /> {<br /> // str.remove("colums(");<br /> str.remove("colums");<br /> // str.remove(")");<br /> colums=str;<br /> qDebug()<<"colums="<<colums;<br /> }else if(str.contains("table"))<br /> {<br /> str.remove("table(");<br /> str.remove(")");<br /> table=str;<br /> qDebug()<<"table="<<table;<br /> }<br /> }
<br /> //reunindo os valores a serem inseridos<br /> if(colums.isEmpty())<br /> {<br /> for(int i = metaObject-&amp;gt;propertyOffset(); i &amp;lt; metaObject-&amp;gt;propertyCount();i)<br /> {
<br /> //reunindo os valores a serem inseridos<br /> if(colums.isEmpty())<br /> {<br /> for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount();i)<br /> {
<br /> QVariant v = obj-&amp;gt;property(metaObject-&amp;gt;property(i).name());<br /> if(!QString(metaObject-&amp;gt;property(i).name()).contains(&quot;parameters&amp;quot;,Qt::CaseInsensitive))//remove &quot;parameters&amp;quot; da inserçao<br /> {<br /> if(!colums.isEmpty())<br /> colums''=&quot;,&quot;;<br /> colums+=QString::fromLatin1(metaObject-&gt;property(i).name()).toLower();
<br /> QVariant v = obj->property(metaObject->property(i).name());<br /> if(!QString(metaObject->property(i).name()).contains("parameters",Qt::CaseInsensitive))//remove "parameters" da inserçao<br /> {<br /> if(!colums.isEmpty())<br /> colums''=",";<br /> colums+=QString::fromLatin1(metaObject->property(i).name()).toLower();


if(colums.contains(QString::fromLatin1(metaObject-&gt;property(i).name()).toLower()))<br /> {<br /> if(!values.isEmpty()) values+=&quot;,&quot;;<br /> values+=&quot;'&quot;''v.toString()''&quot;'&quot;;<br /> }<br /> }<br /> }<br /> colums=&quot;(&quot;''colums''&quot;)&quot;;<br /> } else<br /> {<br /> QString aux=colums;<br /> aux.remove(&quot;(&quot;);<br /> aux.remove(&quot;)&quot;);<br /> QStringList columsList=aux.split(&quot;,&quot;);
if(colums.contains(QString::fromLatin1(metaObject->property(i).name()).toLower()))<br /> {<br /> if(!values.isEmpty()) values+=",";<br /> values+="'"''v.toString()''"'";<br /> }<br /> }<br /> }<br /> colums="("''colums''")";<br /> } else<br /> {<br /> QString aux=colums;<br /> aux.remove("(");<br /> aux.remove(")");<br /> QStringList columsList=aux.split(",");


for (int i = 0; i &lt; columsList.size(); +''i)<br /> {
for (int i = 0; i < columsList.size(); +''i)<br /> {
<br /> // QVariant v2 = obj-&gt;property(metaObject-&gt;property(metaObject-&gt;indexOfProperty(QString(columsList.at(i).toLocal8Bit()).toAscii())).name());<br />QVariant v2 = obj-&gt;property(QString(columsList.at(i).toLocal8Bit()).toAscii());<br /> if(!values.isEmpty()) values''=&quot;,&quot;;<br /> values+=&quot;'&quot;''v2.toString()''&quot;'&quot;;<br /> }<br /> }
<br /> // QVariant v2 = obj->property(metaObject->property(metaObject->indexOfProperty(QString(columsList.at(i).toLocal8Bit()).toAscii())).name());<br />QVariant v2 = obj->property(QString(columsList.at(i).toLocal8Bit()).toAscii());<br /> if(!values.isEmpty()) values''=",";<br /> values+="'"''v2.toString()''"'";<br /> }<br /> }


//faz a inserçao no banco de dados<br /> QSqlQuery *query=new QSqlQuery(connectionName,QSqlDatabase::database(connectionName));<br /> qDebug() &lt;&lt;&quot;values =&quot;&lt;&lt;values&amp;lt;&lt;&quot;colums =&quot;&lt;&lt;colums&amp;lt;&lt;query-&gt;exec&amp;amp;#40;&quot;INSERT INTO &quot;''table+colums''&quot;VALUES (&amp;quot;+values+&amp;quot;&amp;amp;#41;;&amp;quot;);<br />}<br /></code>
//faz a inserçao no banco de dados<br /> QSqlQuery *query=new QSqlQuery(connectionName,QSqlDatabase::database(connectionName));<br /> qDebug() <<"values ="<<values<<"colums ="<<colums<<query->exec("INSERT INTO "''table+colums''"VALUES ("+values+");");<br />}<br /></code>


meu arquivo main:
meu arquivo main:


<code><br />#include &quot;mainwindow.h&amp;quot;<br />#include &lt;QApplication&amp;gt;<br />#include &lt;QDebug&amp;gt;<br />#include &lt;c1.h&amp;gt;<br />#include &lt;connectiodb.h&amp;gt;<br />#include &lt;QSqlQuery&amp;gt;
<code><br />#include "mainwindow.h"<br />#include <QApplication><br />#include <QDebug><br />#include <c1.h><br />#include <connectiodb.h><br />#include <QSqlQuery>


int main(int argc, char *argv[])<br />{<br /> C1 *c1 = new C1;<br /> ConnectioDB::createConnection(&quot;QSQLITE&amp;quot;,false,&quot;meubd&amp;quot;,&quot;teste.db&amp;quot;,NULL,NULL,NULL);<br /> QSqlQuery *query=new QSqlQuery(&quot;meubd&amp;quot;,QSqlDatabase::database(&quot;meubd&amp;quot;));<br />// qDebug() &lt;&lt;query-&gt;exec&amp;amp;#40;&quot;CREATE TABLE C1 ( &quot;<br />// &quot;cod INTEGER PRIMARY KEY&amp;quot;<br />// &quot;NOT NULL, &quot;<br />// &quot;campo1 VARCHAR( 128 &amp;#41;, &quot;<br />// &quot;campo2 INT, &quot;<br />// &quot;x INT &quot;<br />// &quot;);&quot;);<br /> c1-&gt;setObjectName(&quot;c1&amp;quot;);<br /> ConnectioDB::insert(c1,&quot;meubd&amp;quot;);<br /> return 0;<br />}<br /></code>
int main(int argc, char *argv[])<br />{<br /> C1 *c1 = new C1;<br /> ConnectioDB::createConnection("QSQLITE",false,"meubd","teste.db",NULL,NULL,NULL);<br /> QSqlQuery *query=new QSqlQuery("meubd",QSqlDatabase::database("meubd"));<br />// qDebug() <<query->exec("CREATE TABLE C1 ( "<br />// "cod INTEGER PRIMARY KEY"<br />// "NOT NULL, "<br />// "campo1 VARCHAR( 128 ), "<br />// "campo2 INT, "<br />// "x INT "<br />// ");");<br /> c1->setObjectName("c1");<br /> ConnectioDB::insert(c1,"meubd");<br /> return 0;<br />}<br /></code>


é isso, próximo post vou mostrar como escrever em um objeto qualquer fazendo um metodo que busca um objeto em uma tabela.
é isso, próximo post vou mostrar como escrever em um objeto qualquer fazendo um metodo que busca um objeto em uma tabela.

Revision as of 14:17, 24 February 2015

Como prometi no topico "Como Manipular uma Classe Qualquer?":http://forum.qt.io/viewthread/26452/, vou mostrar agora como fazer um metodo que recebe uma classe qualquer.

O objetivo em questao é receber um objeto qualquer e fazer um "insert" em um banco de dados (no caso usei o sqlite) a partir das propriedades do objeto.

segue o código:

meu objeto "C1"

<br />#ifndef C1_H<br />#define C1_H

#include <QObject><br />#include <QtScript/QScriptClass>

class C1 : public QObject<br />{<br /> Q_OBJECT

//aqui definiremos as propriedades do objeto e seus respectivos metodos de leitura, onde:<br />// Q_PROPERTY(<tipo e nome da propriedade> READ <nome funçao que retorna o valor da sua propriedade>)<br />// o "READ" serve para especificar qual a funçao que retornara o valor da minha propriedade<br /> Q_PROPERTY(int x READ X)<br /> Q_PROPERTY(QString campo1 READ Campo1)<br /> Q_PROPERTY(int campo2 READ Campo2)<br /> Q_PROPERTY(QString parameters READ parameters)

public:<br /> explicit C1(QObject *parent = 0);

QString parameters()<br /> {<br />//aqui eu posso retornar os parametros a seguir:<br /> return "table(c1);colums(campo1,campo2,x)";<br />//ou nada, indicando que todas as propriedades serao inseridas na tabela<br /> //return "";<br /> }

QString Campo1();//const;<br /> int Campo2();<br /> int X();

private:<br /> int x;<br />};

#endif // C1_H<br />

arquivo cpp do meu objeto:

<br />#include "c1.h"

C1::C1(QObject *parent) :<br /> QObject(parent)<br />{<br /> x=20;

//aqui, se preferirem indiquem o um nome para o objeto…<br />// no caso, estou usando ele para referenciar o nome da tabela<br />//se nao for informado o nome da tabela sera o mesmo da minha classe…<br /> // this->setObjectName("C1");<br />}

QString C1::Campo1()<br />{<br /> return "Rodrigo";<br />}

int C1::Campo2()<br />{<br /> return 3;<br />}

int C1::X()<br />{<br /> return this->x;<br />}<br />

minha classe "ConnectionDB":

<br />#ifndef CONNECTIODB_H<br />#define CONNECTIODB_H

#include <QObject><br />#include <qsql.h>

class ConnectioDB : public QObject<br />{<br /> Q_OBJECT<br />public:<br /> explicit ConnectioDB(QObject *parent = 0);

//o metodo a seguir é responsavel por abrir uma conexao com o meu banco de dados<br /> static bool createConnection(QString plugin, bool memory ,QString connectionName,<br /> QString DBname,QString Hostname, QString user, QString pass);

static bool insert(QObject *obj,QString connectionName);<br />// static bool update(QObject *obj,QString connectionName);<br />// static bool remove(QObject *obj,QString connectionName);

signals:

public slots:

};

#endif // CONNECTIODB_H<br />

arquivo de codigo do meu "ConnectionDB"

<br />#include "connectiodb.h"<br />#include <QMessageBox><br />#include <QSqlDatabase><br />#include <QSqlError><br />#include <QSqlQuery><br />#include "QString"<br />#include "QDebug"<br />#include "QtGui"<br />#include "QMetaObject"<br />#include <QVariant>

ConnectioDB::ConnectioDB(QObject '''parent) :<br /> QObject(parent)<br />{
<br />}
<br />bool ConnectioDB::createConnection(QString plugin, bool memory, QString connectionName, QString DBname, QString Hostname, QString user, QString pass)<br />{<br /> /'''<br /> Essa funçao abrira uma conexão, se for passado as seguintes informações:

plugin* - É informado o plugin referente ao banco de dados que sera feito a conexão.

local* - Apenas para o QSQLITE onde pode assumir os valores "memory" ou "null"

connectionname* - Nome da conexão que sera criada

Hostname - Local onde esta o servidor. Desnecessario quando o plugin for o QSQLITE

user - Usuário, necessario quando a conexao requer autenticaçao.

pass - Senha, necessario quando a conexao requer autenticaçao.

OBS: os parametros descritos com o simbolo * indica que o parametro é obrigatorio. Demais<br /> pode ser informado o valor null para indicar que nao sera usado.

'''falta descrever alguns parametros.
<br />*/<br /> QSqlDatabase db = QSqlDatabase::addDatabase(plugin, connectionName);<br /> if(!memory)<br /> {<br /> if(!Hostname.isEmpty())<br /> db.setHostName(Hostname);<br /> if(!user.isEmpty())<br /> db.setUserName(user);<br /> if(!pass.isEmpty())<br /> db.setPassword(pass);<br /> if(!DBname.isEmpty())<br /> db.setDatabaseName(DBname);<br /> }<br /> else db.setDatabaseName(":memory:");

if (!db.open())<br /> {<br /> QMessageBox::critical(0, qApp->tr("Cannot open database"),<br /> qApp->tr("Unable to establish a database connection."<br /> "This example needs SQLite support. Please read "<br /> "the Qt SQL driver documentation for information how "<br /> "to build it."<br /> "Click Cancel to exit."), QMessageBox::Cancel);<br /> qDebug()<<"Create Connection"<<connectionName<<false<<"- DATA BASE:"<<DBname;<br /> return false;<br /> }

qDebug()<<"Create Connection"<<connectionName<<true<<"- DATA BASE:"<<DBname;<br /> return true;<br />}

bool ConnectioDB::insert(QObject '''obj, QString connectionName)<br />{
<br /> const QMetaObject''' metaObject = obj->metaObject();<br /> QString colums="";<br /> QString table=obj->objectName();//estou usando o nome do objeto para referenciar o nome da tabela<br /> QString values="";<br /> //processa os parametros

//pega a propriedade que possui o nome "parameters"<br /> // QVariant v = obj->property(metaObject->property(metaObject->indexOfProperty("parameters")).name());<br /> QVariant v = obj->property("parameters");//retorna um valor a partir do nome da propriedade

//leitura dos parametros<br /> QString parameters=v.toString();<br /> //separa e joga em uma lista<br /> QStringList list=parameters.split(";");

for (int i = 0; i < list.size(); +''i)<br /> {<br /> QString str=list.at(i).toLocal8Bit().constData();<br /> if(str.contains("colums"))<br /> {<br /> // str.remove("colums(");<br /> str.remove("colums");<br /> // str.remove(")");<br /> colums=str;<br /> qDebug()<<"colums="<<colums;<br /> }else if(str.contains("table"))<br /> {<br /> str.remove("table(");<br /> str.remove(")");<br /> table=str;<br /> qDebug()<<"table="<<table;<br /> }<br /> }
<br /> //reunindo os valores a serem inseridos<br /> if(colums.isEmpty())<br /> {<br /> for(int i = metaObject->propertyOffset(); i < metaObject->propertyCount();i)<br /> {
<br /> QVariant v = obj->property(metaObject->property(i).name());<br /> if(!QString(metaObject->property(i).name()).contains("parameters",Qt::CaseInsensitive))//remove "parameters" da inserçao<br /> {<br /> if(!colums.isEmpty())<br /> colums''=",";<br /> colums+=QString::fromLatin1(metaObject->property(i).name()).toLower();

if(colums.contains(QString::fromLatin1(metaObject->property(i).name()).toLower()))<br /> {<br /> if(!values.isEmpty()) values+=",";<br /> values+="'"''v.toString()''"'";<br /> }<br /> }<br /> }<br /> colums="("''colums''")";<br /> } else<br /> {<br /> QString aux=colums;<br /> aux.remove("(");<br /> aux.remove(")");<br /> QStringList columsList=aux.split(",");

for (int i = 0; i < columsList.size(); +''i)<br /> {
<br /> // QVariant v2 = obj->property(metaObject->property(metaObject->indexOfProperty(QString(columsList.at(i).toLocal8Bit()).toAscii())).name());<br />QVariant v2 = obj->property(QString(columsList.at(i).toLocal8Bit()).toAscii());<br /> if(!values.isEmpty()) values''=",";<br /> values+="'"''v2.toString()''"'";<br /> }<br /> }

//faz a inserçao no banco de dados<br /> QSqlQuery *query=new QSqlQuery(connectionName,QSqlDatabase::database(connectionName));<br /> qDebug() <<"values ="<<values<<"colums ="<<colums<<query->exec("INSERT INTO "''table+colums''"VALUES ("+values+");");<br />}<br />

meu arquivo main:

<br />#include "mainwindow.h"<br />#include <QApplication><br />#include <QDebug><br />#include <c1.h><br />#include <connectiodb.h><br />#include <QSqlQuery>

int main(int argc, char *argv[])<br />{<br /> C1 *c1 = new C1;<br /> ConnectioDB::createConnection("QSQLITE",false,"meubd","teste.db",NULL,NULL,NULL);<br /> QSqlQuery *query=new QSqlQuery("meubd",QSqlDatabase::database("meubd"));<br />// qDebug() <<query->exec("CREATE TABLE C1 ( "<br />// "cod INTEGER PRIMARY KEY"<br />// "NOT NULL, "<br />// "campo1 VARCHAR( 128 ), "<br />// "campo2 INT, "<br />// "x INT "<br />// ");");<br /> c1->setObjectName("c1");<br /> ConnectioDB::insert(c1,"meubd");<br /> return 0;<br />}<br />

é isso, próximo post vou mostrar como escrever em um objeto qualquer fazendo um metodo que busca um objeto em uma tabela.