Guten Tag allerseits,
vorweg: ich habe keinerlei Vorwissen bzgl. Datenbanken und arbeite mich gerade ein. Ich hoffe, ihr könnt mich etwas unterstützen.
Ich habe gerade eine SQLite Datenbank in Matlab eingelesen, diese um weitere Spalten ergänzt, mit Daten aus einer Excel-Tabelle beschrieben und möchte die zusätzlichen Spalten zurück in die Datenbank schreiben. Der Grund, wieso ich die komplette Datenbank zuerst einlesen musste, ist weil ich die neuen Daten chronologisch in die Datenbank sortieren musste (falls es jemanden wundert).
Was ich bisher getan habe:
for k = 1:size(Spaltennamen,1)
momSpaltenname = cell2mat(Spaltennamen(k));
try
query = sprintf('ALTER TABLE Kennzahlen ADD %s varchar ', momSpaltenname);
exec(conn, query);
catch
end
end
Spaltennamen sind, wie der Name schon sagt, die Namen der jeweiligen Spalten. Hiermit habe ich meine Datanbank um die notwendigen Spalten erweitert. Das funktioniert auch soweit sehr gut.
Nach meinem Sortiervorgang möchte ich nun die Zelleninhalte einfügen.
for k=rowstart+1:size(GivenDB,2) %Spalten durchgehen; rowstart ist die letzte Spalte der ursprünglichen Datenbank
for L=2:size(GivenDB,1) %Zeilen durchgehen
momSpaltenname=GivenDB{1,k}; %GivenDB ist die ergänzte Datenbank
momZelleninhalt=GivenDB{L,k};
momZeile=GivenDB{L,1};
try
query= sprintf('UPDATE Kennzahlen SET %s = %f WHERE %s = %f',momSpaltenname,momZelleninhalt,Par_DBLaufindex,momZeile);
exec(conn, query);
catch
end
end
end
Hier gehe ich in 2 Schleifen zuerst die Zeilen, dann die Spalten des neu hinzugefügten Abschnittes durch. Durch das try / catch fange ich die Fehlermeldung ab, die kommen würde, wenn ich leere Zelleninhalte schreiben möchte (nicht jede Zeile der neuen Spalten wird beschrieben).
An sich funktioniert das auch sehr gut... bis der Zelleninhalt ein string wird. Die neuen Daten sind Spaltenweise Zahlen oder Wörter. Ich weiß, dass man Sonderzeichen oder Ähnliches nicht in SQLite schreiben kann, daher habe ich die Inhalte angepasst.
Wenn ich test-weise den Inhalt einer Zelle 'a' nenne, wird mir ohne Fehlermeldung eine '97' in die Datenbank geschrieben. Bei dem Wort 'test' kommt die Fehlermeldung:
"Error using sqlite/exec
Received exception (SQL error or missing database VERZEICHNIS\DATENBANK.db. (unrecognized token:
"67.000000UPDATE")) upon attempting an operation; details: UPDATE Kennzahlen SET Werkzeug_Bezeichnung3 = 116.000000 WHERE est =
67.000000UPDATE Kennzahlen SET ycID = 280570.000000 WHERE ."
Wenn ich die Datenbank öffne, wird mir bei "Schema" angezeigt, dass alle meine neu erstellten Spalten 'real' sind, was vermutlich auf Zahlen beschränkt ist. Das 'a' schreibt der mir wohl in eine Zahl, daher keine Fehlermeldung. Aber ich benötige manche der Spalten als String in der Datenbank. Kann mir hier jemand helfen?
Bin hier etwas am verzweifeln, weil ich nicht weiß, wo ich ansetzen muss. Würde mich über jede Hilfe freuen.
Gruß
Hasan
vorweg: ich habe keinerlei Vorwissen bzgl. Datenbanken und arbeite mich gerade ein. Ich hoffe, ihr könnt mich etwas unterstützen.
Ich habe gerade eine SQLite Datenbank in Matlab eingelesen, diese um weitere Spalten ergänzt, mit Daten aus einer Excel-Tabelle beschrieben und möchte die zusätzlichen Spalten zurück in die Datenbank schreiben. Der Grund, wieso ich die komplette Datenbank zuerst einlesen musste, ist weil ich die neuen Daten chronologisch in die Datenbank sortieren musste (falls es jemanden wundert).
Was ich bisher getan habe:
for k = 1:size(Spaltennamen,1)
momSpaltenname = cell2mat(Spaltennamen(k));
try
query = sprintf('ALTER TABLE Kennzahlen ADD %s varchar ', momSpaltenname);
exec(conn, query);
catch
end
end
Spaltennamen sind, wie der Name schon sagt, die Namen der jeweiligen Spalten. Hiermit habe ich meine Datanbank um die notwendigen Spalten erweitert. Das funktioniert auch soweit sehr gut.
Nach meinem Sortiervorgang möchte ich nun die Zelleninhalte einfügen.
for k=rowstart+1:size(GivenDB,2) %Spalten durchgehen; rowstart ist die letzte Spalte der ursprünglichen Datenbank
for L=2:size(GivenDB,1) %Zeilen durchgehen
momSpaltenname=GivenDB{1,k}; %GivenDB ist die ergänzte Datenbank
momZelleninhalt=GivenDB{L,k};
momZeile=GivenDB{L,1};
try
query= sprintf('UPDATE Kennzahlen SET %s = %f WHERE %s = %f',momSpaltenname,momZelleninhalt,Par_DBLaufindex,momZeile);
exec(conn, query);
catch
end
end
end
Hier gehe ich in 2 Schleifen zuerst die Zeilen, dann die Spalten des neu hinzugefügten Abschnittes durch. Durch das try / catch fange ich die Fehlermeldung ab, die kommen würde, wenn ich leere Zelleninhalte schreiben möchte (nicht jede Zeile der neuen Spalten wird beschrieben).
An sich funktioniert das auch sehr gut... bis der Zelleninhalt ein string wird. Die neuen Daten sind Spaltenweise Zahlen oder Wörter. Ich weiß, dass man Sonderzeichen oder Ähnliches nicht in SQLite schreiben kann, daher habe ich die Inhalte angepasst.
Wenn ich test-weise den Inhalt einer Zelle 'a' nenne, wird mir ohne Fehlermeldung eine '97' in die Datenbank geschrieben. Bei dem Wort 'test' kommt die Fehlermeldung:
"Error using sqlite/exec
Received exception (SQL error or missing database VERZEICHNIS\DATENBANK.db. (unrecognized token:
"67.000000UPDATE")) upon attempting an operation; details: UPDATE Kennzahlen SET Werkzeug_Bezeichnung3 = 116.000000 WHERE est =
67.000000UPDATE Kennzahlen SET ycID = 280570.000000 WHERE ."
Wenn ich die Datenbank öffne, wird mir bei "Schema" angezeigt, dass alle meine neu erstellten Spalten 'real' sind, was vermutlich auf Zahlen beschränkt ist. Das 'a' schreibt der mir wohl in eine Zahl, daher keine Fehlermeldung. Aber ich benötige manche der Spalten als String in der Datenbank. Kann mir hier jemand helfen?
Bin hier etwas am verzweifeln, weil ich nicht weiß, wo ich ansetzen muss. Würde mich über jede Hilfe freuen.
Gruß
Hasan