QSql Spaltennamen auslesen
-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
QSql Spaltennamen auslesen
Hallo zusammen,
ich hab ein kleines problem mit einer datenbank...
und zwar erzeuge ich die datenbank in meiner datenbank-klasse und im hauptprogramm kann ich die datenbank über einen Menüpunkt befüllen...
Ich habe in meinem hauptprogramm ein tablewidget wo ich den spaltennamen in die datenbank schreibe und die daten ebenfalls...
jetzt bräuchte ich zur kontrolle, ob es diese spalte schon gibt, ich meine da den spaltennamen, eine funktion oder wie soll ich das auslesen?
wisst ihr was ich meine? also ich will kontrollieren ob es schon so eine spalte mit dem spaltennamen gibt bevor ich sie in die datenbank eintrage...
wie ich einzelne einträge in meiner spalte durchsuchen kann weiß ich schon, aber da gibt es keine funktion bzw. befehle zum auslesen des spaltennamens...
bin wirklich ein wenig ratlos...
wäre wirklich für jeden tipp dankbar...
mfg
reinki
ich hab ein kleines problem mit einer datenbank...
und zwar erzeuge ich die datenbank in meiner datenbank-klasse und im hauptprogramm kann ich die datenbank über einen Menüpunkt befüllen...
Ich habe in meinem hauptprogramm ein tablewidget wo ich den spaltennamen in die datenbank schreibe und die daten ebenfalls...
jetzt bräuchte ich zur kontrolle, ob es diese spalte schon gibt, ich meine da den spaltennamen, eine funktion oder wie soll ich das auslesen?
wisst ihr was ich meine? also ich will kontrollieren ob es schon so eine spalte mit dem spaltennamen gibt bevor ich sie in die datenbank eintrage...
wie ich einzelne einträge in meiner spalte durchsuchen kann weiß ich schon, aber da gibt es keine funktion bzw. befehle zum auslesen des spaltennamens...
bin wirklich ein wenig ratlos...
wäre wirklich für jeden tipp dankbar...
mfg
reinki
Klar geht das....
Die Tabellen deiner DB gibts via
dann machste einfach ein auf die Table....
dann gehst durchs resultset.....
Die Tabellen deiner DB gibts via
Code: Alles auswählen
QStringList tableListIB = objQIbaseDb.tables(QSql::Tables);Code: Alles auswählen
select TOP(1) * dann gehst durchs resultset.....
Code: Alles auswählen
colNames.append( query.record().fieldName(actPos));-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
hallo,
besten dank mal für deine antwort...
also ich erkläre jetzt nochmal mein problem genauer...
ich erzeuge beim starten des programms im konstruktor der datenbank-klasse meine datenbank.
diese hat beim start 3 spalten: Name, Datei, Kategorie
im hauptprogramm, kann ich in die datenbank hineinschreiben, dort schreibe ich die jeweils ausgewählte sprache hinein...
beim ersten mal Deutsch und beim zweiten mal z.b. Englisch.
Ich will jetzt gerne überprüfen ob diese Sprache, die ich hineinschreiben will schon als Spalte vorhanden ist.
deshalb, weil ich ja im hauptprogramm bin, kann ich ja
nicht machen, weil ich ja im hauptprogramm bin...
ich will, praktisch im hauptprogramm nachsehen in der datenbank ob die sprache schon als Spalte vorhanden ist...
wie kann ich das am besten machen?
mfg
reinki
besten dank mal für deine antwort...
also ich erkläre jetzt nochmal mein problem genauer...
ich erzeuge beim starten des programms im konstruktor der datenbank-klasse meine datenbank.
diese hat beim start 3 spalten: Name, Datei, Kategorie
im hauptprogramm, kann ich in die datenbank hineinschreiben, dort schreibe ich die jeweils ausgewählte sprache hinein...
beim ersten mal Deutsch und beim zweiten mal z.b. Englisch.
Ich will jetzt gerne überprüfen ob diese Sprache, die ich hineinschreiben will schon als Spalte vorhanden ist.
deshalb, weil ich ja im hauptprogramm bin, kann ich ja
Code: Alles auswählen
QStringList tableListIB = objQIbaseDb.tables(QSql::Tables);ich will, praktisch im hauptprogramm nachsehen in der datenbank ob die sprache schon als Spalte vorhanden ist...
wie kann ich das am besten machen?
mfg
reinki
Code: Alles auswählen
QSqlDatabase::database();-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
sorry, mein fehler...AuE hat geschrieben:ist statisch!!!!!!Code: Alles auswählen
QSqlDatabase::database();
So jetzt habe ich in
Code: Alles auswählen
QStringList tableListDBaber ich benötige ja die schon vorhandenen Spaltennamen...
Wie mache ich das jetzt mit dem
Code: Alles auswählen
select TOP(1) * -
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
ja okay...AuE hat geschrieben:schau dir mal QSqlQuery an!
habs jetzt so probiert:
Code: Alles auswählen
query.exec("SELECT TOP(1) *");
Code: Alles auswählen
query.exec("SELECT TOP(1) * Texte");
und was genau soll ich mit dem "resultset" machen?
-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
So ich hab jetzt die Lösung für mein Problem gefunden...
Und zwar sieht die folgendermaßen aus:
Bin jetzt wieder glücklich
werd jetzt in einer schleife die ganzen spalten durchgehen und schon hab ich das was ich wollte...
trotzdem danke an AuE
Und zwar sieht die folgendermaßen aus:
Code: Alles auswählen
QSqlTableModel model;
QString test = model.headerData(3, Qt::Horizontal, Qt::DisplayRole).toString();
Code: Alles auswählen
model.headerData(Spalte, Horiz. Header od. Vert. Header, DisplayRole);
werd jetzt in einer schleife die ganzen spalten durchgehen und schon hab ich das was ich wollte...
trotzdem danke an AuE
ich habs so
Code: Alles auswählen
void SqlDumpper::GetInfo()
{
QSqlDatabase dbObj = QSqlDatabase::database();
QStringList tablelist = dbObj.tables(QSql::Tables);
ui.treeWidget->clear();
QTreeWidgetItem *MainRootItem = new QTreeWidgetItem(ui.treeWidget);
MainRootItem->setText( 0, ui.leDatabase->text() );
while (!tablelist.empty())
{
QTreeWidgetItem *table = new QTreeWidgetItem(MainRootItem);
table->setText(0, tablelist.at(0));
QSqlQuery query;
query.exec(QString("Select TOP(1)* from %0").arg(tablelist[0]));
if ( query.lastError().isValid() )
qDebug("Query ERROR: %s when executing query '%s'",qPrintable(query.lastError().text() ), qPrintable(query.lastQuery()));
for (int i = 0; i < query.record().count(); i++)
{
QTreeWidgetItem *col = new QTreeWidgetItem(table);
col->setText(0, query.record().fieldName(i));
}
tablelist.pop_front();
}
}-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
hi,
ich hab noch ein kleines problem, hier mal der code:
jetzt legt er mir zwar die neue spalte mit der sprache an, aber leider schreibt er mir nichts in diese spalte hinein...
könnt ihr mir da weiterhelfen?
wäre euch sehr verbunden...
lg reinki
ich hab noch ein kleines problem, hier mal der code:
Code: Alles auswählen
QString Sprache1 = "DE"; // z.B.
QStringList SprachenDB;
if(!SprachenDB.contains(Sprache1, Qt::CaseSensitive))
{
// Spalte hinzufügen, benennen und als VARCHAR definieren
query.exec("ALTER TABLE `Texte`Add " + Sprache1 + " VARCHAR;");
// Funktion NeuLaden aufrufen
m_Datenbank.Laden();
}
QSqlTableModel model;
model.setTable("Texte");
model.select();
//qDebug() << model.select();
for(i = m_Texte.TextMap.begin(); i != m_Texte.TextMap.end(); i++)
{
QModelIndex insertIndex;
row = insertIndex.row() == -1 ? 0 : insertIndex.row();
model.insertRow(row);
QSqlRecord record = model.record(row);
// ID, Datie, Kateogrie
record.setValue("ID", i->ID);
record.setValue("Datei", Datei);
record.setValue("Kategorie", i->Kategorie);
record.setValue(Sprache1, i->MapText[spr1]);
//qDebug() << i.key() << i->MapText[spr1] << " " << record;
// hier findet man in der Konsole:
// QSqlField("DE", QString, generated: yes, typeID: 5)
// was bedeutet das eigentlich?
model.setRecord(row, record); // Record setzen
model.submitAll();
index++;
}
model.select();
könnt ihr mir da weiterhelfen?
wäre euch sehr verbunden...
lg reinki
-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
http://doc.qtsoftware.com/4.5/qsqltable ... itStrategy
was steht denn im Compileroutput nach dem Submit?
was steht denn im Compileroutput nach dem Submit?
-
reinki0013
- Beiträge: 174
- Registriert: 11. November 2008 09:37
- Wohnort: AUT
also ich habe jetzt in der ausgabe-debug-modus, wennAuE hat geschrieben:http://doc.qtsoftware.com/4.5/qsqltable ... itStrategy
was steht denn im Compileroutput nach dem Submit?
ich mit model.lastError() abfrage, "Der Datensatz konnte nicht abgeholt werden"...
was heißt das jetzt?
Folgendes geht bei mir....
Code: Alles auswählen
QSqlTableModel model;
model.setEditStrategy(QSqlTableModel::OnManualSubmit);
model.setTable("T_Test");
model.select();
QModelIndex insertIndex;
int row = insertIndex.row() == -1 ? 0 : insertIndex.row();
model.insertRow(row);
QSqlRecord record = model.record(row);
// ID, Datie, Kateogrie
record.setValue("Name", "bla");
record.setValue("TeilNr", "abs");
record.setValue("BID", 5);
model.setRecord(row, record); // Record setzen
model.submitAll();
model.select();