問題タブ [tdatasetprovider]

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.

0 投票する
4 に答える
11461 参照

delphi - データセット構造から別の構造にデータを移動するためのより高速な方法(TDatasetProvider内)

提供するデータに新しいフィールドを作成できるカスタムTDatasetProviderがあります。

したがって、元のデータセットに次のフィールドがあるとします。

  • 顧客ID
  • 名前

また、ビットマップの表示を使用してDBGridで選択する必要があります。私のDSPはデータセットデータに呼び出されるブールフィールドを追加できるので、そうすることができSelectedます。

私が今それをする方法:

  1. 2つのTClientDatasetオブジェクト(オリジンとターゲット)を作成します
  2. Originで、InternalGetRecordsメソッドのパラメーターから取得したデータをロードします(オーバーライドします)
  3. Targetでは、Originデータセットから定義されたfielddefを作成し、開発者が設計時に作成したfielddefを追加します。
  4. ターゲットでCreateDatasetを実行します
  5. そして、行ごと(およびフィールドごと)に、OriginデータベースからTargetデータセットにデータをコピーします
  6. 最後に、InternalGetRecordsからの戻り値としてDataバリアントを返します。

それを行うためのよりエレガントな(そしてより速い)方法があるかどうかは本当にわかりません。その結果を得る別の(より速くおよび/またはエレガントな)方法はありますか?

0 投票する
1 に答える
2768 参照

delphi - TClientDataSet エラー「読み取り専用フィールドを変更しようとしています」

次のチェーンを使用します

Items と ItemType テーブルのデータを取得し、オフラインで操作します。アイテム TADOQuery の SQL プロパティに単純なクエリが含まれています

ItemType はさらに単純です。

今 - cdsItems の場合、TypeName フィールドをルックアップ フィールドに変更し、それを cdsItemType にチェーンします (珍しいことではありません)。cdsItems をグリッドにバインドします。しかし、グリッドでコンボボックスを使用してデータを変更しようとすると、「読み取り専用フィールドを変更しようとしています」というエラーがスローされます。

両方の TCliendDataSet ReanOnly:= false のすべてのフィールドに設定します。また、for を使用して TClientDataSets にデータを取得した後、すべてのフィールドを ReadOnly:=False に再度設定しました。しかし、それでも「読み取り専用フィールドを変更しようとしています」というメッセージが表示されます。

使用データベースはMS SQL Server 2005 Express editionです。

0 投票する
1 に答える
2237 参照

delphi - ClientDataSetは、TADOQueryからデータを部分的にのみ転送します

2つのデータベースがあり、一方のデータベースのすべてのレコードがもう一方のデータベースに一致するレコードを持っていることを確認する必要があります。これらをDB-SQLおよびDB-Legacyと呼びます

両方にSQLインターフェイスがあれば、これは十分に簡単ですが、残念ながら、私は一方にしかアクセスできず、もう一方には「レコードの検索/最初/次」タイプのインターフェイスがあります。

このタスクを実行するために選択した方法は、以下のコードを介してDB-SQLをclientdatasetに転送することです。

これは、 http://www.podgoretsky.com/ftp/docs/Delphi/D5/dg/5_ds3.html#20536のコードに基づいています。

これにより、EOFまでFirst / NextでDB-legacyを反復処理し、FindKeyを使用してClientDataSetを検索し、DB-LegacyのすべてのレコードがDB-SQLに存在することを確認できます。FoundInGISタグを1に設定することで、この値でフィルタリングして、DB-SQLにはあるが、DB-Legacyにはないすべてのレコードを見つけることができます。

私の問題は、私たちのデータベースの1つが他のデータベースよりも大幅に大きく、3,310,510レコードであるということです。lQueryには正しい数のレコードがありますが、プロシージャの最後では、lDataSetには約2,500,000しかありません。

ここで、CDを使用してFindKeyメソッドを使用したいと思います。これは、TADOQueryでサポートされていませんが、レコードの3分の1を無視する場合は、あまり使用されません。DataSetProviderまたはClientDataSet内のどこかに整数のオーバーフローがあるかもしれないと推測していますが、例外が発生しないのは少しやんちゃです!他の誰かがこの種の問題を抱えていましたか?それを並べ替える方法はありますか(おそらく、データを小さなチャンクにダウンロードするか、CDSにデータを取り込む別の方法を使用することによって)?

この場合のSQL-DBはOracleですが、DBの問題ではないかと思いますが、コードもSQL-Serverで動作する必要があります。

編集:私は今、いくつかのわずかに異なる動作をしています。クエリからいくつかのフィールドを削除しようとすると、正常に実行されます。すべてのフィールドは個別に正常に実行されますが、すべてを処理することはできません(これは私のオーバーフロー仮説をサポートします)。私は今ですが、時々例外が発生します。例外は

