{"id":5613,"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>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.<br \/>\nHierf\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.<br \/>\n1. NonAry Abfragen<br \/>\nF\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 &#8222;select count(*) from &#8230;&#8220;. 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 lang=\"VB\">Public Function func_sql_one_res(sub_sql as String)\nDim sub_result As String\nDim i As Int16\n'cmd erstellen, abfrage zuweisen\nsqlite_cmd = sqlite_connect.CreateCommand\nsqlite_cmd.CommandText = sub_sql\n'abfrage ausf\u00fchren\ndim sqlreader as SQLiteDataReader  = sqlite_cmd.ExecuteReader()\n'daten \u00fcbergeben\nsub_result = sqlreader(0)\n'r\u00fcckgabe des strings\nreturn sub_result\nEnd Function<\/pre>\n<p>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 &#8222;cint&#8220; zum Beispiel das Ergebnis in Integer wandeln.<br \/>\nDie Anzahl Zeilen in der Personendaten Tabelle ruft man entsprechend mit &#8222;Count&#8220; ab.<\/p>\n<pre lang=\"VB\">Dim count_personal as Int64\n'sql abfrage erstellen\nsqlite_string = \"select count(*) from Personen\"\n'sql abfrage ausf\u00fchren, r\u00fcckgabe in var speichern\ncount_personal = cint(func_sql_one_res(sqlite_string))<\/pre>\n<p>2. Eindimensionale Abfragen<br \/>\nEine 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 lang=\"VB\">Public Function func_sql_1d_ary(sub_sql As String)\n'ary erstellen\nDim sub_ary(1000) As String\nDim sub_internal_counter As Int64 = 0\n'cmd erstellen, abfrage zuweisen\nsqlite_cmd = sqlite_connect.CreateCommand\nsqlite_cmd.CommandText = sub_sql\n'abfrage ausf\u00fchren\ndim sqlreader as SQLiteDataReader  = sqlite_cmd.ExecuteReader()\n'ary f\u00fcllen\nWhile sqlreader.Read()\n    sub_ary(sub_internal_counter) = sqlreader(0)\n    sub_internal_counter += 1\nEnd While\n'r\u00fcckgabe des arys\nReturn sub_ary\nEnd Function<\/pre>\n<p>\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 lang=\"VB\">Dim ary_staedte() as String\n'sql abfrage erstellen\nsqlite_string = \"select distinct ort from Personen\"\n'sql abfrage ausf\u00fchren, r\u00fcckgabe in var speichern\nary_steadte = func_sql_1d_ary(sqlite_string)<\/pre>\n<p>3. Zweidimensionale Abfragen<br \/>\nNun 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.<br \/>\nAuf die 2D Abfrage gehen ich etwas n\u00e4her ein:<\/p>\n<pre lang=\"VB\">Public Function func_sql_ary(sub_sql As String,sub_sql_count as String<\/pre>\n<p>Die Funktion ben\u00f6tigt 2 Parameter, der Abfrage String (Daten) und den Count String (Anzahl Datens\u00e4tze).<\/p>\n<pre lang=\"VB\">Dim sub_internal_counter As Int64\nDim sub_anzahl_rows as Int64\nDim i As Int16<\/pre>\n<p>Interne Variablen<\/p>\n<pre lang=\"VB\">sub_anzahl_rows = func_sql_one(sub_sql_count)<\/pre>\n<p>Anzahl der Datens\u00e4tze \u00fcber die NonAry Abfrage ermitteln<\/p>\n<pre lang=\"VB\">sqlite_cmd = sqlite_connect.CreateCommand\nsqlite_cmd.CommandText = sub_sql<\/pre>\n<p>Command erstellen<\/p>\n<pre lang=\"VB\">dim sqlreader as SQLiteDataReader  = sqlite_cmd.ExecuteReader()<\/pre>\n<p>Abfrage ausf\u00fchren<\/p>\n<pre lang=\"VB\">Dim sub_ary(sub_anzahl_rows, sqlreader.FieldCount -1) as String<\/pre>\n<p>Array erstellen aus Anzahl der Datens\u00e4tze und Anzahl der Felder<\/p>\n<pre lang=\"VB\">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<\/pre>\n<p>\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.<br \/>\nsub_internal_counter = Anzahl Datens\u00e4tze<br \/>\nsqlreader.FieldCount = Anzahl Felder<\/p>\n<pre lang=\"VB\">Return sub_ary<\/pre>\n<p>R\u00fcckgabe des Arrays<br \/>\nAufruf erfolgt mit 2 Sql Strings.<\/p>\n<pre lang=\"VB\">Dim act_result(,) as String\nsqlite_string = \"select per_name, per_corname, per_strasse, per_plz, per_ort from personen\"\nsqlite_string_count = \"select count(*) from personen\"\nact_result = func_sql_ary(sqlite_string, sqlite_string_count)<\/pre>\n<p>Die komplette Personen Tabelle befindet sich nun im 2D Array act_result.<br \/>\nDas Array ist wie folgt gef\u00fcllt:<br \/>\nact_result(0,0) = Zeile 1, Feld 1 &#8218;Name<br \/>\nact_result(0,0) = Zeile 1, Feld 2 &#8218;Vorname<br \/>\nact_result(0,0) = Zeile 1, Feld 3 &#8218;Strasse<br \/>\nact_result(0,0) = Zeile 1, Feld 4 &#8218;PLZ<br \/>\nact_result(0,0) = Zeile 1, Feld 5 &#8218;Ort<br \/>\nact_result(1,0) = Zeile 2, Feld 1 &#8218;Name<br \/>\nact_result(1,0) = Zeile 2, Feld 2 &#8218;Vorname<br \/>\n&#8230;<br \/>\nNun 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":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[14],"tags":[2449,2450,2451,2455],"class_list":["post-5613","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\/5613","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=5613"}],"version-history":[{"count":0,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/posts\/5613\/revisions"}],"wp:attachment":[{"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/media?parent=5613"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/categories?post=5613"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/funrecycler.com\/index.php\/wp-json\/wp\/v2\/tags?post=5613"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}