問題タブ [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に追加します
レコードを挿入する必要があるデータベーステーブルがあります。私は更新可能なTClientDatasetを使用しており、すべてが正常に機能します。
次に、ダミーフィールドを追加する必要があります。計算されたものではありません。行の状態(ApplyUpdatesの前に使用する情報の一部)を記述できる1つのフィールドですが、これはデータベーステーブルの一部ではありません。
この輝かしい投稿を見ましたが、追加されたフィールドは計算されており、情報を更新および保持することはできません。それは私には大丈夫ではありません。
データベースから「ダミーフィールド」を追加して、ProviderFlagsを選択して修正し、pfUpdateを削除しようとしました。
Provider.pasで、挿入SQLを作成する前に、ProviderFlagsがチェックされていることを確認しました。これは確かに機能するはずです。問題は、ProviderFlagsが上記の私のステートメントから更新されていないように見えることです。
書き込み可能であるが、delphiデータベースの更新プロセスによって無視されるフィールドをその場で追加する方法を知っていますか?
私はdelphi7を使用しています。
助けてくれてありがとう。
delphi - DELPHI: ClientDataSet と CalcFields を使用したマスター/ディテール
次のようなマスター/詳細 ClientDataSet があります (これらは実行時に作成/入力され、API 呼び出しから返されたデータが入力され、データベース接続はありません):
サービスをドロップダウン フィールドとして表示し、そのサービスで利用可能なアドオンをグリッドに入力します。フィールド「TotalCost」は、グリッドの独自の列に表示される計算フィールドです。「選択済み」フィールドは、グリッドに表示されるチェックボックスを追跡するために使用され、顧客が特定のアドオンを望んでいることを示します。
これはすべて期待どおりに機能します。次に、サービスとアドオンの合計コストを計算する必要があります。以下を使用して取得できるサービスのコスト:
ただし、選択した各アドオンから TotalCost を取得できません。Aggregate フィールドを使用できると思っていましたが、検索の結果、マスター/詳細設定を使用してこれを実行できないことがわかりました。また、次のように ClientsDataSet の詳細を単純に反復しようとしました。
しかし、これは無限ループを引き起こします。コードのこの部分をデバッグすると、...DataSet.First が CalcFields (または CalcFields を呼び出している別のもの) を呼び出していることがわかります。
選択したアドオンの DataSet を繰り返し処理して、総コストを動的に計算するにはどうすればよいですか (選択または数量が変更されるたびに)。
- 編集 -
次のように、詳細テーブルに集計を設定しようとしました。
- TAggregate 'AggregatePrice' を追加
- 次のようにフィールドを設定します。 Active - True Name - AggregatePrice' Expression - SUM(TotalPrice) GroupingLevel - 1 IndexName - ServiceId Visible - True
これを実行すると、「フィールド 'TotalPrice' は集計で使用される正しいタイプの計算フィールドではありません。内部計算を使用してください」というエラー メッセージが表示されます。
delphi - TClientDataset での計算フィールドの集計
集計フィールドを計算フィールドに追加することはできますか?
次のフィールドを持つ cds があるとします。
- ID(オートインクリメント)
- 名前(文字列)
- 価格(変動)
- 数量(整数)
- 合計 (整数) - 計算フィールド - 価格 * 数量
集計を追加して、合計列の合計を取得したいと考えています。出来ますか?
delphi - ClientDataSet フィールドのサイズを決定するプロパティは何ですか?
ClientDataSets とローカル ファイル ストレージを使用するアプリがあります。一部の情報は DB グリッドに表示され、途切れていることがわかりました。文字列の最初の 500 文字程度が表示されましたが、基になるフィールドを長くする必要がありました。そこで、コードに戻り、基礎となる FieldDefs のサイズと表示幅を増やしました。新しいデータセットも作成しました (設計時)。最後に、アプリケーションを実行し、新しいデータベースを作成しました。それでも、500 文字までしか表示されませんでした。
フィールドの長さを制限している原因を確認するには、どこを見ればよいですか?
delphi - TClientDataSet エラー「読み取り専用フィールドを変更しようとしています」
次のチェーンを使用します
Items と ItemType テーブルのデータを取得し、オフラインで操作します。アイテム TADOQuery の SQL プロパティに単純なクエリが含まれています
ItemType はさらに単純です。
今 - cdsItems の場合、TypeName フィールドをルックアップ フィールドに変更し、それを cdsItemType にチェーンします (珍しいことではありません)。cdsItems をグリッドにバインドします。しかし、グリッドでコンボボックスを使用してデータを変更しようとすると、「読み取り専用フィールドを変更しようとしています」というエラーがスローされます。
両方の TCliendDataSet ReanOnly:= false のすべてのフィールドに設定します。また、for を使用して TClientDataSets にデータを取得した後、すべてのフィールドを ReadOnly:=False に再度設定しました。しかし、それでも「読み取り専用フィールドを変更しようとしています」というメッセージが表示されます。
使用データベースはMS SQL Server 2005 Express editionです。
delphi - delphi 2009 ClientDataSet.ApplyUpdates(-1) 10 行の処理で 3457496 を返す
トランザクションの下でコードを実行してから appplayUpdates を呼び出し、エラーをキャッシュして修正します。しかし、Delphi 7 で機能していた調整コードは、Delphi 2009 では無限ループに陥ります。
table1 と table2 は接続を共有します。
ClientDataSet は、delphi 7 から delphi 2009 への使用上の慣習で変更されましたか?
プロバイダーは TDataSetProvider であり、ADO コンポーネントから mssql データベースに接続されています。
php - PHP-MYSQLからClientDataSetへ
Delphi / ClientDataSetsについてはよくわかりませんが、調べてみたいと思います。しかし、私がそれを追求する前に、私が達成したいことが実現可能かどうかを判断するために質問があります。
PHPスクリプトを使用して、MYSQLデータベースの12個のサブセットを週に1回CDSファイルに保存したいと思います。CDSファイルを作成するために従うことができるファイル仕様はありますか?Linuxを使用して共有Webホストでスクリプトを実行するので、サーバーでDelphiスクリプトを実行することは実行可能ではないと思います。
ありがとう!
php - PHPがClientDataSetCDSファイルに追加
必要なすべての列/ヘッダー/データ型を含む空のDelphiClientDataSetCDSファイルセットアップがあります。PHPを使用して、連想配列をCDS行に追加したいと思います。これは可能ですか?
配列は単純に次のようになります。
私は言語に堪能であり、私のWebサーバーは共有Linuxホストであるため、PHPを選択しました。基本的に、ここではDelphiを実行できません。私は、この環境で機能する可能性のある他のオプションを受け入れています。ありがとう!
編集:
私の解決策については、この投稿のコメントを参照してください。
delphi - OnEditErrorまたはOnPostErrorがTClientDataSetの無効なユーザーエントリをキャッチしないのはなぜですか?
いくつかのデータソースを介してTDBGridに接続されたメモリ内データセットがあります。問題は、ユーザーが数値フィールドにマイナス記号を入力し、Enterキーを押すか、別のレコードに移動するたびに、AV(検証エラー)が発生することです。TDBGridまたはTClientDataSet(OnEditError、OnPostError)のいずれかからAVをキャッチできません。
私はここで何か間違ったことをしていますか?そうでない場合、誰かがこれを回避することができますか?
Delphi XE2 Enterpriseの使用、4回目の更新。最新のMIDAS.DLL; ターゲットプラットフォーム:Win64。
================================================== ============================
次のことを試してください。
1-新しいVCLアプリケーション/フォームを作成し、オブジェクトTClientDataSet、TDBGrid、およびTDataSourceをフォームに追加します。ClientDataSetはどのデータベースにも接続されていません(メモリ内)
2-永続的な数値フィールドをTable1(TClientDataSet)に追加します。
3-上記の3つのオブジェクトをリンクします。永続フィールドの列がTDBGridに表示されます。
4-メインフォームのOnShowメソッドに、次の行を追加します。
Table1.Active:= False;
Table1.CreateDataSet;
Table1.Active:= True;
5-プログラムを実行し、数値フィールド列にマイナス記号を入力して、Enterキーを押します。
AVを確認してから、OnEditErrorおよび/またはOnPostErrorイベントハンドラーをTable1に追加して、AVをキャッチしてみてください。投稿を中止することはできません。つまり、AVが発生し、Application.OnExceptionハンドラーを使用してのみキャッチできます。これは良くありません。アプリケーションに多くのフォームやルーチンが含まれていると仮定すると、プログラムが実行しているレベルで何かを実行できるはずです。上位レベルではありません。
私の質問をより明確にしたいと思います。
delphi - TStringGrid を doc、xls、pdf にエクスポート
TZColorStringGrid (Delphi の TStringGrid の子孫) を使用して作成した一種のレポートがあり、doc、xls、pdf にエクスポートし、このレポートを印刷できるようにしたいと考えています。だから私はこれを行う方法について最後の 2 日間考えています。
ここで、TStringGrid のコンテンツから TClientDataSet を作成する方法について誰かが質問した投稿を見つけまし た。それを読んだときはうれしくて、これで終わりだと自分に言い聞かせましたが、DelphiXe2 にクイック レポートがないことに気付いたので、このソリューションは失敗しました。Fast Reports で同様の方法でそれを行うことはできますか?
問題を解決するために私が考えた 2 番目の方法は、JVCL エクスポート コンポーネントを使用することですが、エクスポートは DBGrid に対してのみ機能し、TStringGrid に対しては機能しません。したがって、TStringGrid からその TClientDataSet を作成し、TClientDataSet を DbGrid にリンクしてエクスポートする必要もあると思います。しかし、その ClientDataSet を作成する方法がわかりません。下の画像のように TStringGrid 構造を保持するかどうか
後で編集: TJvPrint は stringgrid を印刷するための JVCL のコンポーネントであり、TClientDataSet を必要とせずに機能しますが、テーブル構造を保持しません (結合されたセル、フォントの書式設定などを意味します)
私の問題を解決できると考えている 3 つ目の方法は、TStringGrid をエクスポートする無料のコンポーネントを見つけることです。SMExport を 1 つ見つけましたが、無料ではなく、投資するお金がまったくありません (残念ながら私はまだ学生です)。TStringGrid のエクスポートに使用できる無料のコンポーネントを他に知っていますか?
誰かが TStringGrid をエクスポートする別の解決策を考えていて、それを共有したい場合は、私は感謝します!