[erledigt] SQLite-Tables als TreeGadget-Nodes nebeneinander?

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

[erledigt] SQLite-Tables als TreeGadget-Nodes nebeneinander?

Beitrag von scholly »

moin, moin...

Ich möchte die Struktur einer SQlite-DB visualisieren.
Normalerweise würde man das ja mit einem TreeGadget lösen, in dem jeder Table zu einem Node wird und die einzelnen Columns zu Subitems.
Das wird mir aber komplett aufgeklappt "zu hoch" um als Übersicht zu dienen.
Nun suche ich eine Möglichkeit, die Tables/Nodes nebeneinander darzustellen und die Columns/Subitems dann darunter.

Hat jemand eine Idee, wie man das hinbekommen könnte ohne für jeden Table/Node ein eigenes TreeGadget nebeneinander aufzumachen?

Oder kennt jemand ein (SQLite-)Tool, das das so darstellen kann?

mDv...

[edit 080528: 17:40] Insofern erledigt, daß ich eine zufriedenstellende Druck-Ausgabe habe.
Zuletzt geändert von scholly am 28.05.2008 17:41, insgesamt 1-mal geändert.
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQLite-Tables als TreeGadget-Nodes nebeneinander?

Beitrag von Kiffi »

Hallo scholly,

(geschickt gepushed ;-))
scholly hat geschrieben:Hat jemand eine Idee, wie man das hinbekommen könnte ohne für jeden
Table/Node ein eigenes TreeGadget nebeneinander aufzumachen?
kann ich mir leider nix drunter vorstellen. Kannst Du mal eine Skizze
erstellen, wie das aussehen soll?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Re: SQLite-Tables als TreeGadget-Nodes nebeneinander?

Beitrag von scholly »

Kiffi hat geschrieben:Hallo scholly,
(geschickt gepushed ;-))
Hatte AFAIR NTQ mal irgendwo so beschrieben :lol:
kiffi hat geschrieben: Kannst Du mal eine Skizze erstellen, wie das aussehen soll?
Puuh... ich versuchs mal als ASCII-Pic:

Code: Alles auswählen

table1      table2      table3       table4
  +col1        +col1       +col1        +col1
  +col2        +col2       +col2        +col2
  +col3        +col3       +col3        +col3
  +col4                    +col4        +col4
  +col5                                 +col5
  +col6
  +col7 
Wobei Table = Node und col = Subitem wäre.
Verständlicher?
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQLite-Tables als TreeGadget-Nodes nebeneinander?

Beitrag von Kiffi »

scholly hat geschrieben:Puuh... ich versuchs mal als ASCII-Pic:
reicht voll und ganz. Jetzt weiß ich in etwa, was Du meinst.

Allerdings erschließt sich mir der praktische Nutzen einer solchen Darstellung
nicht. Wenn mehrere Tabellen in einer Datenbank vorhanden sind, muss der
Anwender (im Gegensatz zur klassischen Treedarstellung) unnötigerweise
scrollen, wenn er sich einen Überblick verschaffen will.

Wie dem auch sei: Mir fällt auf Anhieb kein Gadget (oder auch Control)
ein, welches für diesen Zweck geeignet ist. Das musst Du wohl in den
sauren Apfel beißen und Dir das aus mehreren Textgadgets +
ScrollAreaGadget selberbauen.

... oder aber Du verwendet ein Webgadget(), in das Du ein aus der
Datenbankstruktur generiertes HTML einlädst (dürfte wohl am einfachsten
und flexibelsten sein).

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Re: SQLite-Tables als TreeGadget-Nodes nebeneinander?

Beitrag von scholly »

Kiffi hat geschrieben:Allerdings erschließt sich mir der praktische Nutzen einer solchen Darstellung nicht.
Letztendlich soll eigentlich was Ausdruckbares dabei herauskommen, das ich zur (Weiter-)Entwicklung meiner Video-Verwaltung nutzen will.
Kiffi hat geschrieben:aus mehreren Textgadgets + ScrollAreaGadget selberbauen
Ma gucken, was ich mit ScrollArea- und ImageGadgets hinbekomme...
Kiffi hat geschrieben:... oder aber Du verwendet ein Webgadget(), in das Du ein aus der Datenbankstruktur generiertes HTML einlädst (dürfte wohl am einfachsten
und flexibelsten sein).
Da werd ich mich auch mal dran versuchen, für HTML gibts doch auch sowas wie'n TreeGadget, oder?

