<?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[Beziehungen von Access Tabellen abfragen]]></title><description><![CDATA[<p>Aloha,</p>
<p>ich habe eine Access DB per CDatabase und CRecordset an meine Applikation angebunden.</p>
<p>Nun würde ich gerne bevor ich einen Datensatz aus einer Tabelle lösche, abfragen, ob dieser in irgendeiner Beziehung zu einer anderen Tabelle steht.</p>
<p>Access läßt natürlich kein Löschen zu, wenn ich einen Datensatz löschen möchte, der in einer Beziehung steht, aber ich würde gerne <strong>vor</strong> dem Löschen wissen, ob der Datensatz löschbar ist, sprich die potentiellen Beziehungen abfragen.</p>
<p>wie könnte ich dies realisieren ?</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/73551/beziehungen-von-access-tabellen-abfragen</link><generator>RSS for Node</generator><lastBuildDate>Sun, 26 Apr 2026 23:26:27 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/73551.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 May 2004 15:03:42 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Beziehungen von Access Tabellen abfragen on Tue, 11 May 2004 15:03:42 GMT]]></title><description><![CDATA[<p>Aloha,</p>
<p>ich habe eine Access DB per CDatabase und CRecordset an meine Applikation angebunden.</p>
<p>Nun würde ich gerne bevor ich einen Datensatz aus einer Tabelle lösche, abfragen, ob dieser in irgendeiner Beziehung zu einer anderen Tabelle steht.</p>
<p>Access läßt natürlich kein Löschen zu, wenn ich einen Datensatz löschen möchte, der in einer Beziehung steht, aber ich würde gerne <strong>vor</strong> dem Löschen wissen, ob der Datensatz löschbar ist, sprich die potentiellen Beziehungen abfragen.</p>
<p>wie könnte ich dies realisieren ?</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/518291</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518291</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Tue, 11 May 2004 15:03:42 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehungen von Access Tabellen abfragen on Wed, 12 May 2004 08:23:48 GMT]]></title><description><![CDATA[<p>Eine Möglichkeit:<br />
wenn die Tabellen z.B. über das Feld ID miteinander verknüpft sind:<br />
- ID aus dem Datensatz von Tabelle 1 auslesen<br />
- mit der ausgelesenen ID von Tabelle 1 auf Tabelle 2 filtern<br />
- gucken, ob Datensätze mit der gleichen ID in Tabelle 2 vorhanden sind<br />
Das geht ganz gut, wenn nicht ständig gelöscht werden soll. Bei vielen Zugriffen ist es evtl. nicht sehr performant.</p>
<p>Noch eine Möglichkeit (nicht ausprobiert, nur so eine Idee):<br />
vielleicht kann man ja mit try/catch gucken ob das Löschen erfolgreich war. Wenn nicht, dann hast du das zwar nicht vorher gewusst, kannst aber die evtl. auftauchende Access-Fehlermeldung im catch-Block umgehen oder sonstwie drauf reagieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/518699</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518699</guid><dc:creator><![CDATA[isabeau]]></dc:creator><pubDate>Wed, 12 May 2004 08:23:48 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehungen von Access Tabellen abfragen on Wed, 12 May 2004 09:44:56 GMT]]></title><description><![CDATA[<p>isabeau schrieb:</p>
<blockquote>
<p>Eine Möglichkeit:<br />
wenn die Tabellen z.B. über das Feld ID miteinander verknüpft sind:<br />
- ID aus dem Datensatz von Tabelle 1 auslesen<br />
- mit der ausgelesenen ID von Tabelle 1 auf Tabelle 2 filtern<br />
- gucken, ob Datensätze mit der gleichen ID in Tabelle 2 vorhanden sind<br />
Das geht ganz gut, wenn nicht ständig gelöscht werden soll. Bei vielen Zugriffen ist es evtl. nicht sehr performant.</p>
<p>Noch eine Möglichkeit (nicht ausprobiert, nur so eine Idee):<br />
vielleicht kann man ja mit try/catch gucken ob das Löschen erfolgreich war. Wenn nicht, dann hast du das zwar nicht vorher gewusst, kannst aber die evtl. auftauchende Access-Fehlermeldung im catch-Block umgehen oder sonstwie drauf reagieren.</p>
</blockquote>
<p>Aloha isabeau,</p>
<p>Deine erste Möglichkeit ist die die mir im Kopf rumgeschwirrt ist, ich kann sie aber nicht in Quellcode umsetzen, weil mir die Befehle fehlen.</p>
<p>Ich kann per CDatabase zwar ein</p>
<pre><code>ExecuteSQL()
</code></pre>
<p>ausführen, bekommen aber keinen Rückgabewert, der mich über ein Ergebnis informiert.<br />
Und das ist mein Problem.<br />
Du schreibst, daß das sehr gut geht, hast Du ein wenig Quellcode ?</p>
<p>Die zweite Möglichkeit war auch schon in meinem Kopf, aber ich muß es vorher wissen, weil ich in einer Liste ausgeben möchte, ob ein Datensatz löschbar ist, oder nicht.</p>
<p>Beste Grüße und Danke</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/518766</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518766</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Wed, 12 May 2004 09:44:56 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehungen von Access Tabellen abfragen on Wed, 12 May 2004 11:14:51 GMT]]></title><description><![CDATA[<p>Mal zu der ersten Lösung (<strong>nicht getestet, nur ausm Kopp!</strong>):<br />
Mmmmhhh, du schreibst ja, dass du mit CDatabase und CRecordset arbeitest... Du müsstest also mindestens zwei von CRecordset abgeleitete Klassen auf deine beiden Tabellen mit den Beziehungen haben.<br />
Ausserdem schreibst du, dass du in einer Liste stehen haben möchtest, welche Datensätze man löschen kann und welche nicht.<br />
Dann geht das in etwa so:</p>
<pre><code class="language-cpp">CTabelle1 Tabelle1;	// CTabelle1 ist die von CRecordset abgeleitete Klasse auf Tabelle 1
Tabelle1.Open();

CTabelle2 Tabelle2;	// CTabelle2 ist die von CRecordset abgeleitete Klasse auf Tabelle 2
Tabelle2.Open();

while(!Tabelle1.IsEOF())	// komplette Tabelle 1 auslesen
{
	Tabelle2.m_strFilter = &quot;ID='&quot; + Tabelle1.m_ID + &quot;'&quot;;	// Filter auf das Feld ID von Tabelle 2
								// mit dem Inhalt des Feldes ID aus Tabelle 1

	Tabelle2.Requery();	// Tabelle 2 aktualisieren

	if(Tabelle2.IsEOF())
	{
		// keine Datensätze vorhanden -&gt; kann in Tabelle 1 gelöscht werden
	}
	else
	{
		// Datensätze vorhanden -&gt; nicht in Tabelle 1 löschen
	}

	Tabelle1.MoveNext();
}

Tabelle2.Close();
Tabelle1.Close();
</code></pre>
<p>Da kommt dann aber ziemlich oft Requery() vor. Bei vielen Datensätzen in Tabelle 1 könnte das relativ lange dauern...</p>
<p>Vielleicht gibt es ja noch etwas besseres, z.B. so in der Art:</p>
<pre><code class="language-cpp">CTabelle2 Tabelle2;	// CTabelle2 ist die von CRecordset abgeleitete Klasse auf Tabelle 2
Tabelle2.m_strSort = &quot;ID&quot;;	// nach Feld ID sortiert
Tabelle2.Open();

CString strAltID;	// merkt sich die alte ID
CString strIDs;		// merkt sich alle vorkommenden verschiedenen IDs

while(!Tabelle2.IsEOF())	// komplette Tabelle 2 auslesen
{
	strAltID = Tabelle2.m_ID;	// merken

	strIDs += &quot;'&quot; + Tabelle2.m_ID + &quot;'&quot;; // mit Trennzeichen ' merken

	while(!Tabelle2.IsEOF()) &amp;&amp; strAltID == Tabelle2.m_ID)
		Tabelle2.MoveNext();	// haben wir schon, brauchen wir nicht doppelt
}

Tabelle2.Close();

// ...und jetzt Tabelle 1 auslesen:

CTabelle1 Tabelle1;	// CTabelle1 ist die von CRecordset abgeleitete Klasse auf Tabelle 1
Tabelle1.Open();

CString strID;	// Kontrollstring

while(!Tabelle1.IsEOF())	// komplette Tabelle 1 auslesen
{
	strID = &quot;'&quot; + Tabelle1.m_ID + &quot;'&quot;;	// den hier suchen wir im String mit den ganzen IDs

	if(strIDs.Find(strID) != -1)
	{
		// diese ID ist auch in Tabelle2 vorhanden -&gt; nicht löschen
	}
	else
	{
		// diese ID ist nicht in Tabelle2 vorhanden -&gt; löschen
	}

	Tabelle1.MoveNext();
}

Tabelle1.Close();
</code></pre>
<p>Das ist aber auch nur so eine Idee. Ist vielleicht besser, sich die IDs nicht in einem CString, sondern in einem Array oder sonstwie zu merken. Vielleicht gibt es aber auch noch was ganz anderes...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/518872</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518872</guid><dc:creator><![CDATA[isabeau]]></dc:creator><pubDate>Wed, 12 May 2004 11:14:51 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehungen von Access Tabellen abfragen on Wed, 12 May 2004 11:39:48 GMT]]></title><description><![CDATA[<p>Aloha isabeau,</p>
<p>nur ein Satz.</p>
<p><strong>Fühl Dich virtuell geküßt</strong></p>
<p>Genau so habe ich mir das vorgestellt. Perfekt !!!!!!!!!!!!!!!!!!!!!!!!!!!!</p>
<p>Nicht nur 1000 und einen, sondern 2000 und einen Dank in Deine Richtung.</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/518911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518911</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Wed, 12 May 2004 11:39:48 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehungen von Access Tabellen abfragen on Wed, 12 May 2004 11:44:31 GMT]]></title><description><![CDATA[<p>BOA schrieb:</p>
<blockquote>
<p><strong>Fühl Dich virtuell geküßt</strong></p>
</blockquote>
<p>Das ist leider ein Mann, obwohl der Name sich weiblich anhört. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/518922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518922</guid><dc:creator><![CDATA[haha]]></dc:creator><pubDate>Wed, 12 May 2004 11:44:31 GMT</pubDate></item><item><title><![CDATA[Reply to Beziehungen von Access Tabellen abfragen on Wed, 12 May 2004 11:50:25 GMT]]></title><description><![CDATA[<p>haha schrieb:</p>
<blockquote>
<p>BOA schrieb:</p>
<blockquote>
<p><strong>Fühl Dich virtuell geküßt</strong></p>
</blockquote>
<p>Das ist leider ein Mann, obwohl der Name sich weiblich anhört. <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>
</blockquote>
<p>Aloha,</p>
<p>deswegen auch nur virtuell.</p>
<p>Aber im Notfall, auf einer einsamen Insel...... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Nee, hat mir prima geholfen, egal ob Männchen oder Weibchen.</p>
<p>Grüße</p>
<p>BOA</p>
]]></description><link>https://www.c-plusplus.net/forum/post/518929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/518929</guid><dc:creator><![CDATA[BOA]]></dc:creator><pubDate>Wed, 12 May 2004 11:50:25 GMT</pubDate></item></channel></rss>