<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>SQLite++</title>
		<link>http://www.allegro.cc/forums/view/581768</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Thu, 27 Apr 2006 07:42:19 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>In my current project, I need to manage a small database. It basically needs a way to store, delete or edit pairs of words (one word in one language, and its translation in another language) and retrieve the pair corresponding to one word the user gave in. Best thing for this seems to be using SQL, so I&#39;ve looked into SQLite3 and SQLite++. Dumb thing&#39;s that SQLite3&#39;s syntax&#39;s not compatible with SQLite++ and I can&#39;t find a decent tutorial or reference for that. Anybody here that knows how to work with it and can help me? Thanks in advance <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 04:15:14 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>SQLite3&#39;s SQL parsing should be mostly the same as SQLite++&#39;s, if not for small differences in maybe the PRAGMA command. SQLite++... well, the manual for it is the best reference. I haven&#39;t used it myself; I just use SQLite3 from C++.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 27 Apr 2006 04:41:12 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm, quick question &#39;bout SQLite3 then. Do you know how to pass variables into the queries? Like &quot;INSERT INTO table_name VALUES (string1, string2, string3)&quot;? That&#39;s mainly what I had a problem with with SQLite3. Doesn&#39;t support strings, it seems, and I honestly don&#39;t know how to do this with char[]s:-/
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 04:52:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>You can use sprintf, but since you&#39;re using C++, use stringstreams:
</p><div class="source-code snippet"><div class="inner"><pre><span class="p">#include &lt;sstream&gt;</span>

std::stringstream sql<span class="k2">;</span>
sql <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">"INSERT INTO table VALUES ( '"</span> <span class="k3">&lt;</span><span class="k3">&lt;</span> my_quoted_string <span class="k3">&lt;</span><span class="k3">&lt;</span> <span class="s">" ', CURRENT_TIMESTAMP );"</span><span class="k2">;</span>
sqlite3_stmt<span class="k3">*</span> stmt <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span>sql.str<span class="k2">(</span><span class="k2">)</span>.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