Abba jezz is ersma Bubu anjesacht :lol:

:allright: Danke....
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Re: SQLite-Tables als TreeGadget-Nodes nebeneinander?

Beitrag von Kiffi »

scholly hat geschrieben:für HTML gibts doch auch sowas wie'n TreeGadget, oder?
ja, kann man bauen. Aber ich denke, Du willst keinen (klassischen) Tree?

Ich dachte eigentlich eher an sowas:

Code: Alles auswählen

<html>
	<body>
		<table>
			<tr>
				<td>Tabelle1</td><td>Tabelle2</td><td>Tabelle3</td>
			</tr>
			<tr>
				<td>&nbsp;+Field1_1</td><td>&nbsp;+Field2_1</td><td>&nbsp;+Field3_1</td>
			</tr>
			<tr>
				<td>&nbsp;+Field1_2</td><td>&nbsp;+Field2_2</td><td>&nbsp;+Field3_2</td>
			</tr>
			<tr>
				<td>&nbsp;+Field1_3</td><td>&nbsp;+Field2_3</td><td>&nbsp;+Field3_3</td>
			</tr>
		</table>
	</body>
</html>
scholly hat geschrieben:Abba jezz is ersma Bubu anjesacht
juuute idee! Bild

Grüße ... Kiffi

// Edit:

hier mal ein Code, der zeigt, wie man das in etwa machen kann. Du musst
lediglich im Aufruf von ReadSqliteDatabaseStructure() den Pfad der zu
untersuchenden Datenbank anpassen.

Code: Alles auswählen

EnableExplicit

Structure s_SDS
  TableName.s
  Fields.s
EndStructure

Procedure ReadSqliteDatabaseStructure(Database.s, SDS.s_SDS())
  
  Protected SQL.s
  Protected sDB.l, P1.l, P2.l, Counter.l
  
  sDB = OpenDatabase(#PB_Any, Database, "", "", #PB_Database_SQLite)
  
  If sDB
    
    DatabaseQuery(sDB, "Select name, sql From sqlite_master Where type = 'table' Order By name")
    
    While NextDatabaseRow(sDB)

      AddElement(SDS())
      
      SDS()\TableName = GetDatabaseString(sDB, 0)
      
      SQL = GetDatabaseString(sDB, 1)
      P1 = FindString(SQL, "(",  1)
      If P1
        P1 + 1
        P2 = FindString(SQL, ")", P1)
        If P2 : SDS()\Fields = Mid(SQL, P1, P2-P1) : EndIf
      EndIf
      
    Wend
    
    CloseDatabase(sDB)
    
  Else
    
    ; Datenbank konnte nicht geöffnet werden
    
  EndIf
  
EndProcedure

UseSQLiteDatabase()

NewList SDS.s_SDS() ; SDS = *S*QLite*D*atabase*S*tructure ;-)

ReadSqliteDatabaseStructure("D:\Data\temp.db", SDS())  

Define HTML.s

HTML + "<html><body><table>"

HTML + "<tr>"
ForEach SDS()
  HTML + "<td><b>" + SDS()\TableName + "</b></td>"
Next
HTML + "</tr>"

HTML + "<tr>"
ForEach SDS()
  HTML + "<td style='padding-left:20px;vertical-align:top'>" + ReplaceString(SDS()\Fields, ",", "<br />") + "</td>"
Next
HTML + "</tr>"

HTML + "</table></body></html>"

Enumeration
  #frmMain
  #frmMain_WG
EndEnumeration

Define WindowFlags.l

WindowFlags | #PB_Window_ScreenCentered
WindowFlags | #PB_Window_SystemMenu
WindowFlags | #PB_Window_Invisible

