![]() |
Datenbank: SQLite • Version: 3 • Zugriff über: DISQLite3
Wie am besten Daten visualisieren und auswahl verarbeiten
:hi: Hi,
ich fühl mich im Moment etwas von einer Aufgabenstellung erschlagen :freak: Das hab ich im Moment: Datenbank: 1x Tabelle für ein TreeView ~1300 Tabellen für die Daten Anwendung: Ich habe im Hauptfenster eine DBTreeView Komponente (maximales Level = 1) mit der ich die Tabellen in meiner DB visualisiere. Der Tabellenname setzt sich aus dem Nodenamen und dessen Parentnamen zusammen. Die Inhalte der Tabellen (3 Spalten) werden in 2 ListBox und einer Textfeld Komponente dargestellt (durch auswählen des TreeView Nodes). In jeder Tabelle kann der User zu jeder Row auch eine Kommentarspalte befüllen 8dazu ist das Textfeld). Das möchte ich: Ich möchte dam User nun die Möglichkeit stellen diese Kommentare aus der DB zu Exportieren und später auch wieder zu Importieren. Wie ich an die entsprechenden Felder komme weiß ich schon :) Wo es hakt ist die Visualisierung der Daten. Da ich die Möglichkeit bieten möchte das der USer auswählen kann welche Datensätze Importiert bzw Exportiert werden. Ich sitz nun schon länger hier und überlege wie ich das am besten auf den Schirm bringe... Ich hatte an eine CheckListBox gedacht für den Tabelleninhalt. Aber bei Menge an Tabellen ist das sehr unübersichtlich. Also dachte ich mir das ich dazu noch ein (DB)TreeView nehme damit ich diese angenehme Unterteilung habe wie im Hauptfenster. Das ganze soll später in einer SQLite3 Datei landen bzw aus einer kommen. Nun zu den Fragen :stupid: Wie bekomme ich es hin das im TreeView nur die Elemente angezeigt werden wo auch Kommentare vorhanden sind? Wie kann ich am besten die Auswahl zwischen speichern zur späteren Verarbeitung? Gibt es vielleicht eine Möglichkeit die Daten in der DB selber noch anders zu verknüpfen (Trigger, Views). Wäre es für die Performance der ganzen Aktion vom Vorteil wenn ich die DB an meine vorhandene DB anhänge (ATTACH) und später wieder abhänge (DETACH)? Ich weiß sind eine Menge Fragen aber bin nicht so bewandert was das angeht und ich werd das Gefühl nicht los das mein Ansatz nicht passt :| |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Zitat:
Mal angenommen, du willst die Wetterdaten der letzten 5 Jahre speichern. Wer jetzt für jeden Tag eine eigene Tabelle anlegt und wenn diese Tabellen alle die gleiche Struktur haben hat schon einen Riesenfehler begangen. Haben deine Datentabellen auch die gleiche Struktur; also gleiche Feldnamen und Feldtypen? |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Ja die Tabellen haben alle die gleiche Struktur.
:pale: Mir war nicht bewusst dass das schon ein Fehler ist. |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Zitat:
Um die Daten voneinander unterscheiden zu können muss ein weiteres Feld eingeführt werden. Die kann z.B. ein Datum, die Nummer der Meßreihe oder eine Kundennummer sein. Es muss die Eigenschaft sein, die den Unterschied zwischen deinen 1300 Tabellen ausmacht. Dieses weitere Feld ist dann entweder selbst der Primärschlüssel oder wird zumindest Bestandteil des Primärschlüssels. Du kannst ja mal deine Struktur dieser Tabelle(n) hier zeigen. (also die Liste der Feldnamen und Datentypen) |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
ich hätt gedacht es wäre mit gleichen Strukturn einfacher :gruebel:
und wenn er schon überall ein Feld z.B. mit Datem/Uhrzeit oder 'ner laufenden Nummer drin hat, dann bräcuhte er doch auch kein zusätzliches Feld, daß er die Unterscheidung schon eingebaut hat. :?: |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Hmm ok dann 2 Schritt zurück und das Datanbank Design noch mal überdenken :roll:
Die Datenbank enthält Informationen über Steuergeräte sortiert auf durch die Tabellennamen (Baureihe und Steuergerät und Versionsindex) Beispiel: Baureihe R50 Steuergerät LWR Versionsindex C03 dann hätte die Tabelle den Namen R50LWR_C03 Die Struktur der Tabellen sieht so aus: ID: Integer Autoincrement FSW: VARCHAR PSW: VARCHAR COMMENT: VARCHAR (werde ich wohl nach Blob ändern) Da ID Feld ist nicht unbedingt nötig. Hatte es nur mit eingebaut weil ich dacht es könnte ma von nutzen sein :stupid: @sx2008: Also wenn ich das nun richtig verstanden habe sollte die neue Struktur dann so aussehen: SERIES: VARCHAR (enthält die Baureihenbezeichnung) SG: VARCHAR (enthält Steuergerätebezeichnung und Versionsindex) FSW: VARCHAR (FSW = Funktionsschlüsselwort) PSW: VARCHAR (PSW = Parameterschlüsselwörter) COMMENT: VARCHAR (oder BLOB) Kurz noch was zu den Verbindungen der Spalten: Zu jedem Funktionsschlüsselwort gibt es ein oder mehrere Parameterschlüsselwort/wörter und halt das Kommentar welches durch den Benutzer eigegeben wird. Das Programm auf diese Tabellenstruktur umstellen sollte nicht das Problem sein. Nur das erstellen dauert 4h (Rohdaten im XML Format) :pale: |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Zitat:
Stichwort: INSERT INTO + SELECT |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
ABer wie bekomme ich dann die Bezeichner in die beiden zusätzlichen Felder der neuen Tabelle?
|
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Ich verstehe dein Problem nicht?
SQL-Code:
INSERT INTO neueTabelle
SELECT 1 AS neueID, * FROM alteTabelle1 : : INSERT INTO neueTabelle SELECT 2 AS neueID, * FROM alteTabelle2 |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Bezieht sich das SELCET Stmt nicht immer auf Columns?
|
Re: Wie am besten Daten visualisieren und auswahl verarbeite
*push*
:duck: |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Zitat:
SQL-Code:
Damit können in diesem Fall die Tabellen-IDs bequem per SQL zusammen mit den sonstigen Daten aus den bisherigen Tabellen in die neue "Supertabelle" übernommen werden.
INSERT INTO NeueTabelle (NeuesFeld, sonstige Felder ...)
SELECT KonstanterAusdruck, sonstige Felder ... FROM AlteTabelle |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Ah ok danke für die erklärung.
War mir bisher nicht bekannt :) Bleibt immer noch die eigentlich Threadfrage. Da bin ich noch nciht weiter. |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
So ich ein bisschen gewerkelt und überlegt...
Die Datenbank habe ich nun Umgebaut wie es empfohlen wurde. Sie hat nun folgende Struktur: SERIES: VARCHAR SG: VARCHAR FSW: VARCHAR PSW: VARCHAR COMMENT: NVARCHAR (Hab entdeckt das der Umlaute erlaubt :) ) Nun bin ich wieder bei der Visualisierung. Ich hatte überlegt hier ein record einzusetzten aber wieder verworfen weil es ja quatsch wäre und nur auf die Performance drücken würde. Mein derzeitiger Plan ist so: Ich hole mir aus der Tabelle alle Einträge von Series und SG wo Comment nicht NULL ist und baue daraus ein TreeView auf. Hier wäre schon eine Frage: Lieber alle auf einmal verarbeiten. In einem record array zwischen speichern und dann über eine funktion ins TreeView. Oder gleich in der while Schleife die Funktion für das TreeView aufrufen? Die anderen Daten würde ich dann wie im Hauptfenster über das selektierte TreeViewNode holen. Dann brächte ich nur noch einen "merker" damit ich weiß welche Datansätze in die DB geladen werden sollen bzw in die andere geschickt werden sollen. Hat jemand eine Idee dazu? |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Du kannst auch mehrere Datensätze im DBGrid markieren.
Delphi-Quellcode:
Damit könnte der Benutzer auswählen, welche Datensätze er exportieren will.
DBGrid1.Options := DBGrid1.Options + [dgMultiSelect]
Die markierten Datensätzen werden dann "abgegrasst" und als CSV-Datei oder XML auf Platte geschrieben. Zusätzlicher Komfort wäre das Markieren per Wildcards. Der Benutzer wählt im Menue "per Wildcard markieren..." und wird nach dem Muster gefragt. Wenn er z.B. *X2008 eingibt, dann werden alle Serien, die auf "X2008" enden markiert. |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Ich hab nun angefangen mit einer Hilfstabelle ein DB TreeView zu füllen und von da aus eine ListView mit Checkboxes.
Sieht alles schon relativ nett aus aber irgendwie macht mir DISQLite3 Probleme.
SQL-Code:
Ist das Stmt was ich verwende um den Tree aufzubauen.
SELECT SERIES, ECU, COMMENT FROM DATA WHERE COMMENT !=""
Seltsam ist das wenn ich im SQLiteAdministrator (der arbeitet mit ZEOS Kompos) das Stmt ausführe werden die richtigen zurück geliefert (das COMMENT holen soll dient nur der Kontrolle) aber wenn ich DISQLite3 das Stmt ausführen lass kommen auch einige Einträge die nicht da sein sollten. :? Ich habe schon versucht den FeldTypen fest zu legen auf WideString aber trotzdem kommen immer noch leere Felder mit. Es sind auch immer die gleichen. Auch das Manuelle Editieren der Felder, um diese zu leeren, bring nix. Edit: Hab nun och mal den Debug laufen lassen. Es scheint als würde es nicht an DISQLite liegen sondern daran wie ich die Tabelle aufbaue. Hier mal der Code:
Delphi-Quellcode:
Die Connection von dbqry ist Databaseconn.
with Main.dbqry do
begin SelectSQL := 'SELECT SERIES, ECU, COMMENT FROM DATA WHERE COMMENT !="" OR COMMENT !=NULL'; Open; while not Eof do begin Main.Databaseconn.Execute16('REPLACE INTO HELP (MASTER_ID, PARENT_ID, Name, Image) SELECT MASTER_ID, PARENT_ID, Name, Image FROM TreeView WHERE Name ="' + FieldByName('SERIES').AsString + '"'); Main.Databaseconn.Execute16('REPLACE INTO HELP (MASTER_ID, PARENT_ID, Name, Image) SELECT MASTER_ID, PARENT_ID, Name, Image FROM TreeView WHERE Name ="' + FieldByName('ECU').AsString + '"'); Next; end; Close; end; Könnte es daran liegen? |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Hallo,
probiere mal bitte:
SQL-Code:
Noch ein "blöder" Vorschlag:
SelectSQL := 'SELECT SERIES, ECU, COMMENT FROM DATA WHERE COMMENT != "" AND COMMENT IS NOT NULL';
SQL-Code:
SELECT SERIES, ECU, COMMENT FROM DATA WHERE COMMENT is not null and COMMENT > " "
|
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Ich hab das Problem mittlerweile Isoliert in dem ich das ganze auf zwei qrys verkürzt habe.
SQL-Code:
Funktioniert wunderbar aber
REPLACE INTO HELP (MASTER_ID, PARENT_ID, Name, Image) SELECT T.MASTER_ID, T.PARENT_ID, T.Name, T.Image FROM TreeView AS T WHERE T.Name IN (SELECT SERIES FROM DATA WHERE COMMENT !="")'
SQL-Code:
Macht mir Probleme.
REPLACE INTO HELP (MASTER_ID, PARENT_ID, Name, Image) SELECT T.MASTER_ID, T.PARENT_ID, T.Name, T.Image FROM TreeView AS T WHERE T.Name IN (SELECT ECU FROM DATA WHERE COMMENT !="")'
Durch den IN Operator werden alle Einträge von ECU zurück geliefert die passen aber auch welche wo doppelt vorkommen. Sprich wenn ich bei Serie A das Steuergerät Z habe und dort ein Kommentar drin ist wird mir das geliefert. Ist aber Steuergerät Z auch in Serie C verbaut wird mir das auch aus der TreeView Tabelle geladen obwohl dort der Kommentar bei Data leer ist. Ich habs mit LIKE versucht aber dann wird mir nur der erste Treffer zurück geliefert. Im Moment suche ich nach einer Möglichkeit die doppelten Felder zu entfernen wenn kein Kommentar vorhanden ist. |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Hallo,
meinst Du das?
SQL-Code:
REPLACE INTO HELP (MASTER_ID, PARENT_ID, Name, Image) SELECT T.MASTER_ID, T.PARENT_ID, T.Name, T.Image FROM TreeView AS T WHERE T.Name IN (SELECT DISTINCT ECU FROM DATA WHERE COMMENT !="")'
|
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Nein mit DISTINCT hab ich es auch schon Probiert.
Es kann ja vorkommen das dieses Steuergerät tatsächlich 2x vorkommt und auch 2x Kommentiert wurde. Edit. Jetzt hatte ich die zündende Idee :) So gehts:
Delphi-Quellcode:
with Main.dbqry do
begin SelectSQL := 'SELECT SERIES, ECU, COMMENT FROM DATA WHERE COMMENT !="" OR COMMENT !=NULL'; Open; while not Eof do begin Main.Databaseconn.Execute16('REPLACE INTO HELP (MASTER_ID, PARENT_ID, Name, Image) SELECT MASTER_ID, PARENT_ID, Name, Image FROM TreeView WHERE Name ="' + FieldByName('SERIES').AsString + '"'); Main.Databaseconn.Execute16('REPLACE INTO HELP (MASTER_ID, PARENT_ID, Name, Image) SELECT MASTER_ID, PARENT_ID, Name, Image FROM TreeView WHERE Name ="' + FieldByName('ECU').AsString + '" AND PARENT_ID = (SELECT MASTER_ID FROM TreeView WHERE Name ="'+FieldByName('SERIES').AsString+'")'); Next; end; Close; end; |
Re: Wie am besten Daten visualisieren und auswahl verarbeite
Ich hab die Probleme nun bis auf eins gelöst.
Wenn ich Daten Importiere dann möchte ich Wahlweise die Daten überschreiben oder zusammen führen, also das Importierte an das existierende anhängen. Überschreiben ist kein Problem das mach UPDATE ja von allein. Gibt es eine Möglichkeit hier mit CONCAT zu erbeiten ohne vorher die alten Daten zu holen? Oder kann ich die Daten auch im UPDATE stmt noch dazu holen? Edit: Ja man kann in UPDATE noch ein SELECT nutzen und mit || zusammen führen :) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz