問題タブ [tdataset]
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 - データセットの更新
同じ列を持つ A と B の 2 つのデータセットがあるとします。「距離パス」を取得したい - データセット A を B に変更するために必要な操作は最小限です。
A と B にはわずかな違いしか含まれておらず、より良いものを探していると仮定できます。
- すべての A の要素を削除する
- すべての B の要素を A に挿入する
これはどのようにアーカイブできますか?
c - TDataset --> 行 cols マトリックスへのポインタ?
Lazarus/FreePascal (Delphi など) で Windows アプリケーションを作成しています。5000 行、2 列の数値が取り込まれたTDatasetオブジェクトがあります。このデータを、.dll ライブラリから静的にインポートする関数に渡す必要があります。C
以下は、パラメータの形式を説明するライブラリのマニュアルからの抜粋です。
この関数はインデックスを構築し、それへの参照を返します。この関数が期待する引数は次のとおりです。dataset、rows、および cols - ポイントの入力データセットを指定するために使用されます 。dataset は、行優先順 (各行に 1 つのフィーチャ) で格納された行 cols マトリックスへのポインターです。
TDataSet オブジェクトを単純に渡すことはできますか? ポインターが正しい形式になるように、最初に何かをする必要がありますか?
delphi - Delphi-TDataSetからメモリを解放する方法は?
D2010、Win764ビット。こんにちは、
別のルーチンで開かれたTDataSetを処理する必要があるbuttonClickイベントがあります...GetDBGenericData。
関数GetDBGenericDataはTDataSetを返します。このルーチンは基本的にtQueryコンポーネントを受け取り、そのSQLプロパティを設定して開きます。次に、TDataSetをボタンクリックに戻します。
私の問題は-DSを理解することです。このルーチンでここに作成しています。コンポーネントを指すTDataSetに「割り当て」ています。解放しないと、メモリリークが発生します(EurekaLogの報告による)。解放すると、次にこのルーチンを実行したときにAVを取得します。(特にGetDBGenericDataルーチン内)。
私が起こっていると思うのは、DSが(コピーではなく)返されるTDataSetに割り当てられているということです。したがって、実際には、このルーチンではDSと、GetDBGenericDataのtQueryの両方を解放しています。 。
リンケージを「切断」してから、動的に作成しているメモリのみに関連付けられているメモリを削除するにはどうすればよいですか。
ありがとう、GS
c++builder - VCLコンポーネントを使用して、非常に大きなデータセットをグリッドに表示する
私のC++CADアプリケーションは、ユーザーのモデリング操作のログを保持しているため、適用を解除して再適用することができます。特定のプロジェクトには、ほんの数回の操作が含まれる場合もあれば、数十万回の操作が含まれる場合もあります。このデータをメモリ効率の高い方法で管理するための独自のデータ構造がすでに用意されており、これはうまく機能しています。しかし今、私はユーザーがグリッドで自分の操作ログを検査できるようにする機能を追加しています。(私はEmbarcadero RAD Studio 2010を使用しています。すべてのGUIはVCLを使用しています。)
現在、TDBGridコンポーネントを使用して、操作データを行でユーザーに表示しています。コンポーネントを接続する方法は次のとおりです。
TDBGrid.DataSource = TDataSource
TDataSource.DataSet = TClientDataSet
TClientDataSet.ProviderName = TDataSetProvider
TDataSetProvider.DataSet = ProjectDataSet
ProjectDataSetは、TDataSetから派生したクラスです。
データベースからではなく、自分のデータ構造から操作データを取得しているため、ProjectDataSetクラスのGetFieldData関数とGetRecord関数(およびその他のいくつか)をオーバーライドして、自分のデータ構造から直接データを返すようにしました(データベースクエリ)。これは機能します。
多くの操作を表示するときのメモリ使用量を最小限に抑えるために、TClientDataSetで「FetchOnDemand」プロパティを設定し、「PacketRecords」を100に設定しました。したがって、最初は最初の100個の操作のみがグリッドに表示されます。ユーザーがグリッドの一番下までスクロールすると、次の100個の操作がTClientDataSetによって自動的にフェッチされ、グリッドに表示されます。
これはすべて非常にうまく機能します。私の問題は、ユーザーがグリッドをスクロールすると、TClientDataSetが何もリリースせずにますます多くのレコードをフェッチし続けることです。したがって、非常に大規模なプロジェクトでユーザーが十分に下にスクロールすると、最終的にメモリが不足します。
だから、私の質問は、このGUIを機能させるための最良の方法は何ですか?基本的に、グリッドをスプレッドシートのように動作させたいと思います。操作の数に関係なく、ユーザーが操作リストを上下にスクロールできるようにする(または特定の行にジャンプできるようにする)必要があります。また、GUIコンポーネントがメモリ内に多くのものを保持することは望ましくありません。ユーザーは差し迫った必要はありません。
TDBGrid(または他のVCLコンポーネント)は、一度に少数のレコードのみをフェッチすることで任意の大きなデータセットを表示できるように設計されていると思いますが、それはどのように行われるのでしょうか?
GUIを再考する必要がある場合は、それで問題ありません。しかし、同じGUIを使用して10操作のプロジェクトまたは100,000操作のプロジェクトを表示できれば本当に素晴らしいと思います。
ありがとう。
delphi - Delphi XE2データセットフィールドタイプTStringFieldはUnicodeをサポートしていませんか?
Delphi XE2でTDatasetクラスとその文字列フィールドを調べていたところ、AsWideStringがUnicodeStringのタイプを返すことに気付きました。ただし、関数TField.AsString:Stringから値を取得し、TFIeld.AsAnsiString:AnsiStringを呼び出します。したがって、Unicode文字は失われますか?また、TDataset.GetFieldDataに渡されるバッファーは、AnsiCharの配列として宣言されます。
私はこれを正しく理解していますか?
delphi - メモリ内オブジェクトのデータセットを取得するにはどうすればよいですか?
Generics と RTTI で動作する TDataset の子孫を知っている人はいますか?このようなコードを記述して、GUI でデータベース対応コンポーネントを利用できますか? :
これは可能なはずです。フィールド定義は、データの正確なタイプがわかっているため、RTTI を介して作成できます。値は、前後に自動的にマーシャリングすることもできるため、クラスまたはレコード内のデータを表示および編集できます。
無駄なマーシャリング コードを大量に書かなければならないのは嫌ですが、そのために必要な情報は RTTI で既に入手できます。
あるいは、誰かが何らかの種類の TEnumerable <-> TDataset アダプターを作成したことがありますか?
そのようなものは存在しますか、それとも書き始める必要がありますか?
...
私が見つけた最も近いものは、Mastering Delphi 7 の Marco Cantu による (素晴らしい!)例ですが、コード自体は、ジェネリック、新しい RTTI システム、または属性などの新しい言語機能を使用していません。 Unicode delphi では動作しません。TDataset も D7 から変更されました。
c# - Delphi の DataTable (DataSet と同様) コンポーネント
私は Delphi 開発者であり、C# 開発者でもあります。C# には、行へのランダム アクセスをサポートする DataTable クラスがあります。DataTable (C#) のようなサードパーティの TDataSet (Delphi) コンポーネントはありますか?
delphi - TFieldの元のテーブルの名前を取得します
CommandTextプロパティがSQLクエリに設定されているTDataSetを使用しています。また、TDataSetのフィールドに基づいてSQLクエリの一部を作成する次の関数を作成しました。しかし、それは不完全です。ご覧のとおり、TFieldの元のテーブルの名前を取得する必要があります。どうすればこれを達成できますか?
delphi - 単純な読み取り専用 TDataSet を作成してメモリ構造にアクセスする方法
私は(ほとんど)静的で読み取り専用のメモリ構造を持っています。そのデータを TDataSet の子孫として提示して、DB グリッドなどを使用してデータを表示/レポートできるようにしたいと考えています。編集の必要はありません (実際、これは禁止されている必要があります)。このSOの質問と、一部のホームロールコードには「ブックマークに問題がある」という他のアドバイスを見てきました。私は本当に単純なソリューションだけを望んでおり、理想的には、既知のフィールド タイプを使用して単純な「仮想」テーブルを作成し、それぞれに対して「OnGetFieldData」イベントを与えることができる場所になります。私のもう 1 つの選択肢は、DevExpress TDxMemData インメモリ テーブルを使用して、データの変更に合わせてデータを入力することですが、これは効率が悪く、面倒です。他の解決策はありますか?