Laden...

Database-Explorer

Letzter Beitrag vor 5 Jahren 102 Posts 127.459 Views
Database-Explorer

Hallo!

Wie bereits in Additional.NET beschrieben, arbeite ich seit ca. 2007 an einem Framework zur Erweiterung der .NET-Funktionalitäten.

Ein Punkt dabei war der Zugriff auf Datenbanken bzw. Daten in datenbank-ähnlichen Strukturen über eine einheitliche Schnittstelle.

Dank der Feiertage bin ich diesem Ziel nun wieder einen Schritt näher gekommen.

Aus dem anfänglichen Testprojekt ist ein für mich recht wichtiges Werkzeug geworden. Im Gegensatz zu einem erst zu installierendem SQL Management Studio mit locker 100 MB ist der Database-Explorer (im folgenden nur noch DBE genannt) sofort einsatzbereit und mit ca. 22MB (bzw. ca. 7MB als ZIP) auch schneller geladen (OK, mit Oracle-Dateien sind es knapp 120 MB).

Der Vorteil liegt in der gleichzeitigen Verwaltung mehrere Datenquellen in einer Oberfläche. Sicherlich bieten die DB-speziellen Tools einige Vorteile, aber für den alltäglichen Bedarf sind diese in der Regel nicht notwendig (behaupte ich zumindest mal).

Die Komponenten des Frameworks dürfen auch in eigenen Projekten verwendet werden, ein Beispiel findet sich in einem der folgenden Beiträge.

Z.Zt unterstützt der DBE folgende Datenquellen (Stand Aug. 2016):*MS SQL *MS SQL Compact *mySQL, wenn der Connector v6.3.5 im GAC liegt (andere Versionen wurden nicht getestet) *Oracle (bei installiertem Client) *ODBC *CSV/Text *Firebird *SQLite (benötigt sqlite.dll) *HTML *dBase *Excel (bis 2007-2013) *Access (über 32bit-MS-Jet 4.0-Treiber) (aktuell nur die 64-Bit-Version hochgeladen) *SharePoint 2007-2013

Die Datenquellen werden nach Datenquellentyp (MSSQL, mySQL, ...) sortiert angezeigt. Das TreeView-Control arbeitet dynamisch, d.h. beim erstmaligen aufklappen kann es etwas dauern, bis die darunterliegenden Informationen geladen wurden (gerade bei den dateibasierten Datenquellen).

Einstellungen:
Aktuell habe ich noch das Problem, dass hier oft englische und deutsche Namen durcheinander kommen, da arbeite ich noch dran. Bei einigen dateibasierten Datenquellen (CSV, Text, HTML) sind zusätzliche Einstellungen möglich, um die Auswahl einzuschränken bzw. Vorgaben bzgl. der Daten zu machen (bei CSV bspw. ob die erste Zeile die Spaltennamen enthält).

Folgendes ist geplant (Reihenfolge ist nicht zwingend maßgebend):*Transaktionen *Implementierung von IDataReader *Verbesserter Support für MS SQL, mySQL und Oracle bzgl. Views und Procedures. *Unterstützung für DB2, PostGreSQL (Reihenfolge nicht relevant 😉).

*Abfrage über mehrere Datenquellen, also z.B. zwischen Excel, MSSQL und CSV *Unterstützung für MS CRM-Listen und Word-Tabellen. *Verbesserte Unterstützung für Word, Excel und Access. *Verbesserte Encoding-Prüfung beim CSV-Import. *Verbesserte Unterstützung für dBase (Memotexte, Encoding, Indizees, Geschwindigkeit). *Mehrstufige Abfragen (z.B. zu einer Angebotsnummer nicht nur den Eintrag aus einer Angebotstabelle sonder zusätzlich auch die Angebotspositionen aus einer anderen Tabelle laden und separat anzeigen). *Vergleich von Abfragen, Verwenden von Teilergebnissen bzw. Spalten eines Ergebnisses für weitere Abfragen. *SQL-Query-Editor mit IntelliSense (das wird dauern 😉).

*Schreiben in dateibasierte Datenquellen *SQL-Parser für erweiterte SELECT-Abfragen bei dateibasierten Datenquellen (teilweise schon umgesetzt) *Notifications, sofern von der DB unterstützt *Auflistung und Ausdrucksmöglichkeit für angegebene Referenzen *Rechteverwaltung *Stored Procedures *...

Leider ist das Archiv mit OpenXML-Support zu groß für den Upload geworden, daher nun per Link: DatabaseExplorer.zip (7.66 MB). Das Archiv einfach in einen Ordner entpacken und die exe starten, Mindestvorraussetzung ist .NET v4.

