Sqlite Spalte vohanden??

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
Frostie
Beiträge: 60
Registriert: 23. September 2006 09:02

Sqlite Spalte vohanden??

Beitrag von Frostie »

Hallo Leute,

muß zum updaten eine neue Spalte in eine DB einfügen.

Wie macht ihr das? Also, wie fragt Ihr vorher ab ob die Spalte icht schon da ist?

Sqlite hat ja keinen show Befehl.

Danke
Matthias
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Hättest Du dich schon mit SQL befasst, hättest Du dir die Frage sparen können. Sowas kommt in den SQL-Befehl, also entweder:
CREATE TABLE IF NOT EXISTS `table` ......
oder
DROP TABLE IF EXISTS `table`;
CREATE TABLE IF NOT EXISTS `table`.....
Frostie
Beiträge: 60
Registriert: 23. September 2006 09:02

Beitrag von Frostie »

Hallo,

danke erst mal für die schnelle Antwort. :-)

Ich will SPALTEN einfügen.

Nicht kpl. Tables!! Und DROP... und anschließendes CREATE.. fällt auch flach, da die Tabellen bereits gefüllt sind.

Oder funktiert der IF EXISTS auch für Spalten? (Sorry, aber da habe ich es noch nie gemacht, für ganze Tables kannte ich das schon ;-))

Danke
macman
Beiträge: 1738
Registriert: 15. Juni 2005 13:33
Wohnort: Gütersloh
Kontaktdaten:

Beitrag von macman »

Autsch, mein Fehler, wer lesen kann ist klar im Vorteil.

Ich würde einfach die entsprechende Query absetzen und den Rückgabewert auswerten, also 'ALTER TABLE table ADD bla' und gucken was passiert :-)
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

servus,

nichts einfacher als das:

Code: Alles auswählen

ALTER TABLE <TabellenName> ADD COLUMN <SpaltenName>
die <> weg lassen.
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
Frostie
Beiträge: 60
Registriert: 23. September 2006 09:02

Beitrag von Frostie »

Schon klar,

aber siehe meinen Beitrag:

Code: Alles auswählen

Also, wie fragt Ihr vorher ab ob die Spalte nicht schon da ist?
ChMaster
Beiträge: 252
Registriert: 23. Februar 2005 14:44
Wohnort: RP -> Alzey
Kontaktdaten:

Beitrag von ChMaster »

in sqlite kenne ich keine möglichkeit dies zu machen, wie es beim
ms sql geht, das wüste ich. einfach diese abfrage verwenden müsste
so in etwa funktionieren (nur ms sql) :)

Code: Alles auswählen

if not exists(select * from syscolumns where name = 'spaltenname')
begin
    print 'existiert nicht :)'
end
go

natürlich musst du auch wissen in welcher tabelle, dazu gibt es die "im ms sql"
die sysobjects tabelle und mit ein paar kniffen und einem richtigem join geht alles :)

oder du protokollierst selbst mit was du für tabellen erstellst und schreibst
zu der jeweiligen tabelle die spalten mit dazu.
ChMaster
------------ Projekte------------
DBoxFE
DMS
First4 (Plugin-Develper)
Frostie
Beiträge: 60
Registriert: 23. September 2006 09:02

Beitrag von Frostie »

Meine Lsung dazu:

Code: Alles auswählen

QSqlTableModel *model = new QSqlTableModel(0, QSqlDatabase::database( db ) );
	QSqlQuery query( QString::null, QSqlDatabase::database( db ) );
    model->setTable(table_name);
	
	if(model->fieldIndex(field_name) == -1){
		QString row = "ALTER TABLE " + table_name + " ADD " + field_name + " " + field_options;
		query.exec(row);

	QSqlTableModel *model1 = new QSqlTableModel(0,  QSqlDatabase::database( db ) );
	model1->setTable(table_name);
	
	if(model1->fieldIndex(field_name) == -1){
		return false;
	} else {
		return true;
	}
	} else {
		return true;
	}
Antworten