Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

Hilfe zu SQLite, Aufbau, Abfrage, Ändern etc.


  • Please log in to reply
84 replies to this topic
nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Gui,Submit gibt es doch.


Visit the new forum ahkscript.org.

http://ahkscript.org


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Geben ja, aber Gui, Submit holt den Inhalt des Textelements nicht in die Var.



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

@fump2000: Probieren geht über Studieren! wink.png


Prefer ahkscript.org for the time being.


nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

@fump2000: Probieren geht über Studieren! ;)

+1


Visit the new forum ahkscript.org.

http://ahkscript.org


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Ja is ja gut :)

 

Ein andere Frage, mal angenommen das Archiv wächst an auf über 100.000 geschlossene Vorgänge und der Admin sollte verrückt genug sein sich alle anzeigen zu lassen.

Sind einem ListView natürliche Grenzen gesetzt? Kann man das einlesen beschleunigen?

 

Ca 15 Wiedervorlagen pro Tag erstellt ein User. Bei ca. 200 Arbeitstagen pro Jahr und ungefähren 50 Usern macht das Pro Jahr ca. 150.000 Einträge.

Zur Recherche soll der Admin in den gespeicherten Archiven der einzelnen Usern auch Suchen können.

 

Bei jedem User wird im Netzwerk eine Archiv DB angelegt. Diese würde ich mit heutigem Wissensstand per Loop einlesen wieviele DB's es gibt und diese dann per parsen einzeln einlesen und ins ListView schreiben.

Das gleiche beim gezielten Duchsuchen nach z. B. eine bestimmten Kundennummer oder ID.

 

Macht das so Sinn???



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012

Anstatt das ganze Archiv in die Listview zu schreibenm, könntest du ja auch nur Teile des Archivs laden z.B. Page 1 Page 2...


Visit the new forum ahkscript.org.

http://ahkscript.org


just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Moin,

 

ich bin mir nicht sicher, ob ich gänzlich verstehe, was Du vorhast.

 

Z.Zt. sehe ich drei Zustände:

  1. Erfassen eines Vorgangs in der User-DB mit Status "offen" und Wiedervorlagedatum.
  2. Abschließen eines Vorgangs in der User-DB mit Status "geschlossen" und Erledigungstext.
  3. Übernahme abgeschlossener Vorgänge in eine Archiv-DB.

Die Archiv-DB würde unter diesen Umständen für zwei Zwecke genutzt:

  1. Überprüfung der Bearbeitung einzelner Vorgänge bei Unstimmigkeiten.
  2. Statistische Auswertungen.

In beiden Fällen wäre es wohl eher nicht notwendig, den gesamten Inhalt der DB in einem ListView anzuzeigen. Notfalls kann man die Treffermenge einer Abfrage künstlich begrenzen: "Die Abfrage ergibt mehr als 1000 Treffer. Schränken Sie bitte die Suchkriterien weiter ein!".

 

Wenn ohnehin nur Admins auf die Archiv-DB zugreifen sollen, wäre deren Leben leichter, wenn die Vorgänge aller User in einer DB gesammelt werden. Wenn das zu einem Mengenproblem werden sollte, könnte man auch eine Archiv-DB pro Kalenderjahr anlegen. Die kann man dann auch ohne weiteres löschen, falls der Datenschutz Löschfristen  vorgibt.


Prefer ahkscript.org for the time being.


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Deine Darstellung stimmt komplett. Genau so soll es sein.

Auf einem unserer Netzlaufwerke wird ein Ordner sein in denen die Datenbanken der User liegen werden. Das Archiv wird im gleichen Ordner erstellt.

 

Die DB heißt dann so: "\Reminder-" . UserName . ".sql"

Das Archiv so: "\Reminder-" . UserName . "-Archiv-" A_YYYY ".sql"

 

Ein Admintool soll diese dann verarbeiten.

 

Wäre es sinnvoller diese einzelnen Archive in eine DB zusammenzufassen?

Ich will das nur so machen um zu vermeiden das mehrere User gleichzeitig auf die gleiche Archiv DB zugreiffen, oder ist das möglich? Können auch mehrere User gleichzeitg ein Archiv befüllen?



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Sollen die User lesend auf die Archiv-DB zugreifen können?

 

Wenn nicht, würde ich nur eine Archiv-DB anlegen. Die würde ich dann nicht "online", sondern nach Ende der Arbeitszeit "offline" durch ein Skript befüllen lassen, das die User-DBen ablappert, "geschlossene älter als xx Tage" ins Archiv schiebt und in der User-DB löscht (oder so kennzeichnet, dass die User die Einträge nicht mehr angezeigt bekommen).


Prefer ahkscript.org for the time being.


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Offline befüllen bedeutet es müsste am Arbeitsende von irgendwem oder irgendwas diese Aktion durchgeführt werden. Ich hab aber leider keine Möglichkeit dies zu automatisieren. Alle Rechner werden heruntergefahren. Klar die Server sind on, da komm ich mit meinem Tool aber nicht drauf. Jedenfalls vorerst nicht.

 

Das muss irgendwie anders gelöst werden.

 