これは誤解を招く可能性があります。デバッグDCUを詳しく調べると、エラーが次の原因で発生していることがわかります。

TCustomClientDataSet.SetData(DBClient行1482)。これにより、ESafeArrayError(AResult = -2147024882)が発生し、「予期しないバリアントまたは安全な配列エラー」になりますが、その後のFormatStrの呼び出しを処理できません。

0 投票する
0 に答える
832 参照

web-services - Delphi SOAP サーバー + クライアントでプロバイダーがエクスポートされない

Delphi XE7 + Employee Interbase DB を使用しています。

Datasnap で SOAP サーバーを構築しようとしています。

1 つのサーバーに 3 つの SOAP サーバー データ モジュールがあり、それぞれにテーブルがあります: 顧客、従業員、国、それぞれが同じ方法 (ファイル、新規、その他、SOAP サーバー データ モジュール) で作成され、次にデータ エクスプローラーからテーブルをドラッグします。データ モジュール(Delphi は TSQLCOnnection と TSQLDataset を作成します)を追加し、次に TDatasetProvider を追加します。3 つのデータ モジュールは同一です。

クライアント アプリケーションには、WSDL インポーターによって作成された 3 つのインターフェイスがあります。

3 つのインターフェイスは同一です (もちろん、名前と GUID は異なります)。

クライアント フォームには 3 つのボタンがあり、同じ操作を実行します。

ServerID、URL、ProviderName のみを変更します。

3 つの DatasetProvider ini の 3 つのデータ モジュールでは、「エクスポート済み」がチェックされています。

当初、最初の SOAP サーバー データ モジュール (Customer) はうまく機能しました。私のクライアントから、Customers テーブルを見ました。従業員または国を試したとき、常に「プロバイダーがエクスポートされていません」というメッセージが表示されました。

私は大きな間違いを犯しました:何かを変更しようとして、エクスポートされたフラグのチェックを外し、サーバーとクライアントをコンパイルして実行しました:何も機能しませんでした。わかりました、私はそれを期待していました。次に、フラグを再確認しました...エクスポートされたフラグが確認されましたが、正しく機能するプロバイダーはありません...(はい、現在機能していたものは機能しません)。

サーバーとクライアントの両方が同じ PC で実行されます。

誰かが私に何が間違っているのか教えてもらえますか? 問題はサーバーにあると思いますが、サーバーのどこですか?

0 投票する
2 に答える
93 参照

postgresql - applyupdates で更新する最後のテーブル

5 つのテーブルを含む CRUD があり、最後のテーブルが更新された後、サーバー側で何らかの処理を行う必要があります。datasetprovider のイベントは、個々のテーブルごとに発生します。

同様に、3 つのテーブル、person、car、personcar があります。[保存] をクリックしたフィールドに入力します。最初に人が保存され、次に車が保存され、最後に人が保存されます。トランザクション ブロックで最後のテーブルを知るにはどうすればよいですか?

正しい「after」イベントが見つかりませんでした...

0 投票する
1 に答える
230 参照

delphi - TDataSetProvider poUseQuoteChar と小文字のテーブル名が原因で発生する例外が表示されない

デフォルトTDataSetProvider.Options.poUseQuoteCharは真です。

SQL ステートメントが小文字のテーブル名を使用し、例外を発生させずにTClientDataSet.ApplyUpdates(0)更新を行わなかったとき、私は (再び) これに悩まされました。

DataSnap.Providerのコードで、function TCustomResolver.InternalUpdateRecord(Tree: TUpdateTree): Boolean;例外をトラップします。

そして、私はそれE.Message

[FireDAC][Phys][FB]動的 SQL エラー'#$D#$A'SQL エラー コード = -204'#$D#$A'テーブル不明'#$D#$A'tt_calendar'#$D#$A'At 1 行目、8 列目

はありません。ReconcileErrorHandler上記のコードでHandleUpdateErrorは false が返されますが、何らかの理由で例外が発生しません。

私のセットアップは次のとおりです。

TcxSchedulerStorageに接続された DevExpress で作成された新しいイベントTDataSource -> TClientDataSet -> TDataSetProvider -> TFDQuery -> TFDConnection(この場合は Firebird データベース)。 Delphi Tokyo 10.2.3 を使用しselect * from tablenameTFDQuery.SQL.Textすべてのデフォルト設定。

例外を強制的に表示し、これを完全に解決する変更できる単一の設定はありますか (任意のデータベース タイプに対して)。
私は Delphi ファイルにパッチを適用するつもりです。

これをランタイムコードで「解決」しました:

しかし、毎回これを考える必要はありません。