問題タブ [tclientdataset]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
delphi - TClientDataset - Unicode 列名でフィルタリングすることは可能ですか?
ASCII 以外の文字を含む列名を含む可能性のある TClientDataset があります。そのような列でフィルタリングできないようです。コード例を次に示します。
設定後MyDataset.Filtered := True
、フィールド「PLAC」が見つからないという例外が発生します。
私が知る限り、問題はユニットのメソッドTExprParser.SetExprParams
にありDBCommon
、フィルターテキストを適切に解析できませんでした。
列の名前を変更する以外に、これでできることはありますか?
delphi - TADO レコードセット XML から TClientDataSet XML 形式へ
TADO レコードセットを XMLに保存してTClientDataSet にロードしようとしていますが、間違った XML 形式に関するエラーが発生します。
ADO XML レコードセット形式を TClientDataset 形式に変換するにはどうすればよいですか。
ありがとう。
ios - iOS アプリケーションで Delphi ClientDataSet を使用できますか?
Embarcadero DocWiki のiOS アプリで使用されていないコンポーネントの投稿を読みましたが、ClientDataSets と DataSources が iOS アプリケーションで使用できるかどうかわかりませんでした。これらのコンポーネントが iOS アプリケーションで動作するかどうか、誰でも確認または否定できますか。
delphi - TClientDataSet での「データパケットの不一致」エラー
ファイルであることを示唆する .cds ファイルがありTClientDataSet
ます。TClientDataSet
Delphi 7 で開こうとすると、 に設定Active
するとtrue
、「データパケットが一致しません」というエラーが発生しました。私を助けてください :(
delphi - TClientDataSet を使用して ApplyUpdates の後にトリガーによって生成された値を取得する
私は(Firebird)DBを持っています。ほとんどのテーブルには、挿入前に発生するトリガーがあり、ジェネレーターを介して主キー (PK) を作成し、新しく挿入されたレコードに作成日値と作成者値を書き込みます。また、更新日フィールドと更新者フィールドに書き込む更新トリガーもあります。
例(クライアントは私のDBのテーブルです):
TDSProviderConnection を介してリモートの TDataSetProvider に接続されている ClientDataSet (CDS) を介して更新を適用する場合、これらの生成された値を「取得」するにはどうすればよいですか? 既存のものを編集すると (t_client_update トリガーが呼び出され、RefreshRecord を呼び出すと、updated および updated_by フィールドが取得されます。ただし、Doco はそのメソッドを慎重に使用するように指示しているため、これを達成するための正しい方法ではない可能性があります。 ApplyUpdates(-1) を呼び出した直後に呼び出します。
私が使用している CDS には、編集しようとしている 1 つのレコードしか含まれていません。新規レコードの場合、CDS は dsInsert モードです。すべてが正常に DB に書き込まれるので、この新しいデータを再度取得する必要があります。また、テーブル内のすべてのレコードを含む CDS を使用して、それがより単純であるかどうかを確認しましたが、違いはありませんでした-当然のことです。この情報が必要な理由は、DB Aware コントロールでこれらの値をユーザーに表示するためです。それらは読み取り専用です。
PK を使用して既存のレコードを編集するときに推測するレコードで Get を呼び出すことができますが、新しい PK が何であるかがわからないため、Insert には役立ちません。
CDS に ApplyUpdates を試行する例 (actDSSave は TDataSetPost アクションです)
リモート DataSetProvider に接続されたデータセットに TIBQuery を使用しています。このクエリ SQL は単純なselect * from client where client_id = :client_idです。このクエリを TIBUpdateSQL にも関連付けようとしたほか、DataSetProvider で poAutoRefresh を true に設定しようとしました。
これらのトリガー生成値をこの方法で取得することは可能ですか、それとも別の方法でアプローチする必要がありますか? 私が考えることができる別の方法は、各テーブルに対して CRUD を実行し、代わりにそれを使用するストアド プロシージャを作成することです (適切な in/out パラメータを使用して、この新しいデータを返します)。問題を説明して再現するのに十分な情報をここで提供できれば幸いです。
ありがとう
編集 上記で実現された DoApplyUpdates(-1) は、私自身のメソッドです。現時点での実装は単純です。
FdatCommon は、私の CDS を含む TDataModule です。
delphi - 実行時に TDataSetFields を作成できますか?
実行時にデータセットとそのすべての詳細データセットのコピーを作成する簡単なコードがあります。
CreateDataSet
「無効EDBClient
なフィールド タイプ」というメッセージで例外が発生します。誰が何が悪いのか教えてもらえますか?
delphi - TDatasetProviderを介してすべてのレコードを取得するにはどうすればよいですか?
両方の子孫である2つのデータセットがある場合、一方のTCustomClientDataset
呼び出しCloneCursor
をもう一方の呼び出しに持ち、同じデータの独立したビューを持つことができます。TDatasetProvider
ドキュメントでは、ソースデータセットを任意のデータセットにすることができることを除いて、を使用して基本的に同じことを達成できるように見えます。
私はこれを機能させようとしています。データベースからデータを読み取る(と呼びましょう)と、別のビューで動作するTClientDataset(と呼びましょう)TSimpleDataset
があり、に接続されています。A
B
TDBGrid
B
を呼び出すB.CloneCursor(A, ...)
と、グリッドに。のすべてのレコードが表示されますA
。しかし、を作成してTDatasetProvider
そのDataset
プロパティをA
に設定し、それをのプロバイダーとして設定すると、にB
接続されたグリッドB
には、すべてではなく1つの行のみが表示されます。
何が間違っているのでしょうか。また、グリッドにすべてが表示されるように修正するにはどうすればよいA
ですか。
delphi - Delphi 7 から外部 dll が呼び出されると、TClientDataSet で欠落フィールド エラーが発生する
DB Express と TClientDataSet を使用して DB グリッドに結合の結果を表示する Delphi XE2 で作成された DLL があります。他のアプリケーションで使用するためにエクスポートされたフォームを起動/表示する簡単な機能があります。FormActivate でクエリが実行され、グリッドにデータが入力されます。
別の Delphi XE2 アプリケーションからフォームを表示する関数を呼び出すと、すべて正常に実行されます。問題は見つかりませんでした。
しかし、別の Delphi 7 アプリケーションから同じ関数を呼び出すと、TClientDataSet が結合からフィールドを見つけられないというエラーが表示されます。
たとえば、データは次のように返されます。
XE2 から呼び出した場合は問題ありません。Delphi 7 から呼び出すと、最後の行(データベース グリッドからそのフィールドを非表示にするために使用)で次のエラーが発生します。
最初の行は問題ありませんが、「t」フィールドが最初に取得されるようにクエリの順序を切り替えると (「from t left join s」)、代わりに「s」フィールドでエラーが発生します。
非互換性の原因について何か考えはありますか?
ありがとう!
delphi - 別のインデックスで並べ替えると、Delphi7TClientDataSet集計が機能しません
3つの集計フィールドを持つClientDatasetを取得しました。集計は、とりわけ、顧客ごとの合計注文額を計算するため、顧客IDのインデックスを使用します。
このClientDatasetをレポート(FastReports)に使用します。このレポートには、すべての顧客とその注文が表示され、顧客ごとにグループ化され、注文日で並べ替えられます。
したがって、ClientDataSetに2つのインデックスがあります。1つはCustomerId(グループ化フィールドと集計フィールド用)、もう1つはCustomerId + OrderDate(並べ替え用)です。
これで、クライアントデータセットの並べ替えインデックスを選択すると、集計が機能しなくなり、レポートに空の値が返されます。これらは、個々の集計がすでに適切なインデックスを使用している場合でも、ClientDataset自体のグループ化インデックスを選択した場合にのみ機能します。
たくさんの余分なコードを書くか、レポートを調整する必要があるので、これをうまく機能させたいです(各グループの上に合計を表示したいので、FRSUM式はうまく機能しませんまた)。
sql - 更新後の TClientDataset の値の更新
複数のテーブルからのデータを含む TClientDataset を取得しました。このデータセットに更新を適用すると、同期が取れなくなる可能性があります。
一例を挙げます:
更新するテーブルで、「Client_id」という ID を取得しました。clientdataset には、「Client」テーブルから取得され、GUI に表示される値「Client_name」も含まれています。
次に、テーブルの「Client_id」を変更し、テーブルに更新を適用すると、データセットの「Client_name」フィールドが突然同期しなくなります。これは当然のことながら、clientdataset が更新されていないためです。
afterpost イベントで clientdataet.refresh を実行できるようになりましたが、データセットのカーソルが最初のレコードにジャンプし、更新されたレコードへのポインターが失われます。
誰でもこれを解決する方法の手がかりを得ましたか?