TSqlDataset にはcommandtextプロパティ (文字列) があるのに、TSqlQuery にはsqlプロパティ (tstrings) がある理由を知っている人はいますか?
SQLステートメントを検討してください
select id, name from
table
order by name
TSqlQuery を使用すると、sql[1] にアクセスしてクエリ内のテーブル名を動的に変更できますが、TSqlDataset を使用している場合 (双方向データセットが必要な場合は、データセットがプロバイダーに接続されているため)そこから tclientdataset に)、commandtext 文字列を文字どおりに設定する必要があります。上記の例は些細なことですが、SQL ステートメントがさらに複雑になると問題になる可能性があります。
更新:これまでのコメントと回答から判断すると、誤解されていたようです。コンポーネントの実行時パフォーマンスの向上はあまり気にしませんが (クエリに 1 秒かかる場合、1 ミリ秒が問題になるわけではありません)、プログラマー (つまり私) とプログラムを維持する能力については気になります。実際には、TSqlQuery に格納されている次のクエリがあります。
select dockets.id, dockets.opendate, customers.name, statuses.statname,
dockets.totalcost, dockets.whopays, dockets.expected, dockets.urgent,
(dockets.totalcost - dockets.billed) as openbill,
(dockets.totalcost - dockets.paid) as opencost,
location.name as locname, dockets.attention,
statuses.colour, statuses.disporder, statuses.future, dockets.urgcomment
from location, statuses, dockets left join customers
on dockets.customer = customers.id
where dockets.location = location.id
and dockets.status = statuses.id
文字列の文字数は数えていませんが、255 文字以上あると確信しているため、クエリを単純な文字列に格納することはできません。特定の状況で、「and statuses.id = 3」または「and customers.id = 249」という行を追加して、表示されるデータの量をフィルタリングしたいと考えています。クエリが TStrings として格納されている場合は、基本クエリにダミー行「and 1 = 1」を追加し、必要に応じてこの行を更新できます。しかし、クエリは 1 つの長い文字列であり、その末尾に簡単にアクセスすることはできません。
私が現在行っていること (より良い解決策の代わりに) は、別の TSqlDataSet を作成し、その commandtext をデフォルトの TSqlDataSet の commandtext に設定し、追加の条件を追加することです。