<?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[Debug Assertion Failed bei CRecordset.Open *völlig ratlos*]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte zu einer MySQL-Quelle connecten über MFC gestützte ODBC.<br />
Über normale WinApi aufrufe klappt alles wunderbar.</p>
<p>Aber folgender MFC-Code scheitert.<br />
Im Debug-Mode beendet eine Assert das Programm bei markierter Zeile.<br />
Exception habe ich hier nicht abgefangen, es werden ja auch keine geworfen.</p>
<pre><code class="language-cpp">sprintf((char*)InStr,&quot;DSN=%s;SERVER=%s;UID=%s;DATABASE=%s;PWD=%s;&quot;
   ,strDSN.c_str(),strSERVER.c_str(),strUID.c_str(),strDB.c_str(),sqlc_Passwd);

  int ret = my_DB.OpenEx((LPCSTR)InStr,CDatabase::openReadOnly);
  if (ret==0) return false; //ret hat immer den Wert 1, also erfolgreich

  CRecordset my_Rec(&amp;my_DB);
  my_Rec.Open(CRecordset::snapshot,NULL,CRecordset::readOnly); //Assert hier!
</code></pre>
<p>Die Verbindung durch den my_DB.OpenEx Aufruf klappt, er zeigt auch mit -&gt;GetDatabaseName() das Richtige an.</p>
<p>Hier nochmal der MFC-Code des gewissenen ASSERTS:</p>
<pre><code class="language-cpp">// &quot;SELECT &lt;user column name list&gt; FROM &lt;table name&gt;&quot;
void CRecordset::BuildSelectSQL()
{
ASSERT_VALID(this);
ASSERT(m_hstmt != SQL_NULL_HSTMT);

// Ignore queries with procedure call keyword or output param
if (!(_tcsnicmp(m_strSQL, _afxCall, lstrlen(_afxCall)-1) == 0 ||
_tcsnicmp(m_strSQL, _afxParamCall, lstrlen(_afxParamCall)-1) == 0))
{
  // Ignore queries already built
  if (_tcsnicmp(m_strSQL, _afxSelect, lstrlen(_afxSelect)-1) != 0)
  {
    // Assume m_strSQL specifies table name
    ASSERT(m_nFields != 0);  //&lt;&lt;------------------ das isser!
</code></pre>
<p>Ja gut, er hat wohl keinen Tablenamen, aber gerade die wollte ich mir ja auflisten lassen über das Recordset.<br />
Ausserdem verstehe ich nicht, warum er keine Exception wirft, wenn denn irgendein Parameter fehlen sollte, sondern gleich so kommentarlos abstürzt.<br />
Kann mir bitte jemand einen Tip dazu geben.</p>
<p>Sepp</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/77110/debug-assertion-failed-bei-crecordset-open-völlig-ratlos</link><generator>RSS for Node</generator><lastBuildDate>Fri, 24 Apr 2026 12:39:47 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/77110.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 17 Jun 2004 15:44:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Debug Assertion Failed bei CRecordset.Open *völlig ratlos* on Thu, 17 Jun 2004 15:44:04 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte zu einer MySQL-Quelle connecten über MFC gestützte ODBC.<br />
Über normale WinApi aufrufe klappt alles wunderbar.</p>
<p>Aber folgender MFC-Code scheitert.<br />
Im Debug-Mode beendet eine Assert das Programm bei markierter Zeile.<br />
Exception habe ich hier nicht abgefangen, es werden ja auch keine geworfen.</p>
<pre><code class="language-cpp">sprintf((char*)InStr,&quot;DSN=%s;SERVER=%s;UID=%s;DATABASE=%s;PWD=%s;&quot;
   ,strDSN.c_str(),strSERVER.c_str(),strUID.c_str(),strDB.c_str(),sqlc_Passwd);

  int ret = my_DB.OpenEx((LPCSTR)InStr,CDatabase::openReadOnly);
  if (ret==0) return false; //ret hat immer den Wert 1, also erfolgreich

  CRecordset my_Rec(&amp;my_DB);
  my_Rec.Open(CRecordset::snapshot,NULL,CRecordset::readOnly); //Assert hier!
</code></pre>
<p>Die Verbindung durch den my_DB.OpenEx Aufruf klappt, er zeigt auch mit -&gt;GetDatabaseName() das Richtige an.</p>
<p>Hier nochmal der MFC-Code des gewissenen ASSERTS:</p>
<pre><code class="language-cpp">// &quot;SELECT &lt;user column name list&gt; FROM &lt;table name&gt;&quot;
void CRecordset::BuildSelectSQL()
{
ASSERT_VALID(this);
ASSERT(m_hstmt != SQL_NULL_HSTMT);

// Ignore queries with procedure call keyword or output param
if (!(_tcsnicmp(m_strSQL, _afxCall, lstrlen(_afxCall)-1) == 0 ||
_tcsnicmp(m_strSQL, _afxParamCall, lstrlen(_afxParamCall)-1) == 0))
{
  // Ignore queries already built
  if (_tcsnicmp(m_strSQL, _afxSelect, lstrlen(_afxSelect)-1) != 0)
  {
    // Assume m_strSQL specifies table name
    ASSERT(m_nFields != 0);  //&lt;&lt;------------------ das isser!
</code></pre>
<p>Ja gut, er hat wohl keinen Tablenamen, aber gerade die wollte ich mir ja auflisten lassen über das Recordset.<br />
Ausserdem verstehe ich nicht, warum er keine Exception wirft, wenn denn irgendein Parameter fehlen sollte, sondern gleich so kommentarlos abstürzt.<br />
Kann mir bitte jemand einen Tip dazu geben.</p>
<p>Sepp</p>
]]></description><link>https://www.c-plusplus.net/forum/post/542531</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/542531</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 17 Jun 2004 15:44:04 GMT</pubDate></item></channel></rss>