ERLEDIGT
NEIN
NEIN
ANTWORTEN
8
8
ZUGRIFFE
3147
3147
EMPFEHLEN
-
Hallo ihr,
ich habe ein Recordset mit einer Tabelle aus einer MySQL-Datenbank gefüllt und möchte dieses nun auswerten, ohne vorher zu wissen wie groß oder welcher Inhalt das Recordset hat. Ich möchte es mir faktisch irgendwie Tabellarisch anzeigen lassen.
Da ich in dieser Sache (auch generell) ein ziemlicher Neuling in Sachen VB.NET programmierung bin, schlag ich mich jetzt schon ne ziemliche weile (ca. 1woche) damit rum. *seufts*
Ich habe schon ziemlich viele Hilfen durchforstet und sowieso schon lange den Überblick verloren, so weis ich nun immer noch nicht wie ich aus dem Recordset Spaltenbezeichnung(Header einer Spalte) oder Zusatzinformationen wie Datentyp der Spalte oder ähnliches herausbekomme. (Recordcount gibt mir zwar die Zeilenanzahl an, finde ich aber noch zu dürftig)
'tbInhalt.Text = rs.GetString' von einem Recordset ist ja nicht so das wahre...die Header fehlen und die Formatierung ist sowieso unschön.
Mit einem DataGridView habe ich bisher ebenfalls nichts hinbekommen können. Bei dem Ding blicke ich schlicht und einfach nicht durch, wie ich da Daten aus einem Recordset reinbekommen soll. (Brauche ich dafür ein DataSet? oder geht das Recordset auch direkt in ein DataGridView?)
Wie in der Hilfe beschrieben geht dat bei mir irgendwie nicht, da wird nichts angezeigt:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
' Set up the DataGridView. With Me.DataGridView1 ' Automatically generate the DataGridView columns. .AutoGenerateColumns = True ' Set up the data source. .DataSource = rs.DataSource ' Automatically resize the visible rows. .AutoSizeRowsMode = _ DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders ' Set the DataGridView control's border. .BorderStyle = BorderStyle.Fixed3D ' Put the cells in edit mode when user enters them. .EditMode = DataGridViewEditMode.EditOnEnter End With
Ein DataSet mit dem RecordSet zu füllen hab ich auch noch nicht hinbekommen, da ich scheinbar keinen OleDbDataAdapter habe!? um es zu füllen. Bzw. wofür ist das Ding eigendlich gut wenn man schon ein Recordset hat?Geändert von Ignus (16.07.06 um 18:55 Uhr)
-
Hallo Ignus,
in .NET sollte man auch ADO.NET verwenden und nicht ADO.
Desweiteren gibt es in ADO.NET keine Recordsets mehr.
Ein DataGrid oder DataGridView kann über ein DataSet, DataView oder DataTable gebunden werden, nicht aber ein ADODB.Recordset.
Um einen ADODB.Recordset in ein DataSet zu zwängen gibt es
die OleDbDataAdapter.Fill Methode. Das ist aber ein Notnagel.
Setze Dich grundlegend mit ADO.NET auseinander.
Die (Online) Hilfe enthält dazu diverse Grundlagenartikel unter
http://msdn2.microsoft.com/de-de/library/e80y5yhx.aspx
"ADO.NET".
Jens
-
Also sind ADODB.RecordSet und .DataSet von ADO das selbe nur beides unterschiedliche Systeme. Das erklärt einiges, war aber bist zu deinem Post aus den Hilfen nicht gerade ersichtlich. Mal schauen ob ichs jetzt hinbekomme.
Hoffentlich kann ich mit ADO.Net auch so einfach auf eine MySql Datenbank zugreifen.
Vielen Dank für deine Antwort.
-
Hi,
Das geht mit MySQL genauso einfach wie mit jedem anderen DBMS auch. Vorausgesetzt, du vergisst nicht den MySQL-DataAdapter zu installieren
Grüße Nico
----------------------
Xing
----------------------
Zitat von Mark Twain (1835-1910)
Zitat von Mike Wilson - Biographie über Larry Ellison (CEO Oracle)
-
Hallo Ignus,
bei MySQL empfehle ich dir den offiziellen .NET Connector zu benutzen.
Den kannst du bei mysql.com herunterladen.
In deinem Programm musst du dann die mysql.data.dll als Verweis einbinden.
Die letzte Version ist glaub ich 1.07.
Jens
-
Vielen Dank für eure Hilfen bisher.
Ja genau den hatte ich schon zuvor installiert nach einigem Forenstöbern, sonst hätte ich ja das Recordset garnicht füllen können oder? Egal. Ich verlass mich mal voll auf Profies Aussagen und mach das jetzt nur noch mit dem ADO.NET. Das scheint mir jetzt am besten geeignet, denn falls man extra Wünsche hat auch mit anderen Datenbankentypen kann man scheinbar recht uneingeschränkt agieren.
Aber auf mich sollte man eigendlich nicht hören :P - dafür hab ich noch zu wenig Erfahrung/Kenntnisse.
Ok, hier ist nun der funktionierende Code womit ich auf eine MySql-Datenbank connecte und den Select im DataGridView anzeigen lasse über eine gespeiste DataTable:
Verwendete Verweise:Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60
Imports MySql.Data.MySqlClient Public Class Form1 Private Sub btnConnect_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnConnect.Click 'Definition der Zugangsdaten: Dim myServer As String = tbServer.Text Dim myUser As String = tbUser.Text Dim myPasswort As String = tbPasswort.Text Dim myDatenbank As String = tbDatenbank.Text Dim myTabelle As String = tbTabelle.Text Dim mySelect As String = "SELECT * FROM " & tbTabelle.Text 'Treiberkommandos: Dim conn As MySqlConnection Dim myDatas As DataTable Dim dataAdapter As MySqlDataAdapter 'Verbindung: conn = New MySqlConnection("Database=" & tbDatenbank.Text & ";Data Source=" & tbServer.Text & ";User Id=" & tbUser.Text & ";Password=" & tbPasswort.Text & ";") conn.Open() 'Verbindungsstatus: 'tbStatus.Text = conn.State.ToString() If conn.State = ConnectionState.Open Then tbStatus.Text = "Verbindung zum Server war erfolgreich." Else : tbStatus.Text = "Verbindung zum Server war NICHT erfolgreich." End If 'Einlesen der Daten in eine DataTable: dataAdapter = New MySqlDataAdapter(mySelect, conn) myDatas = New DataTable dataAdapter.Fill(myDatas) 'übergeben der Daten an ein DataGridView: With Me.DataGridView1 ' Automatically generate the DataGridView columns. .AutoGenerateColumns = True ' Set up the data source. .DataSource = myDatas ' Automatically resize the visible rows. .AutoSizeRowsMode = _ DataGridViewAutoSizeRowsMode.DisplayedCellsExceptHeaders ' Set the DataGridView control's border. .BorderStyle = BorderStyle.Fixed3D ' Put the cells in edit mode when user enters them. .EditMode = DataGridViewEditMode.EditOnEnter End With conn.Close() End Sub
Microsoft ADO Ext. 2.8 for DDL and Security
Microsoft ActiveX Data Objects 2.8 Library
MySql.Data.dll
System.Data
Hab da noch was *g*
Ich habe ja verschiedenste Möglichkeiten mir mit ADO.NET Daten von einer Datenbank einzulesen und zwischen zu speichern. Mit dem Reader, dem DataSet, der DataTable und wahrscheinlich gibts noch irgend etwas was ich noch nicht gefunden habe. Da ich momentan noch nicht so recht den Überblick aller habe, wollte ich wissen was davon die beste/einfachste Möglichkeit ist, um zwischengespeicherten Daten zu handeln, umzusortieren oder weitere Infos aus einer Tabelle zu ziehen, wie Datenformat oder Tabelleneigenschaften?Geändert von Ignus (17.07.06 um 21:54 Uhr)
-
Hallo Ignus,
nee, nicht egal
Zitat von Ignus