Und hier noch ein Screenshot mit Erläuterung der Symbole (die Toolbar ist unterteilt in die Bereiche Panel-Steuerung, Panel-Layout, Ergebnis-Layout und Ergebnis-Verwendung): (Stand ca. Mitte 2012, muss mal wieder angepasst werden)

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

Hier noch ein Screenshot

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

Musste gerade feststellen, dass die Einstellungen nur per Tastatur kaum durchführbar sind (Maus-Batterien leer), dass muss ich noch ändern.

Hier noch ein Screenshot während der Einrichtung einer dBase-Datenquelle (Auswahl einer Datei):

Nobody is perfect. I'm sad, i'm not nobody 🙁

Database-Explorer

Hallo Tom,

coole Sache der Database-Explorer. Funktioniert mit meinen DBASE IV Datenbanken nur zum Teil.
Bei der wichtigen DB werden Tabelle und Spalteninfo ausgelesen. Allerdings ohne Inhalte. Liegt vermutlich daran, daß die DB Memory Felder enthält.
Bei einer mit dem DB Base Viewer erstellten DB wird die Tabelle komplett geöffnet.
Das Logging scheint noch nicht zu funktionieren. Zumindest habe ich den Pfad angegeben. Wird die Datei automatisch erstellt?

.csv Dateien wurden Problemlos geöffnet. Schön wäre eine Möglichkeit der Angabe des Trenners.

Könnte ich die TD.Additional.Data.Dbase.dll nutzen? Wenn ja wie?

Danke schonmal

Gruß Thomas

Praktische Sache. 👍

Was von meiner Seite aus noch wünschenswert wäre, wäre eine Unterstützung von SQLite, mit SQLlite DB's hab ich relativ oft zu tun.

Ansonsten ein Top-Programm.

using System;class H{static string z(char[]c){string r="";for(int x=0;x<(677%666);x++)r+=c[
x];return r;}static void Main(){int[]c={798,218,229,592,232,274,813,585,229,842,275};char[]
b=new char[11];for(int p=0;p<((59%12));p++)b[p]=(char)(c[p]%121);Console.WriteLine(z(b));}}

Hallo!

@bounty4:
Ja stimmt, die MemoryFelder, werden (noch) nicht unterstützt (d.h die Daten in den DBT-Dateien).
Bzgl. Logging: Die Datei wird automatisch erstellt, sobald eine Meldung erstellt wird. Allerdings unterstützen die dateibasierten Datenquellen-Adapter z.Zt. noch kein Logging. Ist aber nun auch mit auf der Liste.
Bzgl. Trenner bei CSV-Import: Ebenfalls ein guter Hinweis, ist nun auch auf der Liste.
EDIT: Stand Nov. 2012 alles umgesetzt.

Die TD.Additional.Data.Dbase.dll kann man selbstverständlich auch in eigenen Projekten verwenden.
Als Verweise muss man "TD.Additional.dll", "TD.Additional.Data.dll" und die jeweilige Datenquellen-Assembly einbinden.


using TD.Additional.Data;
using TD.Additional.Data.Dbase;
using TD.Additional.Data.File;

[...]

var settings = new DbaseDataSourceSettings() 
    { FileSource = new FileSourceSettings() { FileName = "Name der dbase-Datei" } };
using (var dataSource = Connections.CreateConnection(settings))
    if (dataSource != null)
    {
        var dataTable = dataSource.Execute("SELECT * FROM whatever");
        // ...
    }

Zuerst werden die Einstellungen erstellt, für jede Datenquelle gibt es entsprechende Settings-Klassen. Für jede muss man anschließend die benötigten Eigenschaften setzen (bei dBase ist momentan nur die Quelle notwendig).
Bei den dateibasierten Datenquellen kann man aktuell zwischen Dateien (FileSourceSettings, Property FileName), Verzeichnissen (FolderSourceSettings, Property Folder) und frei zugänglichen Internetpfaden für einzelne Dateien (UriSourceSettings, Property Uri) wählen.
Connections ist eine statische Klasse, die z.Zt. einzige Methode CreateConnection erstellt eine zum Settings-Typ passende Adapter-Instanz. Wird keine gefunden, wird null zurückgegeben (daher die Prüfung). Mit Execute kann man dann die Daten für eine (gültige) Query abrufen.

EDIT (05.09.2011): Die Methode "Execute" hieß früher "GetData".

@Scavanger:
SQLite kommt mit auf die Liste.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

