user78: Suppose we reach a state where only transactions that pay a fee are accepted by miners. Further supposed that someone created a transaction using an old/odd client that allowed them not to send any fees.
In this case, what would happen to the transaction? Could it be undone? Would the coins be lost forever?

user168: Generally it is assumed that any client at that time will require a fee. As most clients require a fee now unless you start them with the no fee flag. 
I suppose anyone could write their own client or use a client that has it re-enabled, but that is really on their own head and their best bet then would be to mine until they get a block and add their transaction to the block. That might take a couple years, but hey, they wanted a free transaction.

user30: I have successfully used the methodology described here to delete a transaction which didn't go anywhere because of a too low fee. In short, the process is as follows:

Configure Linux machine with db4.8-util and bitcointools. Ubuntu works fine.
Run following command on your data folder:
./dbdump.py --datadir ~/.bitcoin --wallet-tx > tx.txt

Open tx.txt using text editor. Find transaction in question. Should look like:
==WalletTransaction== 12a75d48a002ab920 ...
block: 00000000000000000000000000000000 ...
2 tx in, 1 out
TxIn: value: 0.007640 prev(c09e92cb94ff1fb6d4 ...
TxIn: value: 0.000050 prev(7dcda75e6ad8b5adc7 ...
TxOut: value: 0.007690 pubkey:  Script: DUP HA...

Reverse the 12a75d48a002ab920... value, get something like 92ab02a0485da712. Don't need to reverse the whole line, just a few hex values from beginning. You will need to search for this in the database dump.
Dump the database using following command:
db4.8_dump ~/.bitcoin/wallet.dat > dumpfile

Using text editor open the dumpfile and search for that 92ab02a0485da712 line you found earlier. There will be two lines - key and value, you need to delete both. Save the file.
Re-import the database using the following command:
db4.8_load ~/.bitcoin/wallet2.dat < dumpfile


If all went fine, the wallet2.dat will have a database without transaction in question.
All of this, of course, only works if transaction was never accepted by the network, which is likely the case if you already waited a day, and nothing happens. There is no way to undo transaction which was already accepted by the network. I tried this technology twice and both times worked fine.

user85: The transaction would have no effect. A transaction that wasn't accepted by the network has no effect on the ability to spend coins. The person whose coins were affected could simply delete that transaction from his own database. There's no need to undo the transaction since it was never committed to the block chain anyway.

78: <p>Suppose we reach a state where only transactions that pay a fee are accepted by miners. Further supposed that someone created a transaction using an old/odd client that allowed them <strong>not</strong> to send any fees.</p>

<p>In this case, what would happen to the transaction? Could it be undone? Would the coins be lost forever?</p>
 168: <p>Generally it is assumed that any client at that time will require a fee. As most clients require a fee now unless you start them with the no fee flag. </p>

<p>I suppose anyone could write their own client or use a client that has it re-enabled, but that is really on their own head and their best bet then would be to mine until they get a block and add their transaction to the block. That might take a couple years, but hey, they wanted a free transaction.</p>
 30: <p>I have successfully used the methodology described <a href="https://bitcointalk.org/index.php?topic=19207.0">here</a> to delete a transaction which didn't go anywhere because of a too low fee. In short, the process is as follows:</p>

<ul>
<li>Configure Linux machine with db4.8-util and <a href="https://github.com/gavinandresen/bitcointools">bitcointools</a>. Ubuntu works fine.</li>
<li><p>Run following command on your data folder:</p>

<pre><code>./dbdump.py --datadir ~/.bitcoin --wallet-tx &gt; tx.txt
</code></pre></li>
<li><p>Open tx.txt using text editor. Find transaction in question. Should look like:</p>

<pre><code>==WalletTransaction== 12a75d48a002ab920 ...
block: 00000000000000000000000000000000 ...
2 tx in, 1 out
TxIn: value: 0.007640 prev(c09e92cb94ff1fb6d4 ...
TxIn: value: 0.000050 prev(7dcda75e6ad8b5adc7 ...
TxOut: value: 0.007690 pubkey:  Script: DUP HA...
</code></pre></li>
<li><p>Reverse the <code>12a75d48a002ab920...</code> value, get something like <code>92ab02a0485da712</code>. Don't need to reverse the whole line, just a few hex values from beginning. You will need to search for this in the database dump.</p></li>
<li><p>Dump the database using following command:</p>

<pre><code>db4.8_dump ~/.bitcoin/wallet.dat &gt; dumpfile
</code></pre></li>
<li><p>Using text editor open the dumpfile and search for that <code>92ab02a0485da712</code> line you found earlier. There will be two lines - key and value, you need to delete both. Save the file.</p></li>
<li><p>Re-import the database using the following command:</p>

<pre><code>db4.8_load ~/.bitcoin/wallet2.dat &lt; dumpfile
</code></pre></li>
</ul>

<p>If all went fine, the wallet2.dat will have a database without transaction in question.</p>

<p>All of this, of course, only works if transaction was never accepted by the network, which is likely the case if you already waited a day, and nothing happens. There is no way to undo transaction which was already accepted by the network. I tried this technology twice and both times worked fine.</p>
 85: <p>The transaction would have no effect. A transaction that wasn't accepted by the network has no effect on the ability to spend coins. The person whose coins were affected could simply delete that transaction from his own database. There's no need to undo the transaction since it was never committed to the block chain anyway.</p>