Ignus , ein Recordset gibt es gar nicht mehr unter ADO.NET und die MySql.Data.dll
ist für ADO.NET entwickelt wurden.
Du musst umdenken unter ADO.NET. Es gibt hier keine Recordsets mehr. Vergleichbar
wäre der DataReader in ADO.NET. Er ist verdammt schnell aber kann nur vorwärts lesen.
Die Verweise
Zitat von Ignus
Microsoft ADO Ext. 2.8 for DDL and Security
Microsoft ActiveX Data Objects 2.8 Library
brauchst du in deinem Code gar nicht mehr.
Es kommt darauf an was man machen will. Willst du die Daten nur schnell lesen
Zitat von Ignus
dann ist der Reader das beste.
Hast du nur eine Tabelle dann füllst du ein DataTable.
Hast du Relationen mit mehreren Tabellen dann brauchst du ein DataSet.
Ein DataSet ist ein riesiger Puffer der ganze Datenbanken abbilden kann und das
im Offline Betrieb. D.h. ADO.NET ist eigentlich darauf ausgelegt um Netzlast zu
verringern in dem alle Änderungen erst in einem DataSet übernommen werden und später
zum richtigen Zeitpunkt per Adapter an die richtige DB übergeben werden.
Beschäftige mal ne Weile damit und hole dir ein gutes Buch oder Beispiele aus dem
Netz.
Gruß
Jens
-
Danke für die Info, langsam wird die ganze Sache in meinem Kopf klarer. Also ist ein Dataset einer Accessdb sehr ähnlich und faktisch eine virtuelle Datenbank.
Und mein Recordset habe ich füllen können, also irgendwas muss da funktioniert haben *g*
Ja was ich brauch ist eigendlich genau so ein DataSet. Ich müsste eben ziemlich viele (bis zu 10.000) und manchmal nur wenige Datensätze auslesen aus einer Accessdb und es nach Oracle 10.irgendwas zeitgesteuert senden können oder auch umgekehrt. Die MySQL-db dient hierbei nur zum Testen, weil es ja eigendlich egal ist woher man seine Datenbank bekommt. Eine Schattenkopie des ganzen geht nicht, weil es nicht alle Daten sein sollen und die Oracledb bei mir Bezeichnungsnomenklaturen hat, die man möglichst einhalten sollte. Ich weis nocht nicht genau wie ichs am besten mache. Dazu würde ich mir im Programm Benutzerprofile reinmachen, welche ebenfalls über ein DataSet erreichbar wären.
Dazu hätte ich aber schon wieder mal wieder ne Frage
Ein DataSet wird ja im Arbeitsspeicher reserviert. Bisher habe ich nirgends lesen können, inwiefern es nach beenden des Programmes oder überhaupt wenn es nicht mehr benötigt wird, wieder aus dem Arbeitsspeicher entfernt wird. Weil so ein Ding kann ja schon ziemlich gross werden, wenn man damit komplette DBs einlesen kann.
Wenn es manuell geht wärs eine feine Sache, so würde man sich den Arbeitsspeicher nicht so zumüllen wärend das Programm läuft.
Das weiter Ding ist, dass man das DataSet scheinbar auf die schnelle nur als XML-Datei abspeichern kann.. ebenfalls sehr zum Leid der Dateigrösse. An dieser Stelle muss ich es wahrscheinlich umständlich machen und mit dem DataSet eine eigene Accessdb oder sowas speisen, in der dann nur Benutzerprofile von dem Programm abgelegt werden. Ausser es hat einer ne bessere Möglichkeit wie man ein DataSet abspeichern kann *g*Geändert von Ignus (20.07.06 um 16:35 Uhr)
-
Ok ich Dummi,
mit .Clear geht das natürlich - sorry.
Womit ich aber noch unzufrieden bin ist dieses WriteXml. Nehmen wir mal an ich hab 100 Datensätze. Speicher ichs nu ab, hat die Datei mal eben mehr als das Dreifache seiner notwendigen Grösse. Faktisch braucht ein Wort damit 3x soviel Speicherplatz.
Und ich nehme mal an um ein DataSet anders abzuspeichern ist die einzigste Möglichkeit, jedes fitzelchen aus dem DataSet auszulesen und nacheinander in eine Datei als String zu ballern oder gehts auch einfacher?
Ähnliche Themen
-
Recordset + Access bzw. VB
Von Jacizzle im Forum Relationale DatenbanksystemeAntworten: 3Letzter Beitrag: 02.12.08, 16:34 -
Recordset Update
Von Manii im Forum Visual Basic 6.0Antworten: 8Letzter Beitrag: 17.07.07, 14:53 -
ADO Recordset-Problem
Von ronaldo84 im Forum Visual Basic 6.0Antworten: 6Letzter Beitrag: 09.08.05, 17:57 -
RecordSet und Listbox
Von Knuddel im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 11.12.04, 11:54 -
Recordset in Array
Von Icem@n im Forum Visual Basic 6.0Antworten: 11Letzter Beitrag: 10.10.03, 04:00





Zitieren

Login





