WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Werte von Matlab in SQL Datenbank laden

 

Sebaldus18
Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.10.2019, 20:33     Titel: Werte von Matlab in SQL Datenbank laden
  Antworten mit Zitat      
Hallo zusammen,

ich habe mir über MySQL eine Datenbank erstellt, die ich auch über MATLAB erreichen kann.
Über MySQL erfolgte die Erstellung einer kleinen Tabelle. Nun möchte ich Messwerte aus Matlab an die bestehende Tabelle über eine neue Spalte anfügen.

Meine Versuche, das zu erreichen, blieb bisher ohne Erfolg. Auch im Netz finde ich hierzu keinerlei hilfreiche Informationen.

Lediglich das Anhängen einer neuen Spalte an die bestehende Tabelle habe ich in MATLAB über nachfolgenden Code erreicht:

Code:
sqlquery = ['ALTER TABLE tutorial.produkte ADD Test DECIMAL(10,2)'];
execute(conn,sqlquery);



Könnte mir da jemand bitte weiterhelfen.

Vielen Dank
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 15.10.2019, 21:46     Titel:
  Antworten mit Zitat      
Hallo,

ich verstehe die Frage nicht. Du schreibst, dass du "an die bestehende Tabelle über eine neue Spalte anfügen". Geschafft hast du "das Anhängen einer neuen Spalte an die bestehende Tabelle". Was ist denn der Unterschied?

Hast du es mit Funktionen wie sqlwrite und update versucht?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sebaldus18
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.10.2019, 11:17     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke erstmal für deine Antwort.

Ich versuche das mal mit einem anderen Beispiel zu erklären. Nehmen wir an, ich habe eine Datenbank in MySQL erzeugt, welche die Spalten "messwert_num" und "Datum" besitzt. Meine Messwerte habe ich in MATLAB in der Variable "values" abgespeichert.

Diese Messwerte möchte ich nun an die bestehende Tabelle in der Datenbank anfügen. Als erstes habe ich hierzu eine neue Spalte "messwert" an die bestehende Tabelle angefügt:

Code:
%Neue Spalte anhängen
sqlquery = ['ALTER TABLE tutorial.messwerte ADD messwert DECIMAL(10,2)'];
execute(conn,sqlquery);


d.h. die Tabelle sieht nun so aus:
"messwert_num" | "Datum" | "messwert"

Was mir nun allerdings nicht gelingt, ist die Daten aus der Variable values in die Spalte messwert zu transportieren. Für sqlwrite() müssen die Daten in Form einer Table erzeugt werden, wobei ich mir hier nicht sicher bin, wie ich eine Tabelle mit nur einer Spalte erzeuge.
Daher habe ich mich mit dem update() Befehl beschäftigt. Allerdings funktioniert nachfolgender Code nicht:

Code:
values = {10;8;20};
tablename = 'tutorial.messwerte';
colnames = {'messwert'};
whereclause = {''};
update(conn,tablename,colnames,values,whereclause)


Es scheint mir, dass update() und sqlwrite() an sich nur geeignet sind, wenn ich nur bestimmte Werte einer Spalte ändern möchte, nicht aber die gesamte Spalte (so zeigen es die Beispiele in der MATLAB Hilfe). Denn für jeden zu ändernden Wert muss eine WHERE Bedingung gestellt werden. Dann müsste ich ja später bei 300 Messwerten ebenso viele WHERE Bedigungen erzeugen.

Ich hoffe, meine Argumentation hilft, mein Problem besser zu verdeutlichen.
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 16.10.2019, 20:15     Titel:
  Antworten mit Zitat      
Hallo,

Zitat:
wie ich eine Tabelle mit nur einer Spalte erzeuge.

das wäre das kleinste Problem: table oder array2table

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sebaldus18
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 17.10.2019, 09:55     Titel:
  Antworten mit Zitat      
Danke, das mit array2table hat gut funktioniert Smile . Allerdings werden die Messwerte an die Tabelle angehängt (siehe Bild), ich möchte aber dass sie ab der ersten Zeile eingefügt werden. Wie erreiche ich das?

Code:
values = [10;8;20];
colnames = {'messwert'};
val = array2table(values,'VariableNames',colnames);
sqlwrite(conn,"tutorial.messwerte",val)
 


Tabelle.PNG
 Beschreibung:

Download
 Dateiname:  Tabelle.PNG
 Dateigröße:  4.85 KB
 Heruntergeladen:  224 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Sebaldus18
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 22.10.2019, 12:08     Titel:
  Antworten mit Zitat      
Könnte mir jemand bitte bei oben genanntem Problem noch weiterhelfen?
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 22.10.2019, 16:38     Titel:
  Antworten mit Zitat      
Hallo,

wenn ich das könnte, hätte ich es schon getan. ;)

Es ist zwar nicht die effizienteste Lösung, aber ich würde versuchen, den Table komplett neu zu schreiben statt zu ergänzen. Wenn die Datenmengen überschaubar sind, sollte das kein Performance-Problem machen.

Wenn dir das nicht weiter hilft, kannst du es auch noch bei MATLAB Answers oder beim Technischen Support versuchen

Viele Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Sebaldus18
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 12
Anmeldedatum: 17.10.18
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.10.2019, 11:45     Titel:
  Antworten mit Zitat      
Hallo Harald

achso, das wusste ich nicht. Ich habe es jetzt nochmal mit update() und einer Schleife probiert. So funktioniert es.


Code:

%Verbindung aufbauen
conn = database('user','root','');
data = sqlread(conn,'tutorial.messwerte')

%Messwerte
values = [10;8;20;7;18;39;100];

%Neue Spalte anhängen
sqlquery = ['ALTER TABLE tutorial.messwerte ADD messwert DECIMAL(10,2)'];
execute(conn,sqlquery);
sqlread(conn,'tutorial.messwerte')

%Auswahl der Tabelle
tablename = 'tutorial.messwerte';

%Auswahl der Spalte
colnames = {'messwert'};

%Anzahl Zeilen der Tabelle
num_rows = size(data,1);

%Schleife zum Einfügen der Messwerte in entsprechende Spalte der Tabelle
for i = 1:num_rows
    update(conn,tablename,colnames,values(i),['WHERE num = ', num2str(i)])
end

sqlread(conn,'tutorial.messwerte')
 


Ohne deine Ratschläge wäre ich nicht darauf gekommen. Vielen Dank Very Happy
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2024 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.