<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[sqlite Datenbank]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe mal eine Frage bezüglich SQLITE. Hat jemand ein Beispiel wie man SQLITE in einer VCL Anwendung zum laufen bringt bzw. Daten aus einer SQL Tabelle ausgibt?</p>
<p>Hier mal ein Beispiel was ich gefunden habe:</p>
<pre><code>#include &lt;stdlib.h&gt; 
#include &lt;sqlite.h&gt; 

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Tabelle anlegen und füllen:
datenbank = sqlite_open( &quot;MeineDatenbank&quot; , 0 , NULL);

  // (Da das nur Anweisungen sind, brauchen wir die Callbackfunktion nicht und lassen den 3ten Parameter auf &quot;NULL&quot;) 
  sqlite_exec( datenbank , &quot;create table test(number integer , eintrag varchar(50) , primary key(number));&quot; , NULL , NULL , NULL); 
  sqlite_exec( datenbank , &quot;insert into test (number , eintrag) values (1 , 'Testeintrag');&quot; , NULL , NULL , NULL);
  sqlite_exec( datenbank , &quot;insert into test (number , eintrag) values (2 , 'Testeintrag 2');&quot; , NULL , NULL , NULL);
  sqlite_exec( datenbank , &quot;insert into test (number , eintrag) values (3 , 'Testeintrag 3');&quot; , NULL , NULL , NULL); 

  // Anfrage an Datenbank: Wir wollen alle Felder aus der Spalte &quot;eintrag&quot;: 
  //sqlite_exec( datenbank , &quot;select eintrag from test;&quot; , Callback , NULL , NULL); 

  // Das war`s, wir schließen die Datenbank: 
  sqlite_close(datenbank);

}
</code></pre>
<p>Es gibt dort eine Anweisung mit Namen &quot;sqlite_exec&quot; welche die Anfrage auf die DB startet. Die Daten können dann über eine weitere FUnktion abgerufen werde:</p>
<pre><code>/*
Die Callback- Funktion gibt uns die Ergebnisse unserer Anfragen zurück:
1ter Parameter: Ist nicht notwendig
2ter Parameter: Anzahl der Spalten im Ergebnis
3ter Parameter: Array von Pointern auf die Strings für die einzelnen Felder
4ter Parameter: Name der Spalte
*/

int Callback( void *Pointer, int argc, char **argv, char **columnNames)
{
cout&lt;&lt; *argv &lt;&lt;endl; // Gibt die Einträge der Spalte &quot;eintrag&quot; aus

return 0;
}
</code></pre>
<p>Mir ist nun aber nicht klar wie ich dieses auf eine nicht-Konsolen-Anwendung übertrage.Für ein Beispiel wäre ich sehr dankbar.</p>
<p>Gruß<br />
KMB</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168166/sqlite-datenbank</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 09:36:33 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168166.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 19 Dec 2006 10:30:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to sqlite Datenbank on Tue, 19 Dec 2006 10:30:48 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe mal eine Frage bezüglich SQLITE. Hat jemand ein Beispiel wie man SQLITE in einer VCL Anwendung zum laufen bringt bzw. Daten aus einer SQL Tabelle ausgibt?</p>
<p>Hier mal ein Beispiel was ich gefunden habe:</p>
<pre><code>#include &lt;stdlib.h&gt; 
#include &lt;sqlite.h&gt; 

void __fastcall TForm1::Button1Click(TObject *Sender)
{
// Tabelle anlegen und füllen:
datenbank = sqlite_open( &quot;MeineDatenbank&quot; , 0 , NULL);

  // (Da das nur Anweisungen sind, brauchen wir die Callbackfunktion nicht und lassen den 3ten Parameter auf &quot;NULL&quot;) 
  sqlite_exec( datenbank , &quot;create table test(number integer , eintrag varchar(50) , primary key(number));&quot; , NULL , NULL , NULL); 
  sqlite_exec( datenbank , &quot;insert into test (number , eintrag) values (1 , 'Testeintrag');&quot; , NULL , NULL , NULL);
  sqlite_exec( datenbank , &quot;insert into test (number , eintrag) values (2 , 'Testeintrag 2');&quot; , NULL , NULL , NULL);
  sqlite_exec( datenbank , &quot;insert into test (number , eintrag) values (3 , 'Testeintrag 3');&quot; , NULL , NULL , NULL); 

  // Anfrage an Datenbank: Wir wollen alle Felder aus der Spalte &quot;eintrag&quot;: 
  //sqlite_exec( datenbank , &quot;select eintrag from test;&quot; , Callback , NULL , NULL); 

  // Das war`s, wir schließen die Datenbank: 
  sqlite_close(datenbank);

}
</code></pre>
<p>Es gibt dort eine Anweisung mit Namen &quot;sqlite_exec&quot; welche die Anfrage auf die DB startet. Die Daten können dann über eine weitere FUnktion abgerufen werde:</p>
<pre><code>/*
Die Callback- Funktion gibt uns die Ergebnisse unserer Anfragen zurück:
1ter Parameter: Ist nicht notwendig
2ter Parameter: Anzahl der Spalten im Ergebnis
3ter Parameter: Array von Pointern auf die Strings für die einzelnen Felder
4ter Parameter: Name der Spalte
*/

