20#include "KWQtSqlPowerSerialDataSource.h"
21#include "KWQtSqlPowerSerialDataSource.moc"
22#include "KWQtSqlMailMergeOpen.h"
27#include <kpushbutton.h>
28#include <tqsqldatabase.h>
29#include <tqmessagebox.h>
31#include <tqsqlrecord.h>
32#include <tqsqlcursor.h>
33#include <tqdatatable.h>
36#define KWQtSqlBarIcon( x ) BarIcon( x, db->KWInstance() )
44KWQtSqlPowerSerialDataSource::KWQtSqlPowerSerialDataSource(TDEInstance *inst,TQObject *parent)
45 : KWQtSqlSerialDataSourceBase(inst,parent),myquery(0)
50KWQtSqlPowerSerialDataSource::~KWQtSqlPowerSerialDataSource()
52 if (myquery)
delete myquery;
53 TQSqlDatabase::removeDatabase(
"KWTQTSQLPOWER");
56void KWQtSqlPowerSerialDataSource::refresh(
bool force)
58 if ((force) || (myquery==0))
65 TQString tmp=query.upper();
66 if (!tmp.startsWith(
"SELECT"))
return;
67 if ((!database) || (!database->isOpen()))openDatabase();
68 myquery=
new KWMySqlCursor(query,
true,database);
69 myquery->setMode(TQSqlCursor::ReadOnly);
71 kdDebug()<<TQString(
"There were %1 rows in the query").arg(myquery->size())<<endl;
74TQString KWQtSqlPowerSerialDataSource::getValue(
const TQString &name,
int record )
const
78 if (!myquery)
return name;
79 if ( num < 0 || num > (
int)myquery->size() )
81 if (!myquery->seek(num,
false))
return i18n(
">>>Illegal position within datasource<<<");
82 if (!myquery->contains(name))
return i18n(
">>>Field %1 is unknown in the current database query<<<").arg(name);
83 return (myquery->value(name)).toString();
86void KWQtSqlPowerSerialDataSource::save( TQDomDocument &doc, TQDomElement &parent)
88 TQDomElement def=doc.createElement(TQString::fromLatin1(
"DEFINITION"));
89 parent.appendChild(def);
91 TQDomElement defEnt=doc.createElement(TQString::fromLatin1(
"DATABASE"));
92 defEnt.setAttribute(TQString::fromLatin1(
"hostname"),hostname);
93 defEnt.setAttribute(TQString::fromLatin1(
"port"),port);
94 defEnt.setAttribute(TQString::fromLatin1(
"driver"),driver);
95 defEnt.setAttribute(TQString::fromLatin1(
"databasename"),databasename);
96 defEnt.setAttribute(TQString::fromLatin1(
"username"),username);
97 def.appendChild(defEnt);
99 defEnt=doc.createElement(TQString::fromLatin1(
"QUERY"));
100 defEnt.setAttribute(TQString::fromLatin1(
"value"),query);
101 def.appendChild(defEnt);
103 TQDomElement sampleEnt=doc.createElement(TQString::fromLatin1(
"SAMPLERECORD"));
104 parent.appendChild(sampleEnt);
105 for (DbRecord::Iterator it=sampleRecord.begin();it!=sampleRecord.end();++it)
107 TQDomElement fieldEnt=doc.createElement(TQString::fromLatin1(
"FIELD"));
108 fieldEnt.setAttribute(TQString::fromLatin1(
"name"),it.key());
109 sampleEnt.appendChild(fieldEnt);
114void KWQtSqlPowerSerialDataSource::load( TQDomElement& parentElem )
117 TQDomNode defNd=parentElem.namedItem(
"DEFINITION");
120 TQDomElement def=defNd.toElement();
121 TQDomNode dbNd=def.namedItem(
"DATABASE");
124 TQDomElement dbEnt=dbNd.toElement();
125 if (dbEnt.tagName()==TQString::fromLatin1(
"DATABASE"))
127 hostname=dbEnt.attribute(TQString::fromLatin1(
"hostname"));
128 port=dbEnt.attribute(TQString::fromLatin1(
"port"));
129 driver=dbEnt.attribute(TQString::fromLatin1(
"driver"));
130 databasename=dbEnt.attribute(TQString::fromLatin1(
"databasename"));
131 username=dbEnt.attribute(TQString::fromLatin1(
"username"));
134 TQDomNode queryNd=def.namedItem(
"QUERY");
135 if (!queryNd.isNull())
137 query=queryNd.toElement().attribute(TQString::fromLatin1(
"value"));
141 defNd=parentElem.namedItem(
"SAMPLERECORD");
144 TQDomElement def1=defNd.toElement();
145 for (TQDomElement defEnt=defNd.firstChild().toElement();!defEnt.isNull();defEnt=defEnt.nextSibling().toElement())
147 addSampleRecordEntry(defEnt.attribute(TQString::fromLatin1(
"name")));
152bool KWQtSqlPowerSerialDataSource::showConfigDialog(TQWidget *par,
int action)
155 if (action==KWSLEdit)
157 if ((!database) || (!database->isOpen()))openDatabase();
158 KWQtSqlPowerMailMergeEditor *dia=
new KWQtSqlPowerMailMergeEditor(par,
this);
162 else ret=KWQtSqlSerialDataSourceBase::showConfigDialog(par,action);
166void KWQtSqlPowerSerialDataSource::clearSampleRecord() {sampleRecord.clear();}
168void KWQtSqlPowerSerialDataSource::addSampleRecordEntry(TQString name)
169{sampleRecord[name]=name; }
178KWQtSqlPowerMailMergeEditor::KWQtSqlPowerMailMergeEditor( TQWidget *parent, KWQtSqlPowerSerialDataSource *db_ )
179 :KDialogBase( Plain, i18n(
"Mail Merge - Editor" ), Ok | Cancel, Ok, parent,
"", true ), db( db_ )
181 (
new TQVBoxLayout(plainPage()))->setAutoAdd(
true);
182 setMainWidget(widget=
new KWQtSqlPowerWidget(plainPage()));
183 connect(widget->setup,TQ_SIGNAL(clicked()),
this,TQ_SLOT(openSetup()));
184 connect(widget->tables,TQ_SIGNAL(currentChanged(TQListBoxItem*)),
this,TQ_SLOT(slotTableChanged(TQListBoxItem*)));
185 connect(widget->execute,TQ_SIGNAL(clicked()),
this,TQ_SLOT(slotExecute()));
186 connect(
this,TQ_SIGNAL(okClicked()),
this,TQ_SLOT(slotSetQuery()));
187 widget->query->setText(db->query);
191void KWQtSqlPowerMailMergeEditor::slotSetQuery()
193 db->query=widget->query->text();
197void KWQtSqlPowerMailMergeEditor::slotExecute()
199 if (!db->database)
if (!db->openDatabase())
return;
200 TQString tmp=widget->query->text().upper();
201 if (!tmp.startsWith(
"SELECT"))
return;
202 KWMySqlCursor *cur=
new KWMySqlCursor(widget->query->text(),
true,db->database);
203 cur->setMode(TQSqlCursor::ReadOnly);
205 db->clearSampleRecord();
206 kdDebug()<<TQString(
"Fieldname count %1").arg(cur->count())<<endl;
207 for (uint i=0;i<cur->count();i++)
208 db->addSampleRecordEntry(cur->fieldName(i));
210 widget->queryresult->setSqlCursor(cur,
true,
true);
211 widget->queryresult->refresh(TQDataTable::RefreshAll);
214void KWQtSqlPowerMailMergeEditor::slotTableChanged ( TQListBoxItem * item )
216 widget->fields->clear();
219 if (!db->database)
return;
220 TQSqlRecord rec=db->database->record(item->text());
221 for (uint i=0;i<rec.count();i++)
223 widget->fields->insertItem(rec.fieldName(i));
228void KWQtSqlPowerMailMergeEditor::openSetup()
230 KWQtSqlMailMergeOpen *dia=
new KWQtSqlMailMergeOpen(
this,db);
240void KWQtSqlPowerMailMergeEditor::updateDBViews()
242 widget->fields->clear();
243 widget->tables->clear();
244 if (!db->database)
return;
245 widget->tables->insertStringList(db->database->tables());
248KWQtSqlPowerMailMergeEditor::~KWQtSqlPowerMailMergeEditor(){;}
252 KWORD_MAILMERGE_EXPORT KWMailMergeDataSource *create_kwmailmerge_qtsqldb_power(TDEInstance *inst,TQObject *parent)
254 return new KWQtSqlPowerSerialDataSource(inst,parent);