Habe gerade im ersten Post eine neue Version online gestellt:*In der TreeView werden nun zusätzlich Icons angezeigt, um das Ganze etwas bunter zu machen. *Die Ergebnisse lassen sich nun schließen oder über den Pin als eigenes Fenster abdocken (und wieder andocken). Je nach Einstellungen funktioniert auch das Snapping. *Die Query eines Ergebnisses kann nun bearbeitet und das Ergebnis auch aktualisiert werden. *Die Spaltenbreite kann nun automatisch berechnet werden, die Zeilenhöhe kann ebenfalls angepasst werden. *CSV unterstützt nun auch eigene Trennzeichen (bisher wurde immer automatisch gesucht in der Reihenfolge "Tab, Semikolon, Komma". Als nächstes kommt evtl. noch die feste Breite für Spalten, Probleme gibt's teilweise noch bei deim Encoding. *Logging funktioniert nun auch bei den dateibasierten Datenquellen. *Nun können auch Acces- und Excel-(xls/xlsx)-Dateien eingelesen werden. *Beim Minimieren verschwindet der DB-Explorer nun im Try, ein Klick reicht zur "Wiederbelebung" aus. *In den Programm-Einstellungen kann man den DB-Explorer nun auch wahlweise mit Windows starten lassen.

Zusätzlich findet sich nun im ersten Post auch eine Liste mit geplanten Erweiterungen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Das Program startet bei mir nicht.

Debugger sagt: Could not find file 'C:\Users{user}\DatabaseExplorer.ico'.

Und ja ich hab die zip entpackt.

Hallo!

Das Icon ist nun als Resource mit im Programm.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hi Tom,

Programm startet. Allerdings bekomm ich keine der Datenquelleninhalte angezeigt:

System.NullReferenceException: Der Objektverweis wurde nicht auf eine Objektinstanz festgelegt.
   bei TD.Additional.Data.File.FileDataSource.GetData(String query)

Bei DBase und CSV Dateien kommt diese Fehlermeldung.

Betreffs der DBT Dateien wäre es schön wenn zumidest die DBF Datei abgefragt werden könnten
Ist da was geplant?

GRuß Bounty

Hallo!

Habe gerade eine neue Version im ersten Post online gestellt.
Das Logging funktioniert nun endlich korrekt, im Hilfe-Menü kann man das Protokoll direkt anzeigen lassen (es gibt noch einige Probleme beim nach dem Minimieren).
Weiterhin gibt es im Hilfe-Menü nun ein Feedback-Formular, wenn man etwas mitteilen möchte.
An einem erweiterten Ausnahme-Dialog arbeite ich noch.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hi,

Supi, mit der neuen Version werden die Daten wieder abgerufen.

Kannst du das mit DBASE Dateien mit Memoryfile (.dbt) realisieren?

Gruß Thomas

Hallo!

@bounty4:
Die Realisierung an sich wird kein Problem darstellen, eher der Zeitpunkt bis zur Fertigstellung.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

Im ersten Post findet sich eine neue Version:*Bei den Excel-Einstellungen kann man nun auch angeben, dass nicht per OLE-Treiber, sondern entweder per COM (für xls, ACHTUNG: Langsam) oder OpenXML (xlsx) geladen werden soll *Access-Import rudimentär möglich *Datei kann auf TreeView gezogen werden, wenn mit rechter Maustaste gezogen, kommt nach den Einstellungen die Frage, ob die Datei als Datenquelle eingebunden oder nur die enthaltenen Tabellen angezeigt werden sollen *dBase nun mit rudimentärem Memotext-Support, Encoding funktioniert noch nicht korrekt *Neue Datenquelle bzw. ändern oder löschen nun direkt über die Toolbar möglich

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hi,

du bist ja schnell. Sehr schönes Programm.
Bei den DBASE Files mit Memoryfile werden allerdings nur die Spaltenköpfe ausgelesen.

Gruß Thomas

Hallo!

@bounty4:
Bzgl. der MemoFiles sucht er nach einer gleichnamigen Datei mit Endung dbt. Entweder hat er diese nicht gefunden oder er hat Probleme beim Einlesen (steht was in den Logs).

@all:
Leider fehlte im letzten Archiv die OpenXML-Assembly, das habe ich gerade geändert.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hi,

im Startordner vom Database - Explorer wurde kein Log erstellt.
Die .dbt Datei liegt im gleichen Ordner.

Gruß Thomas

Hallo!

@bounty4:
Schau mal im Menü "Programm" unter "Einstellungen" nach, dort steht der Ordner, in dem die Protokolle abgelegt werden (standardmäßig unter AppData ...)

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hi Tom,

da hatte ich nicht geschaut. Das ist das Log:

13.01.2011 10:08:55	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:08:57	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:08:59	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:00	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:00	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\New Folder\Daten\Daten.dbf'
13.01.2011 10:09:00	Debug	LoadTable	Table with 0 rows loaded
13.01.2011 10:09:06	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:06	Debug	GetData	New query: 'SELECT * FROM Daten'
13.01.2011 10:09:06	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\New Folder\Daten\Daten.dbf'
13.01.2011 10:09:06	Debug	LoadTable	Table with 0 rows loaded
13.01.2011 10:09:34	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
13.01.2011 10:09:34	Debug	GetData	New query: 'select * from Daten'
13.01.2011 10:09:34	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\New Folder\Daten\Daten.dbf'
13.01.2011 10:09:34	Debug	LoadTable	Table with 0 rows loaded


Die .dbt Datei liegt im selben Ordner.

Gruß Bounty

Bei dBase-Datenbanken werden aktuell keine Index-Dateien (CDX) berücksichtigt. Wird das noch ergänzt werden?

Wird man auf dBase-Datenbanken auch schreibend zugreifen können?

Gruß, Harry B.

Kaum macht man 's richtig, schon funktioniert 's!

Hallo!

@Harry B.:
Schreibender Zugriff wird erst möglich sein, wenn ich einen halbwegs vernünftigen SQL-Parser habe, daran arbeite ich gerade.
Wofür sind die Index-Dateien?

Nobody is perfect. I'm sad, i'm not nobody 🙁

Halo Tom!

Index-Dateien sind zum schnellen Suchen innerhalb von DBF-Dateien.

Enthält eine DBF-Datei z.B. eine Spalte mit Artikelnummern und sucht man jetzt nach einer ganz bestimmten Artikelnummer, so muss man nicht die ganze DBF-Datei lesen, sondern schaut im Index nach, wo genau der Datensatz ist.

Dazu gibt es unter dBase(-Dialekten) den SEEK-Befehl (SEEK('4711')). In SQL, aber das weißt Du selber, wäre es ein SELECT * WHERE ARTIKEL='4711'.

Gruß, Harry B.

Kaum macht man 's richtig, schon funktioniert 's!

Hallo!

Der Download im ersten beitrag wurde wieder aktualisiert:*Die Query-Eingabe ist nicht mehr modal, dafür wird nun sofort ein neues Panel geöffnet, in welchem die Eingabe erfolgt. *Der Refresh ist nun auch per Hotkey "F5" möglich, z.Zt. aber nur, wenn die Textbox fokusiert ist. *Die Query-Ausführung wurde in einen Thread ausgelagert und kann unterbrochen werden (der Refresh-Button ändert sich während der Abfrage in den Abbruch-Button). *Neu ist der Snippet-Manager: Zu jedem Datenquellentypen kann man nun Abrfragen definieren und diese auf Wunsch im Kontextmenü der Datenquellen anzeigen lassen. Der derzeit einzige Platzhalter "{tablename}" wird dabei durch den Namen der Tabelle ersetzt, welche aktuell markiert ist. Somit kann man z.B. für MS SQL eine Abfrage erstellen, welche nur die ersten 500 Datensätze einliesst (SELECT LIMIT 500 * FROM {tablename}). diese Abfragen werden dann auch nur im Tabellen-Menü angezeigt. *Bzgl. der dateibasierten Datenquellen sollten diese nun etwas schneller geöffnet werden, wenn Sie lokal vorliegen. *Bei dBase habe ich die Encoding-Auswertung integriert, funktioniert aber zumindest bei mir noch nicht korrekt. Beim Import von Menotexten habe ich zusätzliche Fehlerprüfungen eingebaut und das Logging erweitert. *Das Protokoll kann übrigens auch direkt über das Hilfe-Menü aufgerufen und parallel angezeigt werden, dann muss man nicht erstz mühsam die Datei suchen.

Edit: Die Textbox mit der Query kann auch aus- und wieder eingeblendet werden, der Button dafür ist der ehemalige Edit-Button im Ergebnis-Panel.
Edit2: Das Andocken/Anpinnen (weis einer, wie man das korrekt nennt?) in die TabControl-Liste funktioniert nun auch wieder. Und auch dem anschnappen der Fenster gab es Probleme, die nun behoben sind.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

@Harry-B.:
Z.Zt. wird bei den dateibasierten Datenquellen lediglich "SELECT * FROM {Tabelle}" unterstützt, alles weitere kommt erst mit dem SQL-Parser (also z.B. auch WHERE-Bedingungen). D.h. auch, dass die Index-Dateien ganz hinten auf die Liste kommen.

EDIT: Stand Nov. 2012 werden einzelne Spaltenangaben in SELECT unterstützt, dBase-Index-Dateien noch nicht.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hi Tom,

hab leider keine anderen Fehlermeldungen:

16.01.2011 11:53:56	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
16.01.2011 11:53:58	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
16.01.2011 11:53:59	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
16.01.2011 11:54:00	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
16.01.2011 11:54:00	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\_MyDotNet Projekts\Lotus Datenbank\New Folder\Daten.dbf'
16.01.2011 11:54:01	Debug	LoadTable	Table with 0 rows loaded
16.01.2011 11:54:22	Debug	.ctor	New instance of TD.Additional.Data.Dbase.DbaseDataSourceAdapter created
16.01.2011 11:54:22	Debug	GetData	New query: 'SELECT * FROM Daten'
16.01.2011 11:54:22	Debug	LoadTable	Loading table 'Daten' from 'D:\ProjectSource\_MyDotNet Projekts\Lotus Datenbank\New Folder\Daten.dbf'
16.01.2011 11:54:22	Debug	LoadTable	Table with 0 rows loaded

Ist im download die neue Version schon drin? - hab keine neuere Datei gesehen.

Gruß Bounty

Hallo!

@bounty4:
Ja, Musst aber evtl. noch deinen Browser-Cache leeren!

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo,

ja danke hatte ich nicht dran gedacht.

Beim öffnen der DBASE IV DB bekomme ich jetzt die Fehlermedung:

16.01.2011 17:02:48	Debug	Initialize	Codepage is 1252 / System.Text.SBCSCodePageEncoding
16.01.2011 17:02:48	Error	GetRecord	Error reading record 0 memotext: Die Eingabezeichenfolge hat das falsche Format.
16.01.2011 17:02:48	Error	GetRecord	Error reading record 0: Die Eingabezeichenfolge hat das falsche Format.

Gruß Bounty

Hi,
das schaut ja nett aus.

Wenn nicht das Standardshema genutzt wird, bekommt man bei jeder initialen Abfrage (öffnen) eine Fehlermeldung, dass das Objekt nicht gefunden wird.

Erst, wenn das Shema vor die Tabelle geschrieben wird, funktioniert die Abfrage.

Grüße,

maYer

Hi MaYer,

wie müsste das dann aussehen?

Gruß Bounty

Hallo!

@maYer:
Ich denke mal, es geht um MS SQL.
Ist dass dann nicht eigentlich auch das korrekte Verhalten? Soweit ich weis, wird bei einer Abfrage ohne Schema zunächst nach {Benutzerschema}.Tabelle gesucht, wenn diese fehlt, dann nach {Standardschema}.Tabelle. Benutzt du dieselben Anmeldedaten wie im SQL Studio?

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

Habe gerade festgestellt, dass ein Fehler auftritt, wenn man z.B. als MS SQL-Snippet "SELECT TOP 1000 * FROM {tablename}" ausführen will. Werde dass heute abend prüfen.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hi,
ich baue ja kein eigenes Snippet.

Ich öffne die Verbindung zur DB (MS SQL), gehe auf eine Tabelle öffne das Kontextmenü und klicke Öffnen an.

Als Benutzer gehe ich dabei eigentlich davon aus, dass das Programm erkennt, ob das Schema der Tabelle mein gesetztes ist oder nicht.

Um sicher zu gehen würde ich, wenn ich das Tool programmiere, die Tabelle immer mit dem Schema aufrufen 😃

Ist kein krittischer Fehler, da ich das Schema anschließend im Sql-String selber vor die Tabelle schreiben kann und der Inhalt präsentiert wird.

Grüße,
maYer

#Bug 😉

Der Versuch das Kontextmenü auf dem Hauptknoten MSSQL zu öffnen wirft eine unbehandelte Exception. Im Protokoll wird auch nichts hinterlegt.

Ähm und kann es sein, dass erstellte Snippets nicht gespeichert werden? Das wäre sehr schade und macht das Tool zu diesem Zeitpunkt leider fast unbrauchbar...

<edit>
Okay, gespeichert wird.
Aber nur, wenn das Programm nicht mit einer unbehandelten Exception beendet wird 😉
</edit>

Grüße,
maYer

Hallo!

@maYer:
Das mit dem Snippet war ein allgemeiner Hinweis.
Das mit dem Rechtsklick-Bug ist reproduzierbar, ist wahrscheinlich auch nichts großes.
Bzgl. Snippets/Einstellungen: Gespeichert wird aktuell nur beim Beenden des Programms. Da ist die Frage, ob das nach jeder Änderung (bei Snippets oder Einstellungen) geschehen sollte ...

Bzgl. des Schema-Problems (Sorry, hab's zuerst nicht ganz verstanden): Beim Öffnen wird ein normaler SQL-Befehl generiert "SELECT * FROM {Tabellenname}", also so wie er üblicherweise funktionieren sollte. Im SQL-Studio wird allerdings gleich der Tabellenname inkl. Schema angezeigt und wahrscheinlich auch für die Abfrage verwendet, da ja in einer DB durchaus verschiedene Schema Verwendung finden können). Ich werde sehen, dass ich den MS SQL-Adapter dahingehend anpasse.

EDIT: Ich überlege gerade, ob und wenn was in das Kontextmenü für die Root-Nodes rein könnte (alle auf-/zuklappen, alle löschen, neu, ...)?
Wenn jemand dazu oder zu den anderen Menüs Ideen hat, einfach melden.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

Habe wieder eine neue Version hochgeladen (v10.4034.34751), erreichbar über den Link im ersten Beitrag:*Kein Fehler mehr beim Rechtsklick auf Datenquellentyp-Node *Für MS SQL wird nun zu den Tabellennamen auch das Schema angezeigt *In den Einstellungen kann man nun festlegen, ob das Programm beim Schließen eine Sicherheitsanfrage erscheinen soll oder nur minimiert werden soll (schließen kann man dann über das Kontextmenü des Notify-Icon).

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo Tom,

gibt es was neues von der DBASE Baustelle?

Gruß Bounty

Hallo!

@bounty4:
Hab' mir gestern mal die Code-Stellen angeschaut und bisher nicht herausfinden können, warum er komplett abbricht, da ja scheinbar der Fehler abgefangen wird und daher zumindest der Rest des Datensatzes eingelesen werden müsste.
Aber ich bleibe dran.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo!

Habe gerade Version 1.0.4036.509 hochgeladen (siehe Link im ersten Beitrag):*Snippets können nun einer bestimmten Datenquelle zugeordnet werden *Snippets können im Abfrage-Editor eingefügt werden (Strg-Einf), die Auswahl beschränkt sich auf Snippets des jeweiligen Datenquellentyps (Platzhalter werden noch nicht ersetzt) *Im Abfrage-Editor kann der gesamte Text nun mit Strg-A markiert werden *Die Abfrage kann über die Toolbox als Snippet gespeichert werden (Zuordnung zum Datenquellentyp erfolgt automatisch) *Im ResultPanel ist nun eine Statuszeile, welche nach einer Abfrage die Zeitpunkt, Dauer smwie Anzahl Zeilen und Spalten anzeigt *Die Statuszeile kann über die Toolbox ausgeblendet werden *Bzgl. dBase habe ich einige weitere Ausnahme-Prüfungen und Loggings eingebaut *Wenn nun bzgl. einer Datenquelle oder Tabelle weniger als 5 Snippets vorhanden sind, werden diese direkt im Kontextmenü angezeigt *Beim Beenden des Programms wird bei offenen Panels nachgefragt, ob diese geschlossen oder gespeichert werden sollen (werden dann beim nächsten Aufruf automatisch geöffnet) *In den Programm-Einstellungen kann man wählen, ob offene Panels beim Beenden immer gespeichert werden (eine umgekehrte Option "Nie speichern" gibt's noch nicht, ist mir gerade erst eingefallen)

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo Tom,

eine gute Nachricht.

Eine meiner DBASE Files kann angezeigt werden.
Bei der zweiten, da ist das DBT File allerdings riesengroß (1,4 GB) kommt folgende neue Fehlermeldung:

19.01.2011 07:09:33 Error GetRecord Error reading record 0 memotext (unknown block number type)

Erstelle ich eine Vrebindng zu einer .dbf Datei in einen Ordner ohne .dbt File dann öffnet wird die DB geöffnet.

Fragen:

  • Kannst du das DBT File ignorieren, falls es gefunden wird?
  • Funktionieren schon Abfragen, wie "SELECT * FROM Tabelle WHERE Spalte = '2005'"?
  • Würde gern eine deiner Komponenten für mein C# Programm nutzen. Wie muß ich das machen? Könntest du ein klitzekleines Sample schicken?

Danke schonmal

Gruß Bounty

Hallo

@bounty4:
Bei der ersten von dir genannten Datei funktionieren die Memotexte?
Leider ist mir erst heute morgen noch ein weiterer Punkt eingefallen (u.a. benutze ich sträflicherweise int.Parse anstatt int.TryParse), wie man das Einlesen verbessern kann.
Denn es kann ja sein, das bei einigen Datensätzen gar kein Memotext angegeben wurden.
Bzgl. "dbt ignorieren könnte ich evtl. eine Option in den Settings einbauen.
Abfragen in anderer Form als "select * from {tablename}" funktionieren noch nicht, der SQL-Parser ist aber in Arbeit.
Bzgl. Beispiel geibt es ein solches bereits weiter oben (sogar für dBase).

EDIT: Stand Nov. 2012: Mittlerweile werden dank des verbesserten SQL-Parsers auch einfache WHERE- und ORDER-Klauseln sowie TOP und DISTINCT berücksichtigt.

@all:
Im ersten Beitrag ist nun auch ein Screenshot, welcher die Symbole und Bereiche erklärt

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo Tom,

ja, bei einer Datei funktioniert es auch wenn die .dbt Datei im gleichen Ordner ist.
Wenn die dbf Datei in einem Netzlaufwerk liegt stürzt der DatabaseExplorer ab.

was den Code angeht - ich arbeite noch mit VS2005

 DbaseDataSourceSettings settings = new DbaseDataSourceSettings();

            FileSourceSettings FileSource = new FileSourceSettings();
            FileSource.FileName = "C:\\nn\\db4.dbf";
        
                using (var dataSource = Connections.CreateConnection(settings))
            if (dataSource != null)
            {
                DataTable dataTable = new DataTable();
                dataTable = dataSource.GetData("SELECT * FROM db4.dbf");
                // ...
            }

bei


var dataSource = Connections.CreateConnection(settings)

Komm ich nicht weiter.

Hast du einen Tipp?

Danke Gruß Bounty

Hallo!

Wenn die dbf Datei in einem Netzlaufwerk liegt stürzt der DatabaseExplorer ab.

Interessante Randbemerkung 😉. Pfadangabe wahrscheinlich in der Form "\Server\Freigabe..."?
Werde heute abend mal bei mir testen, wie es sich bei Netzlaufwerken verhält.

var dataSource = Connections.CreateConnection(settings)

Der Return-Typ von CreateConnection müsste IDataSourceSettings sein.
Und bei GetData lass im Select die Dateiendung weg.

EDIT: und mach dann gleich DataTable dataTable = dataSource.GetData..., da GetData eine DataTable erstellt.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Abfragen in anderer Form als "select * from {tablename}" funktionieren noch nicht, der SQL-Parser ist aber in Arbeit.

öhm,
ich habe ein korrektes Ergebnis bekommen, als ich ein Snippet mit zuhilfenahme von cte gebaut habe.

Gibt es eien Unterschied zwischen Snippets und Abfragen?

Hallo!

Ich bezog mich bei dieser Aussage natürlich nur auf die dateibasierten Datenquellen (CSV, dBase, HTML, ...), da hier z.Zt. einfach der gesamte Inhalt in eine DataTable geladen und übergeben wird.
Somit kann zusätzliche Funktionalität in Form von WHERE-Conditions, ... nur durch eine eigens simulierte Logik erfolgen. Diese wird nun erst mal Quick'n'dirty umgesetzt, um überhaupt erstmal die Möglichkeit zu bieten (DSL-Parser sind ja ein sehr mächtiges Thema), langfristig soll dann was vernünftiges und schnelles implementiert werden.

EDIT: Bei den "normalen" Datenbanken (MS SQL, Oracle, ...) werden die Eingaben natürlich 1:1 weiter gegeben, somit sind hier cte's, joins, where's und was auch immer möglich.

Nobody is perfect. I'm sad, i'm not nobody 🙁

Hallo tom-essen,

den Database-Explorer find ich auch ganz interessant. Ich muß gestehen, dass ich die meisten Posts nur überflogen habe. Ich wollte dein Projekt lieber erst direkt testen. Allerdings schaffe ich es nicht die zip-Datei zu öffnen. Sowohl 7zip als auch das Windows-eigene zip-Programm hauen mir Fehlermeldungen um die Ohren.

Wenn du das beheben könnte, wäre das klasse. Ich werd dann auch sofort testen. Danke!

"Fehler sind das Tor zu neuen Entdeckungen"

Hallo!

@Bundy.Net:
Danke für den Hinweis, hab's gerade behoben.
Folgende Änderungen sind dabei:*Bei MSSQL-DBs werden in der Tabellenliste nun keine Views mehr mit angezeigt *Beim Drag'n'Drop von Dateien öffnet sich nun ein Kontextmenü mit den möglichen Optionen *Bei Rechtsklick auf das TrayIcon öffnet sich nun ein Menü, u.a. mit den offenen Panels. Bei Auswahl wird das entsprechende Panel in den Vordergrund geholt, egal ob als TabPage oder als Form *In der Toolbar der Panels gibt es nun einen neuen Button, welcher die verwendete Datenquelle im TreeView markiert (und den Namen als ToolTip enthält) *Rudimentärer Ausdruck ist möglich (Druck-Einstellungen werden nicht gespeichert) *Kleinere Fehler beim XLSX-Import per OpenDocument behoben

Nobody is perfect. I'm sad, i'm not nobody 🙁

Jetzt hat es geklappt. Danke!

Drei Sachen sind mir aufgefallen:

  1. Unterstützung für MS SQL Compact wäre klasse und mir sehr wichtig.
  2. Wie im Anhang zu sehen, passen die Dialogboxen bei mir nicht. Die Buttons sind etwas verdeckt. Ist aber bei allen Dialogen so. Der Anhang soll nur als Beispiel dienen.
  3. Wollte eine Access-Datenbank öffnen und ein Ausnahmefehler kam. Ich hab Access 2007 installiert. Fehlt mir da noch was:

Fehlermeldung:
System.InvalidOperationException: Der 'Microsoft.Jet.OLEDB.4.0'-Provider ist nicht auf dem lokalen Computer registriert.
bei System.Data.OleDb.OleDbServicesWrapper.GetDataSource(OleDbConnectionString constr, DataSourceWrapper& datasrcWrapper)
bei System.Data.OleDb.OleDbConnectionInternal..ctor(OleDbConnectionString constr, OleDbConnection connection)
bei System.Data.OleDb.OleDbConnectionFactory.CreateConnection(DbConnectionOptions options, Object poolGroupProviderInfo, DbConnectionPool pool, DbConnection owningObject)
bei System.Data.ProviderBase.DbConnectionFactory.CreateNonPooledConnection(DbConnection owningConnection, DbConnectionPoolGroup poolGroup)
bei System.Data.ProviderBase.DbConnectionFactory.GetConnection(DbConnection owningConnection)
bei System.Data.ProviderBase.DbConnectionClosed.OpenConnection(DbConnection outerConnection, DbConnectionFactory connectionFactory)
bei System.Data.OleDb.OleDbConnection.Open()
bei TD.Additional.Data.MSOffice.Access.AccessDataSourceAdapter.LoadFile(String fileName)
bei TD.Additional.Data.MSOffice.Access.AccessDataSourceAdapter.GetTableNames()
bei TD.Additional.Data.File.FileDataSource.GetTableNames()
bei DatabaseExplorer.MainForm.treeViewDataSources_BeforeExpand(Object sender, TreeViewCancelEventArgs e)
bei TD.Additional.UI.WinForms.Controls.LoadOnDemandTreeView.OnBeforeExpand(TreeViewCancelEventArgs e)
bei System.Windows.Forms.TreeView.TvnExpanding(NMTREEVIEW* nmtv)
bei System.Windows.Forms.TreeView.WmNotify(Message& m)
bei System.Windows.Forms.TreeView.WndProc(Message& m)
bei System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
bei System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)

"Fehler sind das Tor zu neuen Entdeckungen"

Hallo!

@Bundy.NET:
Zu 1.) MS SQL Compact setze ich mal mit auf meine Liste
Zu 2.) Hast du evtl. bei dir die DPI-Einstellung geändert?
Zu 3.) Der Access-Import ist z.Zt. äusserst rudimentär eingebunden und geht über den genannten OLE-Treiber. Der Connectionstring sieht so aus:

Provider=Microsoft.Jet.OLEDB.4.0;Data Source={Name der Accessdatei}

. Die Treiber erhälst du hier:*Download details: Microsoft Access Database Engine 2010 Redistributable *So erhalten Sie das aktuelle Service Pack für die Microsoft Jet 4.0-Datenbank-Engine *Microsoft Download Center: Search Results

Und dann musst du noch aufpassen, wenn du ein 64bit-System hast, da gibt's wohl auch noch Unterschiede.

Nobody is perfect. I'm sad, i'm not nobody 🙁

zu 1.) Das find ich super.

zu 2.)
Ich habe gerade mal nachgesehen und ich hab die Textgröße wie es bei Windows 7 heißt auf 125%. Habe auf meinem Notebook eine recht hohre Auflösung und da sind mir die Zeichen zu klein. Aber für mich als Anwender wärs ja recht umständlich für ein Programm immer das umzustellen.

zu 3.) Danke für die Links!

"Fehler sind das Tor zu neuen Entdeckungen"

Hallo!

@all:
Im ersten Beitrag ist nun auch ein Screenshot, welcher die Symbole und Bereiche erklärt

@Bundy.NET:
zu 2.) Da musst du nichts umstellen, wollte nur wissen, ob es daran liegt. Die Herausforderung dabei ist, dass diese Dialoge zur Laufzeit erstellt werden, da muss ich mal schauen, wie ich das mit in die Größenberechnung einbauen kann.

Nobody is perfect. I'm sad, i'm not nobody 🙁