{"id":1697,"date":"2010-03-10T22:32:06","date_gmt":"2010-03-10T20:32:06","guid":{"rendered":"http:\/\/funrecycler.com\/?p=5613"},"modified":"2010-03-10T22:32:06","modified_gmt":"2010-03-10T20:32:06","slug":"vb-net-sqlite-datenbankanbindung-teil-3","status":"publish","type":"post","link":"https:\/\/funrecycler.com\/index.php\/2010\/03\/10\/vb-net-sqlite-datenbankanbindung-teil-3\/","title":{"rendered":"VB.net &#8211; sqlite Datenbankanbindung &#8211; Teil 3"},"content":{"rendered":"<p style=\"overflow-wrap:anywhere\">Im zweiten Teil wurden per Quellcode Tabellen erstellt und Daten eingef\u00fcgt. Im dritten Teil nun ein paar Funktionen zum abrufen von Daten aus sqlite Tabellen. Hierf\u00fcr verwende ich mehrere Funktionen. Dies ist notwendig da einige Abfragen nur ein einziges Ergebnis liefern, andere wiederum eine komplette Tabelle. Praktischerweise speichert man solche Abfragedaten in ein Array um sie sp\u00e4ter einfacher zu verwenden. 1. NonAry Abfragen F\u00fcr den normalen Gebrauch ergeben sich so 3 unterschiedliche Abfragetypen. M\u00f6chte man zum Beispiel die Anzahl Zeilen einer Tabelle zur\u00fcckgeben, so erledigt man dies mit &quot;select count(*) from &#8230;&quot;. Als Ergebnis erh\u00e4lt man eine Zahl. Als Datentyp kommt hier Integer in Frage. F\u00fcr diese Art der Abfrage baut man sich eine Funktion welche als R\u00fcckgabe eine Ergebnis liefert. Dies sieht wie folgt aus: <\/p>\n<pre><code>Public Function func_sql_one_res(sub_sql as String)\nDim sub_result As String\nDim i As Int16\n&#x27;cmd erstellen, abfrage zuweisen\nsqlite_cmd = sqlite_connect.CreateCommand\nsqlite_cmd.CommandText = sub_sql\n&#x27;abfrage ausf\u00fchren\ndim sqlreader as SQLiteDataReader  = sqlite_cmd.ExecuteReader()\n&#x27;daten \u00fcbergeben\nsub_result = sqlreader(0)\n&#x27;r\u00fcckgabe des strings\nreturn sub_result\nEnd Function<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Eventuell m\u00f6chte man nicht nur die Anzahl Zeilen abfragen, sondern eine Zeichenkette, so ist die interne Variable vom Typ String erforderlich. Bei der R\u00fcckgabe aus der Funktion an eine Variable, kann man mit &quot;cint&quot; zum Beispiel das Ergebnis in Integer wandeln. Die Anzahl Zeilen in der Personendaten Tabelle ruft man entsprechend mit &quot;Count&quot; ab. <\/p>\n<pre><code>Dim count_personal as Int64\n&#x27;sql abfrage erstellen\nsqlite_string = &quot;select count(*) from Personen&quot;\n&#x27;sql abfrage ausf\u00fchren, r\u00fcckgabe in var speichern\ncount_personal = cint(func_sql_one_res(sqlite_string))<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> 2. Eindimensionale Abfragen Eine Abfrage welche als Beispiel, die verschiedenen St\u00e4dte in der Personen Tabelle liefert, kann nicht mit der ersten Funktion ermittelt werden. Das Ergebnis kann mehre St\u00e4dte enthalten und somit ist es notwendig ein 1D Array einzusetzen. <\/p>\n<pre><code>Public Function func_sql_1d_ary(sub_sql As String)\n&#x27;ary erstellen\nDim sub_ary(1000) As String\nDim sub_internal_counter As Int64 = 0\n&#x27;cmd erstellen, abfrage zuweisen\nsqlite_cmd = sqlite_connect.CreateCommand\nsqlite_cmd.CommandText = sub_sql\n&#x27;abfrage ausf\u00fchren\ndim sqlreader as SQLiteDataReader  = sqlite_cmd.ExecuteReader()\n&#x27;ary f\u00fcllen\nWhile sqlreader.Read()\n    sub_ary(sub_internal_counter) = sqlreader(0)\n    sub_internal_counter += 1\nEnd While\n&#x27;r\u00fcckgabe des arys\nReturn sub_ary\nEnd Function<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> \u00dcber den Internal Counter werden die einzelnen Ergebnisse in das Array gespeichert beginnend mit 0. Der Aufruf geschieht analog der ersten Funktion, nur das hier ein Array \u00fcbergeben wird. <\/p>\n<pre><code>Dim ary_staedte() as String\n&#x27;sql abfrage erstellen\nsqlite_string = &quot;select distinct ort from Personen&quot;\n&#x27;sql abfrage ausf\u00fchren, r\u00fcckgabe in var speichern\nary_steadte = func_sql_1d_ary(sqlite_string)<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> 3. Zweidimensionale Abfragen Nun wird es interessant. M\u00f6chte man nun die komplette Personentabelle auslesen, um anschlie\u00dfend die gelesenen Daten in einer Listview darzustellen, ist ein 2D Array notwendig. Ein 2D Array ist nichts anderes als zum Beispiel eine Excel Tabelle. Es gibt Spalten und Zeilen und nach diesen Schema ist sowohl unsere Personen Tabelle aufgebaut als auch das Array welches bef\u00fcllt werden soll. Auf die 2D Abfrage gehen ich etwas n\u00e4her ein: <\/p>\n<pre><code>Public Function func_sql_ary(sub_sql As String,sub_sql_count as String<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Die Funktion ben\u00f6tigt 2 Parameter, der Abfrage String (Daten) und den Count String (Anzahl Datens\u00e4tze). <\/p>\n<pre><code>Dim sub_internal_counter As Int64\nDim sub_anzahl_rows as Int64\nDim i As Int16<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Interne Variablen <\/p>\n<pre><code>sub_anzahl_rows = func_sql_one(sub_sql_count)<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Anzahl der Datens\u00e4tze \u00fcber die NonAry Abfrage ermitteln <\/p>\n<pre><code>sqlite_cmd = sqlite_connect.CreateCommand\nsqlite_cmd.CommandText = sub_sql<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Command erstellen <\/p>\n<pre><code>dim sqlreader as SQLiteDataReader  = sqlite_cmd.ExecuteReader()<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Abfrage ausf\u00fchren <\/p>\n<pre><code>Dim sub_ary(sub_anzahl_rows, sqlreader.FieldCount -1) as String<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Array erstellen aus Anzahl der Datens\u00e4tze und Anzahl der Felder <\/p>\n<pre><code>While sqlreader.Read()\n   For i = 0 To sqlreader.FieldCount -1\n       sub_ary(sub_internal_counter, i ) = sqlreader(i)\n   Next\n   sub_internal_counter += 1\nEnd While<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> \u00dcber die While Schleife wird Abfrage abgearbeitet. Innerhalb dieser wird mit der For Schleife die Anzahl der Felder im Array Zeile f\u00fcr Zeile das Array gef\u00fcllt. sub_internal_counter = Anzahl Datens\u00e4tze sqlreader.FieldCount = Anzahl Felder <\/p>\n<pre><code>Return sub_ary<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> R\u00fcckgabe des Arrays Aufruf erfolgt mit 2 Sql Strings. <\/p>\n<pre><code>Dim act_result(,) as String\nsqlite_string = &quot;select per_name, per_corname, per_strasse, per_plz, per_ort from personen&quot;\nsqlite_string_count = &quot;select count(*) from personen&quot;\nact_result = func_sql_ary(sqlite_string, sqlite_string_count)<\/code><\/pre>\n<p style=\"overflow-wrap:anywhere\"> Die komplette Personen Tabelle befindet sich nun im 2D Array act_result. Das Array ist wie folgt gef\u00fcllt: act_result(0,0) = Zeile 1, Feld 1 &#x27;Name act_result(0,0) = Zeile 1, Feld 2 &#x27;Vorname act_result(0,0) = Zeile 1, Feld 3 &#x27;Strasse act_result(0,0) = Zeile 1, Feld 4 &#x27;PLZ act_result(0,0) = Zeile 1, Feld 5 &#x27;Ort act_result(1,0) = Zeile 2, Feld 1 &#x27;Name act_result(1,0) = Zeile 2, Feld 2 &#x27;Vorname &#8230; Nun viel Spa\u00df mit Sqlite.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im zweiten Teil wurden per Quellcode Tabellen erstellt und Daten eingef\u00fcgt. Im dritten Teil nun ein paar Funktionen<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[5],"tags":[1537,1688,1689,1690],"class_list":["post-1697","post","type-post","status-publish","format-standard","hentry","category-programmieren","tag-sqlite","tag-sqlite-abfragen","tag-sqlite-array","tag-sqlite-vb-net"],"_links":{"self":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/1697","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/comments?post=1697"}],"version-history":[{"count":1,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/1697\/revisions"}],"predecessor-version":[{"id":2709,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/1697\/revisions\/2709"}],"wp:attachment":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/media?parent=1697"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/categories?post=1697"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/tags?post=1697"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}