Wenn ich dabei bleibe, dass jedes User-Tool sein Archiv selber anlegt dann könnte ich es doch dem Admin Tool das Sammeln überlassen. Klickt ein Admin auf den "Sammeln" button wird in der DB oder von mir aus in einer Testdatei ein Flag auf 1 gesetzt. Solange dies auf 1 steht kann ein anderer Admin das Sammeln nicht starten. Ist das Tool fertig mit Sammeln setzt es den Flag wieder zurück.

 

Oder hast du ne andere Idee?



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Sollen die User lesend auf die Archiv-DB zugreifen können?

 

Du hast eine Frage nicht beantwortet.


Prefer ahkscript.org for the time being.


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Die User selber werden auf das Archiv keinen Zugriff haben. Zumindest ist dies bisher nicht geplant. Sollte es dazu kommen, wäre es ein "Nur Lesen" Zugriff.



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Gut, dann würde ich erst einmal mit einer Archiv-DB pro Benutzer anfangen. Die würde täglich beim ersten Start der Benutzer-Anwendung gefüllt.

 

Der/die Admin(s) könnten die dann mit relativ geringem Risiko für konkurrierende Zugriffe im Laufe des Tages abarbeiten und in die gemeinsame Archiv-DB übernehmen.


Prefer ahkscript.org for the time being.


fump2000
  • Members
  • 591 posts
  • Last active: Nov 11 2015 07:52 AM
  • Joined: 01 Nov 2012

Hi!

 

Ich bin grad dabei die Archiv Sache anzugehen. Dazu hab ich folgende idee:

 

Ich erstelle eine DB für dieses Archiv. Beim Start des Scripts erfolgt dies so:

DB := New SQLiteDB
If !DB.OpenDB(DBArchivFilePath) {
   MsgBox, 16, SQLite Error, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode
   ExitApp
}
SQL := "CREATE TABLE IF NOT EXISTS " . TableNameArchiv . " (Reminder_ID, KD_Nr, D_ID, ToDo, RR_Nr, WVL_Zeitpunkt, Status, ToDo_Text, ToDo_Erl_Text, Benutzer, FullTime, ShowFlag, "
     . " PRIMARY KEY(Reminder_ID ASC, KD_Nr ASC, D_ID ASC, Benutzer ASC));"
If !DB.Exec(SQL)
   MsgBox, 16, SQLite Error1, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode
DB.CloseDB(DBArchivFilePath)

Danach springe ich ein Label an...

 

Dazu diese Gedanken:

Archiv:
SelectDate := A_Now
SelectDate += -10, Days

; Geht das so? Also Abhängig von der ZEit und Status "Geschlossen" ? Funktioniert das mit der && Verknüpfung?
SQL := "SELECT * FROM " . TableName . " WHERE FullTime <= '" . SelectDate . "' && Status = '" . StatusArray[2] . "';"
If !DB.GetTable(SQL, Result)
   MsgBox, 16, SQLite Error: GetTable, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode


; Hier erstellen eines Listviews um die Daten von Result zwischenzuspeichern.
Gui, Helper:Add, ListView, x2 y20 w990 h240 vResultsHelper, %ColumnNames%

LVName := "ResultsHelper"
ShowTable(Result, LVName, Helper)

; Hiermit entsprechend der Reihen die mit der entsprechenden ID aus der hauptDB gelöscht.
Loop % LV_GetCount()
	{
		LV_GetText(ID,A_Index,1)

                SQL := " wie genau der Befehl hier aussehen muss weiß ich noch nicht. Denke mal es wird mit Drop zutun haben?
	}


DB.CloseDB(DBFilePath) ; DB schließen
DB := New SQLiteDB ;Archiv DB öffnen
If !DB.OpenDB(DBArchivFilePath) {
   MsgBox, 16, SQLite Error, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode
   ExitApp
}

; Hier dann die Reihen aus dem Helper ListView per Loop ins Archiv befördern. Anschließend die DB schließen.

DB.CloseDB(DBArchivFilePath)
DB := New SQLiteDB
If !DB.OpenDB(DBFilePath) {
   MsgBox, 16, SQLite Error, % "Msg:`t" . DB.ErrorMsg . "`nCode:`t" . DB.ErrorCode
   ExitApp
}
Return

Bin ich da auf dem richtigen Weg oder ist das ganze Müll?

 

MfG
fump



just me
  • Members
  • 1496 posts
  • Last active: Nov 03 2015 04:32 PM
  • Joined: 28 May 2011

Hallo,

 

der erste Teil ist schon mal nicht falsch.

 

Ob Dein SELECT im zweiten Teil funktioniert, hängt vom Format des in der User-DB in FullTime abgelegten Werts ab. SelectDate hat jedenfalls den Aufbau 20130627160023.

 

Ein "Helfer-ListView" braucht es nicht. Du kannst die Werte direkt aus dem zurückgegebenen Table-Objekt auslesen und per INSERT in die Archiv-DB schreiben.

 

Danach wäre vielleicht auch noch ein DELETE mit den Auswahlkriterien der SELECT in der User-DB angebracht.


Prefer ahkscript.org for the time being.