<?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[Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen?]]></title><description><![CDATA[<p>Hallo,<br />
Mit der rechten Maustaste lassen sich Einträge aus dem DBGrid in den Zwischespeicher nehmen und auch wieder z.B in einer anderen Zelle einfügen. Dabei kommt es hin- u wieder zu Exceptions (sporadisch). Ich kann den Fehler nicht reproduzieren.<br />
Wo muß ich suchen um diese Exception abzufangen. Ich weiß nicht in welchem Ereignis von DataSet, DataSource, DBGrid ich eingreifen soll. Kann jemand einen Tipp geben, wie ich das systematisch angehen kann? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/208211/einfügen-in-dbgrid-aus-zwischenspeicher-wie-u-wo-exception-abfangen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 10:26:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/208211.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 16 Mar 2008 12:40:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Sun, 16 Mar 2008 12:40:43 GMT]]></title><description><![CDATA[<p>Hallo,<br />
Mit der rechten Maustaste lassen sich Einträge aus dem DBGrid in den Zwischespeicher nehmen und auch wieder z.B in einer anderen Zelle einfügen. Dabei kommt es hin- u wieder zu Exceptions (sporadisch). Ich kann den Fehler nicht reproduzieren.<br />
Wo muß ich suchen um diese Exception abzufangen. Ich weiß nicht in welchem Ereignis von DataSet, DataSource, DBGrid ich eingreifen soll. Kann jemand einen Tipp geben, wie ich das systematisch angehen kann? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475194</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475194</guid><dc:creator><![CDATA[thunderbol4]]></dc:creator><pubDate>Sun, 16 Mar 2008 12:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Sun, 16 Mar 2008 13:36:07 GMT]]></title><description><![CDATA[<p>Habe soeben nochmals nachgeforstet.<br />
Im DBGrid habe ich z.B mit der rechten Maustaste aus dem Zwischenspeicher &quot;blablabla&quot; in eine Spaltenzelle eingetragen. &quot;blablabla&quot; überschreibt den alten Eintrag &quot;Eintragvorher&quot;.</p>
<p>Beim Verlassen des Editmodus lautet die Exception dann:<br />
'Die zum Aktualisieren angegebene Zeile wurde nicht gefunden. Einige Werte wurden seit dem letzten Lesen ggf. geändert.'</p>
<p>Wenn ich mit dem Debugger unter das Ereignis <strong>ADODataSetBeforePost</strong> durchgehe, kann ich sehen, dass der entsprechende Eintrag <strong>DBGrid-&gt;Selected-&gt;AsString</strong> unverändert geblieben ist, z.B &quot;Eintragvorher&quot; und nicht wie zu erwarten &quot;blablabla&quot;.<br />
Die Exception folgt unmittelbar nachdem <strong>ADODataSetBeforePost</strong> verlassen wurde.</p>
<p>Allerdings frage ich mich auch, wieso meine <strong>ADODataSetPostError</strong> nicht greift?</p>
<p>Hat jemand eine Idee?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1475227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1475227</guid><dc:creator><![CDATA[thunderbol4]]></dc:creator><pubDate>Sun, 16 Mar 2008 13:36:07 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Tue, 18 Mar 2008 11:14:16 GMT]]></title><description><![CDATA[<p>Scheinbar bin ich der einzige der über dieses Problem nachgrübelt? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
so wie es aussieht, scheint die Clipboard-Geschichte nichts direkt mit dem DBGrid zu tun zu haben, sondern es scheint eher ein Thema<br />
für Windows zu sein.<br />
Das würde doch bedeuten, ich müßte alle Eingaben im DBGrid mit der rechten Maustaste abfangen oder?<br />
Wie bekomme ich denn dort Zugriff auf das rechte-Maustaste Menü? Wie soll ich denn feststellen wenn der User im Menü &quot;Einfügen&quot; gewählt hat?</p>
<p>Keine Ahnung? Bitte schreibt mir!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1476460</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1476460</guid><dc:creator><![CDATA[thunderbol4]]></dc:creator><pubDate>Tue, 18 Mar 2008 11:14:16 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Tue, 18 Mar 2008 12:44:44 GMT]]></title><description><![CDATA[<p>Du musst vermutlich einfach nur sicherstellen, dass Du Dich im richtigen Modus befindest: Edit oder Insert. Ein weiterer Stolperstein könnte sein, dass Du eine AutoInc-Variable in der Tabelle hast. A<br />
ußerdem sollte das Hinzufügen von identischen Datensätzen nicht möglich sein, falls doch, musst Du die Indizes überarbeiten. Du musst immer mindestens einen eindeutigen Index haben, ansonsten handelst Du Dir nur Probleme ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1476524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1476524</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 18 Mar 2008 12:44:44 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Wed, 19 Mar 2008 11:44:10 GMT]]></title><description><![CDATA[<p>Hallo @Joe_M.,</p>
<p>ich könnte bei den Events BeforeInsert bzw. BeforeEdit eingreifen. Das ist mir klar. Nur woher weiß mein Programm, dass<br />
der User soeben mit der rechten Maustaste die Zwischenablage benutzt hat. Mit dem Event OnKeyDown im DBGrid klappt das auch nicht, da kann ich nicht eingreifen.<br />
Dieser Event funktioniert nur, wenn man neben/unter dem Gitter klickt, wenn man in die Zellen klickt, kommt keine Reaktion. Ein Abfangen der rechten Maustaste ist somit nicht möglich.</p>
<p>Soweit ich weiß, wird beim Einfügen aus dem Clipboard eine &quot;WM_Paste&quot;-Message versandt. Ich denke hier ließe sich was machen, ich weiß nur nicht wie diese Windowsmessage verwenden kann? Da bin ich &quot;noch&quot; überfordert.</p>
<p>Hat jemand Rat und Hilfe?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1477181</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1477181</guid><dc:creator><![CDATA[thunderbol4]]></dc:creator><pubDate>Wed, 19 Mar 2008 11:44:10 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Wed, 19 Mar 2008 12:00:49 GMT]]></title><description><![CDATA[<p>Ob Daten über über die Zwischenablage kopiert werden, oder von Hand eingeben werden, ist vollkommen egal. Du hast ein konzeptionelles Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1477192</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1477192</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 19 Mar 2008 12:00:49 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Wed, 19 Mar 2008 12:00:57 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das Verarbeiten von Windows-Messages kannst du dir <a href="http://bcb-tutorial.c-plusplus.net/komponentenentwicklung/komponenten7.html" rel="nofollow">hier</a> anschauen.<br />
Allerdings glaube ich wie Joe das du so nur an den Symptomen des Problems arbeitest, aber nicht an der eigentlichen Ursache.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1477193</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1477193</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Wed, 19 Mar 2008 12:00:57 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Sat, 22 Mar 2008 10:25:01 GMT]]></title><description><![CDATA[<p>Hallo <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@akari</a>, hallo @Joe_M.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/7971">@Akari</a> Danke für den Link. Ich habe in den letzten krampfhaft Tagen versucht hier mit den Windows Messages weiter zu kommen, leider ohne Erfolg. Im Delphi-Forum konnte ich auch keine Lösung finden. Dort gibt es das gleiche Problem, scheinbar nicht lösbar.</p>
<blockquote>
<p>Du hast ein konzeptionelles Problem.</p>
</blockquote>
<p>Was heißt hier konzeptionelles Problem?</p>
<p>Man nehme eine Form<br />
platziere darauf<br />
1 Verbindung zur Datenbank (hier: TADOConnection)<br />
1 DataSet (hier: ADODataSet)<br />
1 DataSource<br />
1 DBGrid.</p>
<p>Man starte eine SQL-Abfrage in der Datenbank mit dem DataSet und fülle das DBGrid.<br />
Ich weiß nicht, was an diesem Konzept falsch sein kann. Man möge mich belehren. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Jetzt nochmal zu meinem Problem:<br />
Wenn die Daten im Gitter stehen, soll der User die Daten editieren, einfügen, löschen dürfen, logo!<br />
Wenn der User per Tastatur die Eingaben durchführt funktioniert alles prima.</p>
<p>Ich filtere die Usereingaben mit einer kleinen angepaßten Funktion und prüfe auf korrekte Eingabeform im Event BeforePost. Das klappt wunderbar.</p>
<p>Ich kann nur nicht verhindern, dass der User irgendeinen Quatsch per Zwischenablage eingibt. Leider sieht das DBGrid die Zwischenablage vor. Ich weiß nicht wie ich das kontrollieren oder abschalten kann.<br />
Nur wenn der User per Zwischenablage einfügt erhalte ich die Exceptions. Das ist extrem unschön und unprofessionell.</p>
<p>Sowie es aussieht geht diese Eingabe über Zwischenspeicher auch an dem Event BeforePost vorbei, denn ansonsten müßte die Eingabe über meine Prüfroutine gefiltert werden und durchfallen, was sie aber nicht macht</p>
<p>Sorry, also ich weiß hier wirklich nicht mehr weiter, wie ich das unterbinden soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478618</guid><dc:creator><![CDATA[thunderbol4]]></dc:creator><pubDate>Sat, 22 Mar 2008 10:25:01 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Sat, 22 Mar 2008 11:37:33 GMT]]></title><description><![CDATA[<p>Möchtest du denn generell das Einfügen über die Zwischenablage verhindern (d.h. sowohl das Menü ausblenden als auch Strg+V unterbinden) oder aber nur, wenn inkorrekte Daten in der Zwischenablage sind?</p>
<blockquote>
<p>Ich filtere die Usereingaben mit einer kleinen angepaßten Funktion und prüfe auf korrekte Eingabeform im Event BeforePost. Das klappt wunderbar.</p>
</blockquote>
<p>Wie sieht denn diese Abfrage aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478660</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478660</guid><dc:creator><![CDATA[~Clipboard]]></dc:creator><pubDate>Sat, 22 Mar 2008 11:37:33 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Sat, 22 Mar 2008 15:54:09 GMT]]></title><description><![CDATA[<p>Hallo @~Clipboard,</p>
<p>Vielleicht hast Du eine Idee, wie ich die Zwischenablage abfangen kann? Am besten wäre natürlich ich könnte direkt auf die Eingabe zugreifen, wenn der User seine Einfügungen (PASTE) im DBGrid durchgeführt hat.<br />
Dann könnte ich mit einer Funktion eingreifen.<br />
Wenn das nicht geht, na dann halt die Zwischenablage sperren, wie auch immer, mit Balken, Ketten oder Sonstigem <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Im folgenden, wie von Dir gewünscht, stelle ich 'mal mein DB-Problem vor. Der Verständlichkeit halber ist der gezeigten Ablauf natürlich stark gegenüber dem Programm reduziert.</p>
<p>Mit einem Klick auf einen Radiobutton hole ich unterschiedliche gewünschte Datenmengen mit SQL-Abfrage in ein DataSet. Das DataSet maskiere ich dann um den User anzuzeigen, wie die Eingabe zu erfolgen hat.<br />
Das DBGrid besteht nur aus einer Spalte. Es sollen hier Grunddaten verwaltet werden, mit einer strikten Eingabekontrolle.</p>
<p>Das sieht dann in etwa so aus:</p>
<pre><code class="language-cpp">void __fastcall TForm1::RadioGroup1Click(TObject *Sender){
TRadioGroup* rG = dynamic_cast&lt;TRadioGroup*&gt;(Sender);
BasisFeld wahl; // =&gt;enum {feld1typ, feld2typ,... }
  wahl = (BasisFeld)(rG-&gt;ItemIndex);               
  switch (wahl){
  case feld1typ: BasicData(rG-&gt;ItemIndex); //Routine holt die Daten aus einer Datenbank-Tabelle
    		     ADODataSet1-&gt;Fields-&gt;Fields[0]-&gt;EditMask = &quot;&gt;AAAAAAAAAAAAAAA;0;_&quot;; //Eingababmaske
    		     break;
  case feld2typ: BasicData(rG-&gt;ItemIndex);
                 //...
}
</code></pre>
<p>Die Prüfung, ob die Eingaben konform sind werden hier nach der Eingabe durch den User durchgeführt</p>
<pre><code class="language-cpp">void __fastcall TForm1::ADODataSet1BeforePost(TDataSet *DataSet){
BasisFeld wahl; 
bool okay;
  AnsiString Eingabe = DBGrid1-&gt;SelectedField-&gt;AsString;
  wahl = (BasisFeld)(RadioGroup1-&gt;ItemIndex);
  switch (wahl){
    case feld1typ : okay = Checkfeld1typ(Eingabe); break;
    case feld2typ : okay = Checkfeld2typ(Eingabe); break;
   //... 
    default       : ;
  };  //switch
  if (!okay){
    ShowMessage(&quot;hier erfolgt spezielle Fehlermeldung&quot;);
    DataSet-&gt;Cancel();     //falsch also den alten Eintrag zurückschreiben
    Abort();               //springt aus Routine, Dateneintrag wird abgebrochen
  }                           
  else
    DBGrid1-&gt;SelectedField-&gt;AsString = Eingabe; //alles in Ordnung, Eintragen
}
</code></pre>
<p>Hier dann eine meiner Prüffunktionen, mit der eventuell noch das ausgefiltert/korrigiert werden kann, was die Eingabemaske durchläßt (wäre hier nicht nötig, da in der Maske bereits gut abgesichert)</p>
<pre><code class="language-cpp">//löscht aus einem String alle Zeichen, außer A...Z, a..z, 0..9, sowie &quot; &quot;
bool TForm1::Checkfeld1typ(AnsiString &amp;s) { //so oder so ähnlich sind meine Prüffunktionen aufgebaut
char c;
  AnsiString ts = s;
  int len = ts.Length();
  if (len &lt; 1) return false; //keine Leerstrings zulassen
  int j = 1;
  while (j &lt; len + 1) {
    c = (char)ts[j];
    if (isdigit(c) || isalnum(c) || (c == ' '))  j++;
    else {
      ts.Delete(j, 1);
      len--;
    }
  };
  len = ts.Length();
  if (len &gt; 0) {
    s = ts;
    return true;
  }
  else
    return false;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1478787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478787</guid><dc:creator><![CDATA[thunderbol4]]></dc:creator><pubDate>Sat, 22 Mar 2008 15:54:09 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Sat, 22 Mar 2008 16:36:31 GMT]]></title><description><![CDATA[<p><a href="http://www.delphipraxis.net/topic41662.html" rel="nofollow">http://www.delphipraxis.net/topic41662.html</a> ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1478809</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1478809</guid><dc:creator><![CDATA[Jansen]]></dc:creator><pubDate>Sat, 22 Mar 2008 16:36:31 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Sun, 23 Mar 2008 12:00:58 GMT]]></title><description><![CDATA[<p>Sorry, daß ich jetzt erst wieder schreibe.</p>
<p>Also an deinem Code fällt mir als erstes auf, daß du in der BeforePost-Methode direkt auf das DBGrid anstatt auf das übergebene Dataset zugreifst.</p>
<p>Versuch mal:</p>
<pre><code class="language-cpp">AnsiString Eingabe = DataSet-&gt;Fields-&gt;Fields[0]-&gt;AsString;
</code></pre>
<p>Und für das Sperren der Zwischenablage gibt es verschiedene Möglichkeiten:<br />
- eigenes Popup-Menü für DBGrid hinterlegen<br />
- Tastatur abfragen (OnKeyDown): bei Ctrl+V &quot;Key = 0&quot; setzen</p>
<p>Aber was ich noch nicht verstehe, wieso die Eingaben über die Zwischenablage an deinem Programm vorbei gehen und direkt in der DB landen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1479073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1479073</guid><dc:creator><![CDATA[~Clipboard]]></dc:creator><pubDate>Sun, 23 Mar 2008 12:00:58 GMT</pubDate></item><item><title><![CDATA[Reply to Einfügen in DBGrid aus Zwischenspeicher. Wie u wo Exception abfangen? on Tue, 25 Mar 2008 20:50:46 GMT]]></title><description><![CDATA[<p>Hallo <a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/52">@Jansen</a>, @~Clipboard,</p>
<p>vielen Dank für Eure Tipps u den Link.</p>
<p>Mittlerweile habe ich festgestellt, dass das Problem mit der Zwischenablage vor allem dann auftritt, wenn ich mein Feld mit EditMask versehen habe.<br />
Ohne Maske funktioniert (auch) die Zwischenablage.</p>
<p>Ich komme hier momentan nicht so richtig weiter. Ich lasse deshalb zuerst mal dieses Problem links liegen, indem ich Maskierungen mit EditMask lösche und verfeinere dafür meine Eingabekontrolle per Funktionen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1480320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1480320</guid><dc:creator><![CDATA[thunderbol4]]></dc:creator><pubDate>Tue, 25 Mar 2008 20:50:46 GMT</pubDate></item></channel></rss>