J Joe73 Active Member Licensed User Mar 28, 2018 #1 Hallo, seit einiger Zeit versuche ich folgendes Problem zu lösen: Ich habe eine Datenbank1 mit Tabelle Werte_A und eine Datenbank2 mit Tabelle Werte_B Nun möchte ich Daten aus Datenbank2 Werte_B in die Datenbank1 Werte_A einfügen. Ich hatte mir das wie folgt vorgestellt: Dim SQL1, SQL2 As SQL SQL1.Initialize (Pfad,"Datenbank1",true) SQL2.Initialize (Pfad,"Datenbank2",true) SQL1.ExecNonQuery ("INSERT INTO Werte_A (Spalte_1) SELECT Spalte_3 FROM Werte_B") habe es getestet mit der Fehlermeldung "no such table: Werte_B..." Hat da vielleicht jemand einen Tip oder muss ich das mittels Cursor und einer Schleife machen? Wollte es eigentlich in "einem Zuge" übertragen mfg Jürgen
Hallo, seit einiger Zeit versuche ich folgendes Problem zu lösen: Ich habe eine Datenbank1 mit Tabelle Werte_A und eine Datenbank2 mit Tabelle Werte_B Nun möchte ich Daten aus Datenbank2 Werte_B in die Datenbank1 Werte_A einfügen. Ich hatte mir das wie folgt vorgestellt: Dim SQL1, SQL2 As SQL SQL1.Initialize (Pfad,"Datenbank1",true) SQL2.Initialize (Pfad,"Datenbank2",true) SQL1.ExecNonQuery ("INSERT INTO Werte_A (Spalte_1) SELECT Spalte_3 FROM Werte_B") habe es getestet mit der Fehlermeldung "no such table: Werte_B..." Hat da vielleicht jemand einen Tip oder muss ich das mittels Cursor und einer Schleife machen? Wollte es eigentlich in "einem Zuge" übertragen mfg Jürgen
MaFu Well-Known Member Licensed User Longtime User Mar 28, 2018 #2 Das geht so nicht, der SQL Befehl ist ja immer auf eine Datenbank bezogen. Da Du zwei Datenbanken hast musst Du über Cursor und Schleife gehen.
Das geht so nicht, der SQL Befehl ist ja immer auf eine Datenbank bezogen. Da Du zwei Datenbanken hast musst Du über Cursor und Schleife gehen.
J Joe73 Active Member Licensed User Mar 28, 2018 #3 Hallo MaFu, das hatte ich schon fast befürchtet. Vielen Dank für die sehr schnelle Antwort auf meine Frage... Werde ich wohl mit Cursor und Schleife arbeiten müssen.... mfg Jürgen
Hallo MaFu, das hatte ich schon fast befürchtet. Vielen Dank für die sehr schnelle Antwort auf meine Frage... Werde ich wohl mit Cursor und Schleife arbeiten müssen.... mfg Jürgen
JOTHA Well-Known Member Licensed User Longtime User Mar 28, 2018 #4 Hallo Joe73, das müsste so funktionieren: Code: Cursor = SQL1.ExecQuery ("SELECT Spalte_1 FROM Werte_A") For i = 0 To Cursor.RowCount - 1 Cursor.Position = i SQL2.ExecNonQuery ("INSERT INTO Werte_B VALUES('Spalte_3')") Next Cursor.Close
Hallo Joe73, das müsste so funktionieren: Code: Cursor = SQL1.ExecQuery ("SELECT Spalte_1 FROM Werte_A") For i = 0 To Cursor.RowCount - 1 Cursor.Position = i SQL2.ExecNonQuery ("INSERT INTO Werte_B VALUES('Spalte_3')") Next Cursor.Close
R rboeck Well-Known Member Licensed User Longtime User Mar 28, 2018 #5 Musst Du nicht! Du öffnest die zweite Datenbank mit: SQL1.ExecNonQuery("ATTACH DATABASE '" & File.Combine(DatenDir,"Database2.db'") & " as db2") und sie verhält sich, als wären die Tabellen Teil der ersten Datenbank. Ich habe selbst einen Insert Befehl von Db2 nach Db1 am Laufen. Ich beziehe mich auf B4J, hoffe aber, dass es bei B4A gleich abläuft. Reinhard
Musst Du nicht! Du öffnest die zweite Datenbank mit: SQL1.ExecNonQuery("ATTACH DATABASE '" & File.Combine(DatenDir,"Database2.db'") & " as db2") und sie verhält sich, als wären die Tabellen Teil der ersten Datenbank. Ich habe selbst einen Insert Befehl von Db2 nach Db1 am Laufen. Ich beziehe mich auf B4J, hoffe aber, dass es bei B4A gleich abläuft. Reinhard
J Joe73 Active Member Licensed User Mar 28, 2018 #6 Hallo, prima Reinhard, vom Prinzip her funktioniert es... Ihr seid Spitze....! Ich muss nun allerdings noch einige Anpassungen vornehmen, auf jeden Fall wurden Daten aus der anderen Datenbank übernommen. Das habe ich gerade getestet. Leider findet man wenig über "ATTACH DATABASE". Nun kann ich mir überlegen welchen Weg ich gehe, diesen oder den mit Cursor und Schleife... mfg Jürgen
Hallo, prima Reinhard, vom Prinzip her funktioniert es... Ihr seid Spitze....! Ich muss nun allerdings noch einige Anpassungen vornehmen, auf jeden Fall wurden Daten aus der anderen Datenbank übernommen. Das habe ich gerade getestet. Leider findet man wenig über "ATTACH DATABASE". Nun kann ich mir überlegen welchen Weg ich gehe, diesen oder den mit Cursor und Schleife... mfg Jürgen
P pucki Active Member Licensed User Longtime User Mar 29, 2018 #7 Bei so Sachen solltest du auch gleich dich mit den "Transaktionen" beschäftigen. Das beschleunigt die Sache um mindestens Faktor 50 und mehr. Besonders wenn du Sql-Befehle per Schleife (for/next etc.) machst. Du kannst deine Operation testen, in den du die 2 Befehle (beginn und end) einfach auskommentierst. Wichtig ist nur eins. Du darfst NIEMALS den End-Befehl vergessen. Wenn du ihn vergisst, wird die Datenbank NICHT geändert und alles in der Schleife ist vergessen. Eins meiner VB-Prg. auf den PC legt so ca. 50.000 Datensätze neu in einer SQL-Datenbank in unter 3 Sekunden an. Die Schiebe ich dann auf mein Tablett wo sie mit B4A weiter verarbeitet wird. Gruß Pucki Last edited: Mar 29, 2018
Bei so Sachen solltest du auch gleich dich mit den "Transaktionen" beschäftigen. Das beschleunigt die Sache um mindestens Faktor 50 und mehr. Besonders wenn du Sql-Befehle per Schleife (for/next etc.) machst. Du kannst deine Operation testen, in den du die 2 Befehle (beginn und end) einfach auskommentierst. Wichtig ist nur eins. Du darfst NIEMALS den End-Befehl vergessen. Wenn du ihn vergisst, wird die Datenbank NICHT geändert und alles in der Schleife ist vergessen. Eins meiner VB-Prg. auf den PC legt so ca. 50.000 Datensätze neu in einer SQL-Datenbank in unter 3 Sekunden an. Die Schiebe ich dann auf mein Tablett wo sie mit B4A weiter verarbeitet wird. Gruß Pucki
Alexander Stolte Expert Licensed User Longtime User Mar 29, 2018 #8 pucki said: mit den "Transaktionen" beschäftigen Click to expand... Hier nachzulesen, ist zwar auf Englisch, aber es gibt ja Möglichkeiten. Ich habe eine bessere Leistung meiner App festgestellt, nachdem ich auf Transaktionen umgestellt habe, weil die Inserts schneller durchlaufen.
pucki said: mit den "Transaktionen" beschäftigen Click to expand... Hier nachzulesen, ist zwar auf Englisch, aber es gibt ja Möglichkeiten. Ich habe eine bessere Leistung meiner App festgestellt, nachdem ich auf Transaktionen umgestellt habe, weil die Inserts schneller durchlaufen.
P pucki Active Member Licensed User Longtime User Mar 29, 2018 #9 Alexander Stolte said: Hier nachzulesen, ist zwar auf Englisch, aber es gibt ja Möglichkeiten. Ich habe eine bessere Leistung meiner App festgestellt, nachdem ich auf Transaktionen umgestellt habe, weil die Inserts schneller durchlaufen. Click to expand... Genau deshalb hab ich ihn ja darauf aufmerksam gemacht. Gruß Pucki
Alexander Stolte said: Hier nachzulesen, ist zwar auf Englisch, aber es gibt ja Möglichkeiten. Ich habe eine bessere Leistung meiner App festgestellt, nachdem ich auf Transaktionen umgestellt habe, weil die Inserts schneller durchlaufen. Click to expand... Genau deshalb hab ich ihn ja darauf aufmerksam gemacht. Gruß Pucki
J Joe73 Active Member Licensed User Mar 29, 2018 #10 Hallo, Vielen Dank für die weiteren Ratschläge bzw. Tipps. Ich werde mir das auf jeden Fall mal ansehen. Für Übersetzungen nehme ich seit kurzem den DeepL Translator. Er liefert sehr gute Ergebnisse, oftmals besser als der von Google u.a. Nun liegt es nur noch an der Umwandlung des Datum/Zeit Format zu welcher Variante ich mich entschließe. Vielleicht hat hierfür auch jemand einen Tipp ob man bei der Variante mit: INSERT INTO ..... SELECT .... auch das Datum/Zeit Format mit ändern kann. Eine Möglichkeit wäre vielleicht auch zuerst das Format der gesamten 'Quell'-Tabelle zu ändern. Ich habe diese ja zuvor kopiert und nach der Übertragung kann sie eigentlich gelöscht werden. mfg Jürgen
Hallo, Vielen Dank für die weiteren Ratschläge bzw. Tipps. Ich werde mir das auf jeden Fall mal ansehen. Für Übersetzungen nehme ich seit kurzem den DeepL Translator. Er liefert sehr gute Ergebnisse, oftmals besser als der von Google u.a. Nun liegt es nur noch an der Umwandlung des Datum/Zeit Format zu welcher Variante ich mich entschließe. Vielleicht hat hierfür auch jemand einen Tipp ob man bei der Variante mit: INSERT INTO ..... SELECT .... auch das Datum/Zeit Format mit ändern kann. Eine Möglichkeit wäre vielleicht auch zuerst das Format der gesamten 'Quell'-Tabelle zu ändern. Ich habe diese ja zuvor kopiert und nach der Übertragung kann sie eigentlich gelöscht werden. mfg Jürgen
J Joe73 Active Member Licensed User Mar 29, 2018 #11 ich glaube ich habs, mit SELECT (strftime ("%s",date)* 1000) FROM ... komme ich auf die Ticks bzw. andere Formate... wieder was gelernt mfg Jürgen
ich glaube ich habs, mit SELECT (strftime ("%s",date)* 1000) FROM ... komme ich auf die Ticks bzw. andere Formate... wieder was gelernt mfg Jürgen
P pucki Active Member Licensed User Longtime User Mar 30, 2018 #12 Naja, ich bin ein Fan des Datums falschrum als Text. Heute ist der 2018-03-30. Das hat 2 Vorteile. Ich kann perfekt sortierten und ich habe keine Diskussionen mit Datumsformat-Regeln. Gruß Pucki
Naja, ich bin ein Fan des Datums falschrum als Text. Heute ist der 2018-03-30. Das hat 2 Vorteile. Ich kann perfekt sortierten und ich habe keine Diskussionen mit Datumsformat-Regeln. Gruß Pucki
MaFu Well-Known Member Licensed User Longtime User Mar 30, 2018 #13 pucki said: Naja, ich bin ein Fan des Datums falschrum als Text. Heute ist der 2018-03-30. Das hat 2 Vorteile. Ich kann perfekt sortierten und ich habe keine Diskussionen mit Datumsformat-Regeln. Gruß Pucki Click to expand... Naja, normalerweise speichert man das Datum in einer Datenbank als Zahl. Dann gibt es auch keine Probleme mit dem sortieren und Du kannst ohne Verrenkungen bei der Ausgabe das Datum formatieren wie Du lustig bist.
pucki said: Naja, ich bin ein Fan des Datums falschrum als Text. Heute ist der 2018-03-30. Das hat 2 Vorteile. Ich kann perfekt sortierten und ich habe keine Diskussionen mit Datumsformat-Regeln. Gruß Pucki Click to expand... Naja, normalerweise speichert man das Datum in einer Datenbank als Zahl. Dann gibt es auch keine Probleme mit dem sortieren und Du kannst ohne Verrenkungen bei der Ausgabe das Datum formatieren wie Du lustig bist.
J Joe73 Active Member Licensed User Mar 31, 2018 #14 Hallo, Vielen Dank auch an Euch für Eure Hinweise. Ich speichere das Datum/Zeit als Zahl, deshalb meine Umrechnung in Millisekunden und zusätzlich als String. So kann ich bei Bedarf auf beides zugreifen. Übrigens. falls jemand die Methode mittels ATTACH DATABASE nutzen möchte, nicht vergessen die hinzugefügte Datenbank mittels DETACH DATABASE wieder zu lösen. Vor allem wenn man den Befehl in einer SUB verwendet welche später nochmals aufgerufen wird. Frohe Ostern und Grüße von Jürgen
Hallo, Vielen Dank auch an Euch für Eure Hinweise. Ich speichere das Datum/Zeit als Zahl, deshalb meine Umrechnung in Millisekunden und zusätzlich als String. So kann ich bei Bedarf auf beides zugreifen. Übrigens. falls jemand die Methode mittels ATTACH DATABASE nutzen möchte, nicht vergessen die hinzugefügte Datenbank mittels DETACH DATABASE wieder zu lösen. Vor allem wenn man den Befehl in einer SUB verwendet welche später nochmals aufgerufen wird. Frohe Ostern und Grüße von Jürgen