<?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[Button enabled je nach Datenbank-Status]]></title><description><![CDATA[<p>Hi,</p>
<p>um eine DB zu steuern, kann ich den DBNavigator verwenden. Jetzt habe ich aber eigene Buttons, die nur Klicks auf diese Komponente simulieren, also z.B. BtnClick(nbFirst). Das klappt auch wunderbar.</p>
<p>Kann ich jetzt den Status der einzelnen Buttons des DBNavigator auf meine Buttons übertragen? Also z.B. wenn nbPost aktiv ist, ist auch mein Speicher-Button aktiv und umgekehrt.</p>
<p>Danke!</p>
<p>strauberry</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/87279/button-enabled-je-nach-datenbank-status</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Jul 2026 13:35:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/87279.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 28 Sep 2004 07:34:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Button enabled je nach Datenbank-Status on Tue, 28 Sep 2004 07:34:34 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>um eine DB zu steuern, kann ich den DBNavigator verwenden. Jetzt habe ich aber eigene Buttons, die nur Klicks auf diese Komponente simulieren, also z.B. BtnClick(nbFirst). Das klappt auch wunderbar.</p>
<p>Kann ich jetzt den Status der einzelnen Buttons des DBNavigator auf meine Buttons übertragen? Also z.B. wenn nbPost aktiv ist, ist auch mein Speicher-Button aktiv und umgekehrt.</p>
<p>Danke!</p>
<p>strauberry</p>
]]></description><link>https://www.c-plusplus.net/forum/post/616489</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/616489</guid><dc:creator><![CDATA[strauberry]]></dc:creator><pubDate>Tue, 28 Sep 2004 07:34:34 GMT</pubDate></item><item><title><![CDATA[Reply to Button enabled je nach Datenbank-Status on Wed, 29 Sep 2004 06:22:24 GMT]]></title><description><![CDATA[<p>strauberry,</p>
<p>strauberry schrieb:</p>
<blockquote>
<p>um eine DB zu steuern, kann ich den DBNavigator verwenden. Jetzt habe ich aber eigene Buttons, die nur Klicks auf diese Komponente simulieren, also z.B. BtnClick(nbFirst). Das klappt auch wunderbar.</p>
<p>Kann ich jetzt den Status der einzelnen Buttons des DBNavigator auf meine Buttons übertragen?</p>
</blockquote>
<p>den Status liefert immer die eigentliche Datenbank-Komponente (TDataSet::State). Selbige verfügt auch über das Ereignis OnStateChange, welches der Navigator vermutlich verwendet.<br />
Was den Navigator betrifft: Willst Du damit sagen, Du hast einen versteckten TDBNavigator auf Deinem Formular? Fallst dem so ist, kannst Du auch selbst z.B.</p>
<pre><code class="language-cpp">myDataSet-&gt;First();
</code></pre>
<p>aufrufen. Mehr würde der Navigator auch nicht machen und Du sparst Dir einen Methoden-Aufruf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/616795</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/616795</guid><dc:creator><![CDATA[dschensky]]></dc:creator><pubDate>Wed, 29 Sep 2004 06:22:24 GMT</pubDate></item><item><title><![CDATA[Reply to Button enabled je nach Datenbank-Status on Mon, 04 Oct 2004 09:12:16 GMT]]></title><description><![CDATA[<p>strauberry schrieb:</p>
<blockquote>
<p>&lt;Edit: Zitate bitte auf das Notwendigste beschränken. Danke&gt;</p>
</blockquote>
<p>Hallo,</p>
<p>Interessantes Thema, habe ich mich auch schon diverse Male mit beschäftigt, aber leider nicht mit dem von Dir gewünschten Erfolg.<br />
Ich habe mir seinerzeit eine 'Umgehungsstraße' gebaut. Die wesentlichen Teile des Codes findest Du anbei:</p>
<pre><code class="language-cpp">void __fastcall TForm6b_DB::sub_Navigation_Vornamen(char ch)
{
    switch(ch)
    {
        case 'e': // erstes
            mi_qry_Vornamen_RecNo = 1;
            DBNavi_Unsichtbar_Vornamen-&gt;BtnClick(nbFirst);
            break;
        case 'v': // voriges
            if(mi_qry_Vornamen_RecNo&gt;1){
                mi_qry_Vornamen_RecNo -= 1;
                DBNavi_Unsichtbar_Vornamen-&gt;BtnClick(nbPrior);
            }
            break;
        case 'n': // nächstes
            if(mi_qry_Vornamen_RecNo&lt;mi_qry_Vornamen_Ges){
                mi_qry_Vornamen_RecNo += 1;
                DBNavi_Unsichtbar_Vornamen-&gt;BtnClick(nbNext);
            }
            break;
        case 'l': // letztes
            mi_qry_Vornamen_RecNo = mi_qry_Vornamen_Ges;
            DBNavi_Unsichtbar_Vornamen-&gt;BtnClick(nbLast);
            break;
    }
    sub_Vornamen_Cnt_Refresh();
}
//---------------------------------------------------------------------------

void __fastcall TForm6b_DB::sub_Vornamen_Cnt_Refresh()
{
   // Diverse Methoden des TQuery-Objekts (qry_Vornamen_Cnt) aufrufen
   qry_Vornamen_Cnt-&gt;Close();
   qry_Vornamen_Cnt-&gt;SQL-&gt;Clear();
   qry_Vornamen_Cnt-&gt;SQL-&gt;Add(&quot;SELECT * from tbl_Bsp_Vornamen&quot;);
   qry_Vornamen_Cnt-&gt;Prepare();
   qry_Vornamen_Cnt-&gt;PrivoxyWindowOpen();

   // Gesamtzahl der Datensätze ermitteln
   mi_qry_Vornamen_Ges = (int)qry_Vornamen_Cnt-&gt;RecordCount;

   // Anzeige [ x von y] setzen
   lbl_Vornamen_Cnt-&gt;Caption = &quot;[&quot; + IntToStr(mi_qry_Vornamen_RecNo) + &quot; von &quot; + IntToStr(mi_qry_Vornamen_Ges) + &quot;]&quot;;
   if(mi_qry_Vornamen_RecNo &lt;= 1){
       spbtn_erstes-&gt;Enabled = false;
       spbtn_voriges-&gt;Enabled = false;
   }else{
       spbtn_erstes-&gt;Enabled = true;
       spbtn_voriges-&gt;Enabled = true;
   }
   if(mi_qry_Vornamen_RecNo == mi_qry_Vornamen_Ges){
       spbtn_naechstes-&gt;Enabled = false;
       spbtn_letztes-&gt;Enabled = false;
   }else{
       spbtn_naechstes-&gt;Enabled = true;
       spbtn_letztes-&gt;Enabled = true;
   }
}
</code></pre>
<p>Die Idee dabei:<br />
Ich vergleiche die Membervariable mi_qry_Vornamen_RecNo (enthält die aktuelle Datensatzposition) mit der Gesamtzahl der Datensätze mi_qry_Vornamen_Ges (per RecordCount auf das TQuery-Objekt) zur Ermittlung, ob aktuelle Datensatzposition am Anfang oder am Ende; entsprechend blende ich dann die Buttons ein oder aus. Sicher gibt's dafür keinen Preis für Eleganz, aber es funktioniert.</p>
<p>Gruß<br />
Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/620399</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/620399</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Mon, 04 Oct 2004 09:12:16 GMT</pubDate></item><item><title><![CDATA[Reply to Button enabled je nach Datenbank-Status on Mon, 04 Oct 2004 09:17:40 GMT]]></title><description><![CDATA[<p>Leo Freitag schrieb:</p>
<blockquote>
<p>Ich vergleiche die Membervariable mi_qry_Vornamen_RecNo (enthält die aktuelle Datensatzposition) mit der Gesamtzahl der Datensätze mi_qry_Vornamen_Ges (per RecordCount auf das TQuery-Objekt) zur Ermittlung, ob aktuelle Datensatzposition am Anfang oder am Ende; entsprechend blende ich dann die Buttons ein oder aus. Sicher gibt's dafür keinen Preis für Eleganz, aber es funktioniert.</p>
</blockquote>
<p>Ich weiß nicht genau, welche Datenbankkomponente Du verwendest, aber zumindest bei TDataSet (und Abkömmlingen wie TQuery) gibt es<br />
für den Zinnober, den Du da veranstaltest, schöne Eigenschaften bzw. Methoden (zumal ich mir nicht sicher bin, ob RecordCount für<br />
alle Datenbanken das richtige Ergebnis liefert).<br />
Mit den Eigenschaften Bof und Eof kannst Du auf ersten bzw. letzten Datensatz abprüfen, mit den Methoden First(), Next(), Prior() und<br />
Last() kann man in der Datenmenge navigieren (wie von dschensky ja auch schon teils erwähnt).<br />
Damit lässt sich die Funktionalität, die Du haben willst, mit wenigen Zeilen erschlagen. Einfach in den OnClick-Ereignissen die ent-<br />
sprechende Methode aufrufen (anstatt einen versteckten Navigator zu klicken) und im AfterScroll-Ereignis des DataSet den Zustand<br />
der Buttons aktualisieren:</p>
<pre><code class="language-cpp">BtnPrior-&gt;Enabled = DataSet-&gt;Active &amp;&amp; !DataSet-&gt;Bof;
BtnNext-&gt;Enabled = DataSet-&gt;Active &amp;&amp; !DataSet-&gt;Eof;
BtnFirst-&gt;Enabled = DataSet-&gt;Active &amp;&amp; !(DataSet-&gt;Bof &amp;&amp; DataSet-&gt;Eof);  // Wenn Bof und Eof true sind, enthält DataSet keine Daten
BtnLast-&gt;Enabled = BtnFirst-&gt;Enabled;
</code></pre>
<p>Wobei man die Abfrage auf Active besser woanders hinstecken sollte (z.B. AfterOpen-Ereignis); das gleiche gilt für die Buttons für<br />
Erster/Letzter.<br />
Interessant sind sicherlich auch noch die Eigenschaften CanModify und Modified. Wahrscheinlich findet man bei eingehendem Studium der<br />
Hilfe zu TDataSet noch weitere interessante Eigenschaften, Methoden und Ereignisse.</p>
<p>Gruß,</p>
<p>Alexander</p>
]]></description><link>https://www.c-plusplus.net/forum/post/620443</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/620443</guid><dc:creator><![CDATA[Alexander Kempf]]></dc:creator><pubDate>Mon, 04 Oct 2004 09:17:40 GMT</pubDate></item><item><title><![CDATA[Reply to Button enabled je nach Datenbank-Status on Mon, 04 Oct 2004 16:48:14 GMT]]></title><description><![CDATA[<p>Alexander Kempf schrieb:</p>
<blockquote>
<p>&lt;Edit: <strong>Zitate bitte auf das Notwendigste beschränken.</strong> Danke!!!&gt;</p>
</blockquote>
<p>Danke für die tollen Tipps zur Ent-Zinnober-isierung. Deine Lösung sieht in der Tat eleganter aus.</p>
<p>Gruß<br />
Leo</p>
]]></description><link>https://www.c-plusplus.net/forum/post/620653</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/620653</guid><dc:creator><![CDATA[Leo Freitag]]></dc:creator><pubDate>Mon, 04 Oct 2004 16:48:14 GMT</pubDate></item></channel></rss>