Seite 2 von 3
Re: SQL Abfrage im Hintergrund
Verfasst: 23.02.2010 12:59
von Kiffi
Mr.Vain hat geschrieben:Ebenso möchte ich, dass diese Abfrage jede 5 Minuten ausgeführt wird.
dafür verwendest Du am besten einen Timer.
Einfach mal
AddWindowTimer() in Deine IDE eintippen
und <F1> drücken. Der dann erscheinende Hilfe-Text
enthält alles was Du für das Verständnis brauchst
Grüße ... Kiffi
Re: SQL Abfrage im Hintergrund
Verfasst: 23.02.2010 13:16
von dysti
Also, schau mal hier:
http://www.purearea.net/pb/german/index.htm
Dort findest du alles. Schau dir auch das Code-Archiv an, dort findest du auch Hinweise zum Timer.
Dann natürlich auch in der PB-Hilfe unter Database und hier zusätzlich SQLite SQL Befehle.
Habe im Moment meine Glaskugel verloren, so weiß ich nicht, welches Datenbanksystem du verwendest.
Nach dem Auslesen des DB-Feldes kann man direkt den Wert in die neue Tabelle schreiben.
Das Hineinschreiben bzw. Aktualisieren eines DB-Feldes geht so:
Code: Alles auswählen
DatabaseUpdate(#Datenbank2, "UPDATE employee SET checked=1 WHERE id="+GetDatabaseString(#Datenbank, 0))
Eine neue DB-Tabelle wird so erstellt:
Code: Alles auswählen
DatabaseQuery(#DatenBank2, "Create Table MyTable(ID AutoIncrement, DeadRecord Long, RecordName Text(128), Description memo);" )
Fazit: SQL-Befehle lernen.
Re: SQL Abfrage im Hintergrund
Verfasst: 24.02.2010 10:18
von Mr.Vain
Vielen Dank für eure Hilfe !
Wenn ich die ausgewählten einträge in eine neue (kleinere DB) packe, ist dies dann nachher eine "datenbank-Datei" oder muss ich einen "echten" SQL-Server laufen lassen?
Re: SQL Abfrage im Hintergrund
Verfasst: 24.02.2010 11:36
von Kiffi
Mr.Vain hat geschrieben:Wenn ich die ausgewählten einträge in eine neue (kleinere DB) packe, ist dies dann nachher eine "datenbank-Datei" oder muss ich einen "echten" SQL-Server laufen lassen?
stammt Deine 'große' Datenbank denn aus einem SQL Server? Und warum
trägst Du die Daten überhaupt in eine 'kleine' Datenbank ein? Wie erzeugst
Du die 'kleine' Datenbank?
Grüße ... Kiffi
Re: SQL Abfrage im Hintergrund
Verfasst: 24.02.2010 13:06
von Mr.Vain
Kiffi hat geschrieben:Mr.Vain hat geschrieben:Wenn ich die ausgewählten einträge in eine neue (kleinere DB) packe, ist dies dann nachher eine "datenbank-Datei" oder muss ich einen "echten" SQL-Server laufen lassen?
stammt Deine 'große' Datenbank denn aus einem SQL Server? Und warum
trägst Du die Daten überhaupt in eine 'kleine' Datenbank ein? Wie erzeugst
Du die 'kleine' Datenbank?
Grüße ... Kiffi
Was ich erstellen möchte, ist ein Informations-Programm in dem ich mit einem Suchbegriff Daten aus einer DB auslesen kann.
Die gesuchten Daten befinden sich in einer SEHR großen Tabelle, in der etliche unwichtige Daten enthalten sind. Deswegen möchte ich im Hintergrund (alle 10 Minuten) eine Abfrage dieser großen Tabelle tätigen und die benötigten Daten lokal zwischenspeichern, um die Suche zu beschleunigen.
Re: SQL Abfrage im Hintergrund
Verfasst: 24.02.2010 14:52
von Kiffi
Mr.Vain hat geschrieben:Die gesuchten Daten befinden sich in einer SEHR großen Tabelle, in der etliche unwichtige Daten enthalten sind. Deswegen möchte ich im Hintergrund (alle 10 Minuten) eine Abfrage dieser großen Tabelle tätigen und die benötigten Daten lokal zwischenspeichern, um die Suche zu beschleunigen.
ok, verstanden. Ich würde Dir hier eine SQLite - Memory - Datenbank empfehlen -> OpenDatabase(..., ":memory:", ...)
Diese ist 'by Design' sehr schnell und kann ja dann bei Programmende verworfen werden.
Da muss dann nichts gespeichert werden oder so.
Grüße ....Kiffi
Re: SQL Abfrage im Hintergrund
Verfasst: 24.02.2010 22:34
von SirMatti74
Irgendwie willst Du also einen Index über Deine Daten per PureBasic erstellen, um im Anschluss schneller suchen zu können. Mal darüber nachgedacht, die Sache direkt in Deiner Datenbank mit einem Index auf dem/den angesprochenen Suchfeld(ern) zu erschlagen. Ein Index halbwegs vernünftig angelegt beschleunigt die Suche bspw. bei einer MySQL-Datenbank enorm. Somit könntest Du Dir das ganze Geraffel mit der Aktualisierung Deines Indexes aller paar Minuten ersparen und es wäre obendrein fachlich sauber (z.B. keine Dopplung bereits vorhandener Daten...).
Grüße
Re: SQL Abfrage im Hintergrund
Verfasst: 26.02.2010 10:37
von Mr.Vain
Danke für eure Hilfe,
das mit dem Timer funktioniert einwandfrei.
Bin gerade dabei, das Zwischenspeichern in eine DB via SQLite zu realisieren.
Die große vorhandene Tabelle kann ich leider nicht ändern.
Hier mein Lösungs-Ansatz:
Code: Alles auswählen
UseODBCDatabase()
DBID = OpenDatabase(#PB_Any, DB$, "", "" ,#PB_Database_ODBC )
If DBID > 0
CurrDate$ = FormatDate("%yyyy-%mm-%dd %hh-%ii-%ss", Date())
Command$ = "select ..........."
If DatabaseQuery(DBID, Command$)
While NextDatabaseRow(DBID) ; alle Einträge durchlaufen
Line.s = "'"+GetDatabaseString(DBID, 1)+"', '"+GetDatabaseString(DBID, 2)+"', '"+GetDatabaseString(DBID, 3)+"', '"+GetDatabaseString(DBID, 4)+"', '"+GetDatabaseString(DBID, 5)+"'"
Debug Line.s
Wend
FinishDatabaseQuery(DBID)
Else
MessageRequester("Fehler", "Fehler bei der Datenbank abfrage!")
EndIf
Else
MessageRequester("Fehler", "Kann die Datenbank nicht öffnen!")
EndIf
CloseDatabase(DBID)
Mit diesem Code lese ich die gewünschten Daten aus.
Soll ich nun nach dem
die Daten pro Zeile direkt in eine SQLite DB schreiben oder ist es sinnvoll erst alle Daten zwischenzuspeichern (Linked List) und später alles einzeln in eine neue DB zu schreiben?
2. Frage:
Ich hatte es so gedacht, dass ich dieses Programm im Hintergrund laufen lasse, wobei ich hier kein DB-Update machen kann, sondern jedes mal die Tabellle neu schreiben muss.
Das Benutzer-Programm (mit einer Such-Maske) soll im Vordergrund sein und bei einer Suche auf die neue DB zugreifen.
Kann es hier nicht zu Problemen führen, wenn ich eine Suche Durchführe und das 2. Programm die DB neu schreiben will ?
Re: SQL Abfrage im Hintergrund
Verfasst: 27.02.2010 18:48
von dysti
zwischenzuspeichern (Linked List) und später alles einzeln in eine neue DB zu schreiben?
Ich würde sofort alles direkt speichern
Kann es hier nicht zu Problemen führen, wenn ich eine Suche Durchführe und das 2. Programm die DB neu schreiben will ?
Es kommt zu keinem Problem sofern du PostgreSQL, SQLite bzw. Mysql verwendest.
Ich kenne die Größe des Projektes nicht.
Würde dir erstmal zu PostgreSQL raten, da es auch fest in PB integriert ist.
Es gibt verschiedene Zugriffsarten in PostgreSQL, wie shared oder lock.
Einfach mal in der PB-Hilfe schauen.
Re: SQL Abfrage im Hintergrund
Verfasst: 01.03.2010 15:42
von Mr.Vain
danke.
gibt es in PB ein Befehl, um den Stand bzw. die Erstellung einer DB zu ermitteln (Datum) ?
wie mache ich das, dass der Cursor immer in einem Gadget bleibt?