SQL文の書き方とマイナスの表示
以下の表があった場合
計2−計1の式
|
|
数量1 単価1 計1 数量2 単価2 計2 損得 *<−−損得の合計
2 2 4 3 1 3 ー1 15
4 6 2 16
3 7 4 14
3 5 2 10
2 10 8 8
select 数量1,単価1,数量1*単価1 as 計1,
数量2,単価2,数量2*単価2 as 計2,
計2ー計1 as 損得 from DB名前
上記の式で損得の箇所が計算されないのですが
式がいけないのでしょうか?
また、損得の列を合計する式(*の部分)はどのように考えるのでしょうか?
また
マイナスの表示を赤色にするにはどうすればよいのでしょうか?
あれこれやってみたのですがうまくいきませんお教え願いたいのですが。。
よろしくお願いします。 ちゃん
私の解釈が間違いなければ・・・
計算結果のカラムと計算結果のカラムに対して更に、計算
させる事はできなかったような。
SQL文考えてると面倒なので、損得ははずして取得して
その後再計算させるのはいかがでしょうか?
>マイナスの表示を赤色にするにはどうすればよいのでしょうか?
これは結果の表示時ですよね。
結果表示はStringGridしか使わないのですが・・・
私なら、OnDrawCellを使います。
select 数量1,単価1,数量1*単価1 as 計1,
数量2,単価2,数量2*単価2 as 計2,
(数量1*単価1)ー(数量2*単価2) as 損得 from DB名前
だとどうでしょうか?
また、集計は、Unionで集計行を連結するとできます。ただ、表示順などに工夫がいります。
SyakeさんHOtaさn
ありがとうございます。下記の要領でできました。
助かりました。
select 数量1,単価1,数量1*単価1 as 計1,
数量2,単価2,数量2*単価2 as 計2,
(数量1*単価1)ー(数量2*単価2) as 損得 from DB名前
ついでと言ってはなんですが?
DBgrind 内の表示された数字を変更するのはどうすればいいのでしょうか?
数字を変えようとすると受け付けてくれません。
新規登録もできなくなりました。
SQLで計算をさせてしまうと、その表はDBGrid内を直接変更できないのでしょうか?
ここら辺のつながりがわかりません。
よろしくお願いします。
ちゃん
OnGetTextイベントで書き換えてみたら?
TQueryは、Orderや式があると更新ができません。
対応は、TQueryにTUpdateSQLを付け足して、ModifySQL,DeleteSQL,InsertSQLのSQLを設定します。これは一つのテーブルに対しての捜査です。複数の場合は、そのテーブルの数だけ用意します。
TQueryのCanModifyをTrueにして、Insert,Postイベントで、ApplyUpdateをします。
データの入力と再計算はどうしたらよいのでしょうか?
CachedUpdate をTrueにしたら文字の変更はできました。
当然とは思いますが、再計算はされませんし、元のデータは変更されません。
UpdateSQLを SQLと並んで取り付けました。
Query1.UpdateObject プロパティにUpdateSQL1をセットした。
DeleteSQL
InsertSQL
ModifySQL
がありますが
HOtaさんが書かれました
「SQLを設定するとは?」どういうことでしょうか?
「TQueryのCanModifyをTrueにして、Insert,Postイベントで、ApplyUpdateをします。」
これが解りません。
はてこれからどうすればよいのでしょう。
DBGrid1.OnKeyDown の場所に
--------------------------------------------------
if not (Query1.State in [dsBrowse,dsInsert]) then
Query1.Edit
else
Query1.Edit;
-------------------------------------------------
というようなものを書くのでしょうか?
それともボタンを作成してSQL文
select 数量1,単価1,数量1*単価1 as 計1,
数量2,単価2,数量2*単価2 as 計2,
(数量1*単価1)ー(数量2*単価2) as 損得 from DB名前
を追加するのでしょうか?
的を外しいるかもしれませんが、、、
迷い込んでいます。でも少し進みました。
よろしくお願いします。
ちゃん
TQueryで数量1*単価1 as 計1や複数のテーブルからのSQLを作った場合やOrder By句などを使った場合は、どのレコードをUpdateすればよいかがわからなくなります。その場合、TUpdateSQLを使います。
TQueryのUpdateObjectに追加したTUpdateSQLを設定します。
TUpdateSQLの右クリックから、「UpdateSQLの設定」を選びます。この場合は、更新対象のテーブルは一つですから、DB名前を選びます。「テーブル項目の取得」「データーセットのデフォルト」「主インデックスを選択」「SQL文を生成」とボタンを押すと、
DeleteSQL
InsertSQL
ModifySQL
が自動で生成されます。更新する項目を設定すれば、コンパクトになります。
これで更新の用意ができます。
TQueryのOnPostイベントやOnDeleteイベントに
try
TIBQuery(DataSet).ApplyUpdates;
except
TIBQuery(DataSet).CancelUpdates;
raise;
end;
などとかいて更新します。
ちょっと面倒ですが、VBなどでそれぞれに更新SQLを書くよりは、すっきりします。
1から10までお世話になってしまいます。
delphiの参考書でSQLのところを読んではみたのですが、、、
UpdateSQLの項目はあったのですが、、、、
結局お世話になってしまいます。
上記の
UpdateSQLの設定を通過して
DeleteSQL
InsertSQL
ModifySQL
が作られましてSQL文が自動記入されました。
ここまではできたのですが
そのあとはどのようにするのでしょうか?
-----------------------
TQueryのOnPostイベントやOnDeleteイベントに
try
TIBQuery(DataSet).ApplyUpdates;
except
TIBQuery(DataSet).CancelUpdates;
raise;
end;
------------------------
この部分ができません。
Query1 には after あるいはbefore イベントしかないのですが
TQueryと書いてありますのでそこに記入するのではないですよね、
それに TIBQuery(DataSet)の部分はこのまま記入するのでしょうか?
ぜーんぶお世話になってしまいます。すみません。
よろしくお願いします。
ちゃん
TUpdateSQLはキャッシュを持って、データーベースを操作します。
TUpdateSQLの設定迄ができていて、
次に、TQueryのイベントで、AfterPostやAfterDeleteなどのいずれかにイベントを作り、
try
TQuery(DataSet).ApplyUpdates;
except
TQuery(DataSet).CancelUpdates;
raise;
end;
を書いて、キャッシュを適用する用意をします。
あとはDBgrindの操作をすれば更新できると思います。
データの変更はできました。
しかし全部同じデータに変更になってしまいます。
これからは自分であれこれやってみますので、
これは後でどうにかなると思います。
データの変更ができることが確認できましたので
今までの質問は解決されたことにさせて頂きます。
また他の方法もあるようですのでそちらも勉強してみます。
随分とお世話になりました。
ありがとうございます。
ちゃん
>データの変更はできました。
>しかし全部同じデータに変更になってしまいます。
UpdateSQLの
ModifySQL
でキーがおかしくなっていませんか?
ツイート | ![]() |