[append]<br />Also, you can do this with std::strings:
</p><div class="source-code snippet"><div class="inner"><pre>std::string sql<span class="k2">;</span>
sql <span class="k3">=</span> <span class="s">"SELECT * FROM table;"</span><span class="k2">;</span>
sqlite3_stmt<span class="k3">*</span> stmt <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span>sql.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (CGamesPlay)</author>
		<pubDate>Thu, 27 Apr 2006 04:55:55 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>And after that, I just use sqlite3_execute()? So basically, the sqlite3_stmt type is the equivalent of the result of PHP&#39;s mysql_query(). Didn&#39;t even know that part:-X Thanks for the help <img src="http://www.allegro.cc/forums/smileys/smiley.gif" alt=":)" />
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 05:06:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>hmm, sqlite...</p><p>Passing variables:
</p><div class="source-code snippet"><div class="inner"><pre>sqlite3_stmt <span class="k3">*</span>stmt <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span><span class="s">"INSERT INTO table VALUES ( ?, ? );"</span><span class="k2">)</span><span class="k2">;</span>
sqlite3_bind_int<span class="k2">(</span>stmt, <span class="n">0</span>, <span class="n">0xDEADBEEF</span><span class="k2">)</span><span class="k2">;</span>
sqlite3_bind_int<span class="k2">(</span>stmt, <span class="n">1</span>, <span class="n">0xDECAFBAD</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Those bind methods sure can be handy.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 27 Apr 2006 05:11:24 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hummm, not as simple as it sounded.
</p><div class="source-code snippet"><div class="inner"><pre>  std::string query<span class="k2">;</span>
  query <span class="k3">=</span> <span class="s">"CREATE TABLE dictionary (word text, translation text);"</span><span class="k2">;</span>
  sqlite3_stmt <span class="k3">*</span>sql_statement <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span>query.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
That gives this compiling error:<br />cannot convert `const char*&#39; to `sqlite3*&#39; for argument `1&#39; to `int sqlite3_prepare(sqlite3*, const char*, int, sqlite3_stmt**, const char**)&#39;
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 05:53:59 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Since query is a C++ std::string, you have to use the c_str() method on it to pass to functions that take a char* (<b>just as was said by CGames</b>)</p><p>ie:
</p><div class="source-code snippet"><div class="inner"><pre>std::string query <span class="k3">=</span> <span class="s">"CREATE TABLE dictionary ('word text', 'translation text');"</span><span class="k2">;</span>
sqlite3_stmt <span class="k3">*</span>sql_statement <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span>query.c_str<span class="k2">(</span><span class="k2">)</span><span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>

Also take a look at my previous post, since using placeholders means you dont have to quote the data yourself.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 27 Apr 2006 05:55:46 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>I edited my post when I noticed the .c_string() function, but it didn&#39;t change a thing. I just tried this:<br /><span class="source-code">sqlite3_stmt <span class="k3">*</span>sql_statement <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span><span class="s">"CREATE TABLE dictionary (word text, translation text);"</span><span class="k2">)</span><span class="k2">;</span></span><br />Error message:<br />cannot convert `const char*&#39; to `sqlite3*&#39; for argument `1&#39; to `int sqlite3_prepare(sqlite3*, const char*, int, sqlite3_stmt**, const char**)&#39; </p><p>Could it be that my query&#39;s not correct? I&#39;m not too familiar with SQLite queries, only MySQL queries, so could&#39;ve put some mistakes in there?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 06:07:27 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Sorry, we both (cgames and I) made a small mistake giving you the prepare function, first off, let me say, lookup the sqlite3 docs, they are very usefull, and second, sqlite3_prepare takes the sqlite3* db handle as first arg, as that error is trying to tell you.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 27 Apr 2006 06:12:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Hmm, I&#39;ve got all parameters right, up til these two now:<br />  sqlite3_stmt **ppStmt,  /* OUT: Statement handle */<br />  const char **pzTail     /* OUT: Pointer to unused portion of zSql */<br />Could you guys give a full example of how to set up and execute an SQL query, please? I can&#39;t figure these commands out otherwise:-[ (Those double pointer things&#39;re confusing me)
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 06:54:08 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Heres an example using the exec method, I found through google:
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>    <span class="k1">static</span> <span class="k1">int</span> callback<span class="k2">(</span><span class="k1">void</span> <span class="k3">*</span>NotUsed, <span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>azColName<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">2</td><td>      NotUsed<span class="k3">=</span><span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">3</td><td>      <span class="k1">int</span> i<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>      <span class="k1">for</span><span class="k2">(</span>i<span class="k3">=</span><span class="n">0</span><span class="k2">;</span> i<span class="k3">&lt;</span>argc<span class="k2">;</span> i<span class="k3">+</span><span class="k3">+</span><span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">5</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"%s = %s\n"</span>, azColName<span class="k3">&lt;</span>i&gt;, argv<span class="k3">&lt;</span>i&gt; ? argv<span class="k3">&lt;</span>i&gt;: <span class="s">"NULL"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">6</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">7</td><td>      <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">8</td><td>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>    <span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">12</td><td>      sqlite3 <span class="k3">*</span>db<span class="k2">;</span></td></tr><tr><td class="number">13</td><td>      <span class="k1">char</span> <span class="k3">*</span>zErrMsg <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>      <span class="k1">int</span> rc<span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>      <span class="k1">if</span><span class="k2">(</span> argc<span class="k3">!</span><span class="k3">=</span><span class="n">3</span> <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">17</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Usage: %s DATABASE SQL-STATEMENT\n"</span>, argv<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">19</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">20</td><td>      rc <span class="k3">=</span> sqlite3_open<span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="k3">&amp;</span>db<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">21</td><td>      <span class="k1">if</span><span class="k2">(</span> rc <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">22</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Can't open database: %s\n"</span>, sqlite3_errmsg<span class="k2">(</span>db<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">23</td><td>        sqlite3_close<span class="k2">(</span>db<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">25</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">26</td><td>      rc <span class="k3">=</span> sqlite3_exec<span class="k2">(</span>db, argv<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>, callback, <span class="n">0</span>, <span class="k3">&amp;</span>zErrMsg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">27</td><td>      <span class="k1">if</span><span class="k2">(</span> rc<span class="k3">!</span><span class="k3">=</span>SQLITE_OK <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">28</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"SQL error: %s\n"</span>, zErrMsg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">29</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">30</td><td>      sqlite3_close<span class="k2">(</span>db<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    <span class="k2">}</span></td></tr></tbody></table></div></div><p>

A simple exaple using sqlite3_step instead of sqlite3_exec to follow.</p><p>edit, next example:</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>    <span class="k1">int</span> main<span class="k2">(</span><span class="k1">int</span> argc, <span class="k1">char</span> <span class="k3">*</span><span class="k3">*</span>argv<span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">2</td><td>      sqlite3 <span class="k3">*</span>db <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">3</td><td>      sqlite3_stmt <span class="k3">*</span>stmt <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">4</td><td>      <span class="k1">char</span> <span class="k3">*</span>zErrMsg <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">5</td><td>      <span class="k1">int</span> rc<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>&#160;</td></tr><tr><td class="number">7</td><td>      <span class="k1">if</span><span class="k2">(</span> argc<span class="k3">!</span><span class="k3">=</span><span class="n">3</span> <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">8</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Usage: %s DATABASE SQL-STATEMENT\n"</span>, argv<span class="k2">[</span><span class="n">0</span><span class="k2">]</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">9</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">11</td><td>      rc <span class="k3">=</span> sqlite3_open<span class="k2">(</span>argv<span class="k2">[</span><span class="n">1</span><span class="k2">]</span>, <span class="k3">&amp;</span>db<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">12</td><td>      <span class="k1">if</span><span class="k2">(</span> rc <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">13</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"Can't open database: %s\n"</span>, sqlite3_errmsg<span class="k2">(</span>db<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">14</td><td>        sqlite3_close<span class="k2">(</span>db<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_298.html" target="_blank">exit</a><span class="k2">(</span><span class="n">1</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">16</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">17</td><td>      rc <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span>db, argv<span class="k2">[</span><span class="n">2</span><span class="k2">]</span>, <a href="http://www.delorie.com/djgpp/doc/libc/libc_764.html" target="_blank">strlen</a><span class="k2">(</span>argv<span class="k2">[</span><span class="n">2</span><span class="k2">]</span><span class="k2">)</span>, <span class="k3">&amp;</span>stmt, <span class="k3">&amp;</span>zErrMsg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>      <span class="k1">if</span><span class="k2">(</span> rc<span class="k3">!</span><span class="k3">=</span>SQLITE_OK <span class="k2">)</span><span class="k2">{</span></td></tr><tr><td class="number">19</td><td>        <a href="http://www.delorie.com/djgpp/doc/libc/libc_345.html" target="_blank">fprintf</a><span class="k2">(</span>stderr, <span class="s">"SQL error: %s\n"</span>, zErrMsg<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">20</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">21</td><td>&#160;</td></tr><tr><td class="number">22</td><td>      <span class="k1">while</span><span class="k2">(</span>sqlite3_step<span class="k2">(</span>stmt<span class="k2">)</span> <span class="k3">=</span><span class="k3">=</span> SQLITE_ROW<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">23</td><td>         <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"YAY A NEW ROW!\n"</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">24</td><td>      <span class="k2">}</span></td></tr><tr><td class="number">25</td><td>&#160;</td></tr><tr><td class="number">26</td><td>    <span class="k1">if</span><span class="k2">(</span>sqlite3_errcode<span class="k2">(</span>db<span class="k2">)</span><span class="k3">!</span><span class="k3">=</span>SQLITE_OK<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">27</td><td>       <a href="http://www.delorie.com/djgpp/doc/libc/libc_624.html" target="_blank">printf</a><span class="k2">(</span><span class="s">"Mommie, there was an error: %s\n"</span>, sqlite3_errmsg<span class="k2">(</span>db<span class="k2">)</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">28</td><td>    <span class="k2">}</span></td></tr><tr><td class="number">29</td><td>&#160;</td></tr><tr><td class="number">30</td><td>      sqlite3_close<span class="k2">(</span>db<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">31</td><td>      <span class="k1">return</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">32</td><td>    <span class="k2">}</span></td></tr></tbody></table></div></div><p>

edit2, NEITHER of these have been tested, use at your own risk, I&#39;m not even guaranteeing that they&#39;ll compile.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 27 Apr 2006 06:58:51 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Thanks for the help. I don&#39;t fully understand those codes (argv[1], argv[2]? Where do they come from?) I managed to fill in my code with those examples, though, but it still doesn&#39;t work.
</p><div class="source-code"><div class="toolbar"></div><div class="inner"><table width="100%"><tbody><tr><td class="number">1</td><td>  <span class="k1">int</span> answer<span class="k2">;</span></td></tr><tr><td class="number">2</td><td>  <span class="k1">int</span> open_dbase<span class="k2">;</span></td></tr><tr><td class="number">3</td><td>  <span class="k1">char</span> <span class="k3">*</span>zErrMsg <span class="k3">=</span> <span class="n">0</span><span class="k2">;</span></td></tr><tr><td class="number">4</td><td>  <span class="k1">int</span> result<span class="k2">;</span>  </td></tr><tr><td class="number">5</td><td>  sqlite3_stmt <span class="k3">*</span>stmt <span class="k3">=</span> NULL<span class="k2">;</span></td></tr><tr><td class="number">6</td><td>  <span class="k1">char</span> file<span class="k2">[</span><span class="k2">(</span>LENGTH <span class="k3">+</span> <span class="n">1</span><span class="k2">)</span> <span class="k3">*</span> MAX_BYTES_PER_CHAR<span class="k2">]</span> <span class="k3">=</span> <span class="s">"data.dsb"</span><span class="k2">;</span></td></tr><tr><td class="number">7</td><td>&#160;</td></tr><tr><td class="number">8</td><td>&#160;</td></tr><tr><td class="number">9</td><td>  answer <span class="k3">=</span> <a href="http://www.allegro.cc/manual/alert" target="_blank"><span class="a">alert</span></a><span class="k2">(</span><span class="s">"Add to database?"</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="s">"&amp;Yes"</span>, <span class="s">"&amp;No"</span>, <span class="s">'y'</span>, <span class="s">'n'</span><span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">10</td><td>&#160;</td></tr><tr><td class="number">11</td><td>  <span class="k1">if</span><span class="k2">(</span>answer <span class="k3">=</span><span class="k3">=</span> <span class="n">1</span><span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">12</td><td>    open_dbase <span class="k3">=</span> sqlite3_open<span class="k2">(</span>file, <span class="k3">&amp;</span>database<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">13</td><td>    <span class="k1">if</span><span class="k2">(</span>open_dbase<span class="k2">)</span> <span class="k2">{</span></td></tr><tr><td class="number">14</td><td>      <a href="http://www.allegro.cc/manual/alert" target="_blank"><span class="a">alert</span></a><span class="k2">(</span><span class="s">"Problem opening database."</span>, <span class="n">0</span>, <span class="n">0</span>, <span class="s">"&amp;Ok"</span>, NULL, <span class="s">'o'</span>, NULL<span class="k2">)</span><span class="k2">;</span></td></tr><tr><td class="number">15</td><td>&#160;</td></tr><tr><td class="number">16</td><td>  std::string query<span class="k2">;</span></td></tr><tr><td class="number">17</td><td>  query <span class="k3">=</span> <span class="s">"CREATE TABLE dictionary (word TEXT, translation TEXT);"</span><span class="k2">;</span></td></tr><tr><td class="number">18</td><td>  result <span class="k3">=</span> sqlite3_prepare<span class="k2">(</span>database, query.c_str<span class="k2">(</span><span class="k2">)</span>, query.length<span class="k2">(</span><span class="k2">)</span>, <span class="k3">&amp;</span>stmt, <span class="k3">&amp;</span>zErrMsg<span class="k2">)</span><span class="k2">;</span></td></tr></tbody></table></div></div><p>

The error it gives, is this:<br />invalid conversion from `char**&#39; to `const char**&#39; <br />initializing argument 5 of `int sqlite3_prepare(sqlite3*, const char*, int, sqlite3_stmt**, const char**)&#39; </p><p>Both point to the sqlite3_prepare line.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 07:14:33 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>const your zErrMsg</p><p>and the argv[] comes from the main(int argc, char **argv) function, never used program arguments before?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 27 Apr 2006 07:18:34 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre>      std::string query<span class="k2">;</span>
      query <span class="k3">=</span> <span class="s">"CREATE TABLE dictionary (word TEXT, translation TEXT);"</span><span class="k2">;</span>
      sqlite3_exec<span class="k2">(</span>database, query.c_str<span class="k2">(</span><span class="k2">)</span>, callback, <span class="n">0</span>, NULL<span class="k2">)</span><span class="k2">;</span>
</pre></div></div><p>
That&#39;s compiled, and didn&#39;t give any runtime errors. I&#39;m curious as to whether it actually created the table or not. Suppose I&#39;ll see that when putting in some test values.</p><p>I&#39;ve never actually used or heard &#39;bout program arguments, so the argv[n] and argc&#39;re completely new to me. Are they any use?
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 07:32:58 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>if exec didnt give any errors, nor did anything you did in the call back, then yes, it created the table.</p><div class="quote_container"><div class="title">Quote:</div><div class="quote"><p>
I&#39;ve never actually used or heard &#39;bout program arguments, so the argv[n] and argc&#39;re completely new to me. Are they any use?
</p></div></div><p>How and where did you learn to program?</p><p>Every tutorial for C and C++ that I know of starts with just a main(int argc, char **argv) function and lets you pass stuff to it when running <img src="http://www.allegro.cc/forums/smileys/shocked.gif" alt=":o" /></p><p>argv is how you pass info, like file names, or config arguments to a program. rather basic stuff.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Thomas Fjellstrom)</author>
		<pubDate>Thu, 27 Apr 2006 07:36:13 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Ahh, those&#39;re parameters you give in the commandline part then. Never worked with those before. Never needed to for what I&#39;ve been coding.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Raf Vermeulen)</author>
		<pubDate>Thu, 27 Apr 2006 07:42:19 +0000</pubDate>
	</item>
</rss>