OpenWindow(#frmMain, #PB_Ignore, #PB_Ignore, 800, 600, "", WindowFlags)
CreateGadgetList(WindowID(#frmMain))

WebGadget(#frmMain_WG, 0, 0, 800, 600, "")
While GetGadgetAttribute(#frmMain_WG, #PB_Web_Busy) : WindowEvent() : Delay(1) : Wend

SetGadgetItemText(#frmMain_WG, #PB_Web_HtmlCode, HTML)
While GetGadgetAttribute(#frmMain_WG, #PB_Web_Busy) : WindowEvent() : Delay(1) : Wend

HideWindow(#frmMain, #False)

Repeat
Until WaitWindowEvent() = #PB_Event_CloseWindow
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

Hab grade mal kurz Zeit zum Testen gehabt.

Das WebGadget bleibt leer :o , aber wenn ich HTML.s debugge und abspeicher, sieht die Tabelle gut aus. :allright:

Abgesehen davon, daß ich jetzt den Inhalt von HTML.s abspeichern und per RunProgram() öffnen und sogar drucken könnte,
wurmt es mich natürlich, daß in dem WG nix angezeigt wird.
Irgendeine Idee für eine Anti-Wurm-Mittel ?

[OT]
Was schickt ihr uns eigentlich für ein Wetter hoch?
Schwül bis zum Dauer-T-Shirt-Wechsel und vereinzelte Tropfen.
Kriegt ihr in Köln kein erfrischendes Gewitter zustande? :lol: :lol: :lol:
[/OT]
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben:Irgendeine Idee für eine Anti-Wurm-Mittel ?
puh, nicht wirklich. Du kannst mir das generierte HTML mal an
tuebben [at] gmail [dot] com schicken. Vielleicht ist da ein Knoten drin?

Grüße ... Kiffi
a²+b²=mc²
Benutzeravatar
scholly
Beiträge: 793
Registriert: 04.11.2005 21:30
Wohnort: Düsseldorf

Beitrag von scholly »

debugger hat geschrieben:<html><body><table border=1><tr><td><b>maintable</b></td><td><b>table_cds</b></td><td><b>table_dvds</b></td><td><b>table_tree</b></td></tr><tr><td style='padding-left:20px;vertical-align:top'>ID INTEGER PRIMARY KEY<br /> Titel<br /> Genre<br /> Jahr<br /> MediumTyp<br /> MediumName<br /> Owner<br /> Quelle<br /> Dauer<br /> Qualität<br /> Infos<br /> Artist<br /> Path<br /> Filename<br /> FileSize<br /> VideoCodec<br /> VideoBitrate<br /> Auflösung<br /> fps<br /> AudioCodec<br /> AudioBitrate<br /> AudioKanäle<br /> SamplingRate</td><td style='padding-left:20px;vertical-align:top'>cd_name </td><td style='padding-left:20px;vertical-align:top'>dvd_name </td><td style='padding-left:20px;vertical-align:top'>id INTEGER PRIMARY KEY<br /> item_name TEXT<br /> item_icon TEXT<br /> item_pos NUMERIC<br /> item_parent NUMERIC<br /> item_level</td></tr></table></body></html>
Wenn ich den abgespeicherten Code nicht per RunProgram anzeigen lasse, sondeRn in das WG lade, wird er problemlos angezeigt.
Und wenn ich das Quote da oben in ein file cut'n'paste und das ins WG lade, gehts auch.

Das Problem kann IMHO also eigentlich nur in diesen Zeilen liegen:

Code: Alles auswählen

; While GetGadgetAttribute(#frmMain_WG, #PB_Web_Busy) : WindowEvent() : Delay(10) : Wend
; 
; SetGadgetItemText(#frmMain_WG, #PB_Web_HtmlCode, HTML)
; While GetGadgetAttribute(#frmMain_WG, #PB_Web_Busy) : WindowEvent() : Delay(10) : Wend
:freak:
Ich bin blutiger PB-Anfänger.
seit 17.12.08: PB 4.3 unter XP Home(SP3)
Benutzeravatar
Kiffi
Beiträge: 10714
Registriert: 08.09.2004 08:21
Wohnort: Amphibios 9

Beitrag von Kiffi »

scholly hat geschrieben::freak:
stimmt! Wirklich seltsam, das...
Du hast die aktuelle PB4.2 Final? Oder noch eine Beta?
[grübel, grübel]

Grüße ... Kiffi

<OT>
P.S.: Umlaute in den Feldnamen? Tu pöser Purche! :-)
</OT>
a²+b²=mc²
Antworten