int Callback( void *Pointer, int argc, char **argv, char **columnNames)
{
cout&lt;&lt; *argv &lt;&lt;endl; // Gibt die Einträge der Spalte &quot;eintrag&quot; aus

return 0;
}
</code></pre>
<p>Mir ist nun aber nicht klar wie ich dieses auf eine nicht-Konsolen-Anwendung übertrage.Für ein Beispiel wäre ich sehr dankbar.</p>
<p>Gruß<br />
KMB</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194588</guid><dc:creator><![CDATA[kmb]]></dc:creator><pubDate>Tue, 19 Dec 2006 10:30:48 GMT</pubDate></item><item><title><![CDATA[Reply to sqlite Datenbank on Tue, 19 Dec 2006 10:47:51 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das hat weniger was mit Konsole oder nicht zu tun.<br />
Die Callback-Fuktion muß statisch sein, darf also nicht von einer Instanz einer Klasse, zum Beispiel des Forms, abhängig sein.<br />
Aber dafür gibt es den Parameter, den du als &quot;nicht notwendig&quot; erklärst. Dort kannst du das Form übergeben. Das Prinzip ist häufig in Callback-Systemen zu finden, wie zum Beispiel in der WinAPI.</p>
<p>Du must die exec-Funktion mit dem Form als Argument aufrufen.</p>
<pre><code class="language-cpp">sqlite_exec( datenbank , &quot;select eintrag from test;&quot; , Callback , this , NULL); // ob 4. oder 5. Paremetr steht in der doku zu sqllite
</code></pre>
<p>Dann kannst du dieses übergebene Form wieder aus dem Parameter der Callback-Funktion auslesen</p>
<pre><code class="language-cpp">int Callback( void *Pointer, int argc, char **argv, char **columnNames)
{
  TForm1* Form = reinterpret_cast&lt;TForm1*&gt;(Pointer);
  Form-&gt;... // Daten der Abfrage im Form auswerten

return 0;
}
</code></pre>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194612</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194612</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Tue, 19 Dec 2006 10:47:51 GMT</pubDate></item><item><title><![CDATA[Reply to sqlite Datenbank on Tue, 19 Dec 2006 11:52:10 GMT]]></title><description><![CDATA[<p>Erstmal Danke für die Antwort akari.<br />
Wenn ich das Versuche so einzufügen wie du das geschrieben hast, dann bekomme ich bei dem sql_exec Befehl folgende Compiler-Fehler:</p>
<p>[C++ Fehler] Unit1.cpp(124): E2034 Konvertierung von 'int (* (_closure )(void *,int,char * *,char * *))(void *,int,char * *,char * <em>)' nach 'int (</em>)(void *,int,char * *,char * <em>)' nicht möglich<br />
[C++ Fehler] Unit1.cpp(124): E2340 Keine Übereinstimmung des Typs beim Parameter 3 ('int (</em>)(void *,int,char * *,char * *)' erwartet, 'void' erhalten)</p>
<p>Wo soll ich die Callback Funktion in der Header-Datei deklarieren? Ich habe diese nun in der Class TForm1 unter public eingetragen, was wahrscheinlich auch falsch ist oder?</p>
<p>Danke!</p>
<p>Gruß</p>
<p>kmb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194679</guid><dc:creator><![CDATA[kmb]]></dc:creator><pubDate>Tue, 19 Dec 2006 11:52:10 GMT</pubDate></item><item><title><![CDATA[Reply to sqlite Datenbank on Tue, 19 Dec 2006 11:55:21 GMT]]></title><description><![CDATA[<p>Das sollst du eben nicht tun. Deine Callbackfunktion sollte global sein. Wenn du sie unbedingt in deine Klasse (Form) packen willst, mach sie static.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194684</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194684</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 19 Dec 2006 11:55:21 GMT</pubDate></item><item><title><![CDATA[Reply to sqlite Datenbank on Tue, 19 Dec 2006 12:05:04 GMT]]></title><description><![CDATA[<p>Ahhh... jetzt hab ich's.</p>
<pre><code>IN der HEADER
//---------------------------------------------------------------------------

#ifndef Unit1H
#define Unit1H
//---------------------------------------------------------------------------
#include &lt;Classes.hpp&gt;
#include &lt;Controls.hpp&gt;
#include &lt;StdCtrls.hpp&gt;
#include &lt;Forms.hpp&gt;
#include &lt;ExtCtrls.hpp&gt;
#include &lt;Graphics.hpp&gt;
#include &lt;Menus.hpp&gt;
#include &lt;DBGrids.hpp&gt;
#include &lt;Grids.hpp&gt;
//---------------------------------------------------------------------------

int Callback( void *Pointer, int argc, char **argv, char **columnNames);

class TForm1 : public TForm
{
__published:	// Von der IDE verwaltete Komponenten
........

IN DER CPP
int Callback( void *Pointer, int argc, char **argv, char **columnNames) 
{ 
  TForm1* Form = reinterpret_cast&lt;TForm1*&gt;(Pointer); 
  //Form-&gt;... // Daten der Abfrage im Form auswerten
  Form1-&gt;Memo1-&gt;Lines-&gt;Add(argv[0]);      

return 0; 
}
</code></pre>
<p>Vielen Dank!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1194691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1194691</guid><dc:creator><![CDATA[kmb]]></dc:creator><pubDate>Tue, 19 Dec 2006 12:05:04 GMT</pubDate></item></channel></rss>