QRでレコード内容を表示させるには?

解決


縺倥e繧薙◆繧給Date: 2008/0   No: 30660

遘√蝨溷床縺ォ蠑オ繧TQuickRepぃ⑤ataSet縺ォtable繧定ィュ螳壹@縺溘i
蜍輔″縺セ縺励◆縲分的悶l縺璢<B諤昴>縺セ縺吶′
蜷後§讒倥↑譁ケ縺ョ蜿りにぃFればぃB#Z#Z


ペンネーム2号  2008-05-07 08:50:43  No: 30634

QRDBText1.DataField := '社員番号';

と設定してある状態で

QuickRep1.Preview;

でプレビューを表示した場合にはそのレコードの内容「社員番号」が
表示されますが、実行時にはDataField名の「社員番号」が
表示されてしまっています。
実行時にレコードの内容を表示するにはどのようにしたら
良いのでしょうか?

Table1AfterScrollで個々に設定すれば表示させる事は可能ですが・・・


かず  2008-05-08 07:02:57  No: 30635

QRDBTextはプロパティーの表示したいDateSetとDataFiledを指定します。
毎回DataFiledを変えたいのでしょうか?


ペンネーム2号  2008-05-08 07:38:01  No: 30636

>QRDBTextはプロパティーの表示したいDateSetとDataFiledを指定します。

は当然指定してあります。

が実行時にはなぜかDataFiledに設定されている文字列が表示されます

QRDBText1.DataField := '社員番号';
で現在のレコードの 社員番号 に 1000 が登録されていても
社員番号 が表示されてしまいます。

QuickRep1.Preview;

現在のレコード情報ではなく1件目のレコードが表示されます。

レコードを1件目以外にしても1件目が表示されます。
表示中にレコードを移動させても変化ありません。


HOta  2008-05-08 17:07:06  No: 30637

表示するときは、選択したレコードが表示されますので、1件目のレコードが表示されるのは、正常な動作だと思います。
社員番号が1000のレコードを表示させるなら、そのレコードだけを選択すればいいと思います。


ペンネーム2号  2008-05-09 00:03:02  No: 30638

設計時にはDataFieldに設定された文字列が表示されますが、
実行時にもレコード上のデータで無くこの文字列が表示された
ままになっています。

QuickRep1.Preview;

を実行した場合にはどのレコードにいても 1件目の レコード内容が
表示されてしまいます。


HOta  2008-05-09 03:40:50  No: 30639

ちょっとわかりにくいのですが、「設計時にはDataFieldに設定された文字列」とは、どういうことでしょうか?QuickRep1.Preview;を実行した時点で、設定したDataSetを開き直します。ですから、どのレコードにいても1件目のレコード内容を表示します。


ペンネーム2号  2008-05-09 04:22:08  No: 30640

「設計時にはDataFieldに設定された文字列」とは、どういうことでしょうか?

QRDBText を配置し、プロパティエディタでDataSetのみ設定し
(DataFieldを設定しない)

procedure TForm5.FormCreate(Sender: TObject);
begin
    QRDBText1.DataField := '社員番号';
end;

とした場合 [QRDBText1] と表示されてしまいます
設計時に プロパティエディタで DataField に 社員番号 と設定した場合
[社員番号] と表示されてしまいます。

(*) レコードの内容が表示されません

>どのレコードにいても1件目のレコード内容を表示します。

ということは 10件目等(1件目以外)のプレビューは表示できないという
事ですか?


ofZ  2008-05-09 04:28:03  No: 30641

どっか、このへんかな?

(1)設計時プレビューで使用しているDatasetと、実行時に使用しているDatasetが異なる
(2)実行時に、QuickRep.Dataset = nil になっている
(3)設計時はテストのためDatasetを使用しているが、実行時はOnNeedDataを使用してる


かず  2008-05-09 06:00:43  No: 30642

おかしいのは
>QRDBText1.DataField := '社員番号';
QRDBText1のプロパティでDataFieldを指定する。上記の書きかたはしない。
社員番号はなんですか?文字列、テーブルのフィールド名?

>現在のレコード情報ではなく1件目のレコードが表示されます。
>表示中にレコードを移動させても変化ありません。
レポートは画面に表示しているデータを印刷(表示)するわけではありません。テーブルの1件目から順に表示します。
2件目以降を表示しないなら、ofzの書いたQuickRep.Datasetプロパティが記入されていないのでは
表示しているテーブルのレコードだけ印刷したいのであれば、あらか締め絞り込ん(TTableならFillter、SQLなたSelect文)でおかなくては行けません。

とにもかくにもプロパティの設定が不備です。ここだけでは良くわからないので指摘できませんが、QuickRepotで簡単なレポートツールです。
ゴリコリ書かなくても、必要な箇所のプロパティを設定すればデータの一覧表はすぐできます。


かず  2008-05-09 06:03:30  No: 30643

ofZさん、敬称名前とも間違えました<m(__)m>


ペンネーム2号  2008-05-09 06:43:04  No: 30644

DataField はテーブル名を指定するプロパティなので
当然社員番号とはテーブルのフィールド名ですよ?

>おかしいのは
>>QRDBText1.DataField := '社員番号';
>QRDBText1のプロパティでDataFieldを指定する。上記の書きかたはしない。

プロパティエディタ上でフィールド名を指定しないといけないと?

>(1)設計時プレビューで使用しているDatasetと、実行時に使用しているDatasetが異なる
>(2)実行時に、QuickRep.Dataset = nil になっている
>(3)設計時はテストのためDatasetを使用しているが、実行時はOnNeedDataを使用してる

QuickRep.Dataset := nil 
だとしたら1件目も表示されないと思うのですが?

QR を使用しているフォームは

procedure TForm5.Button1Click(Sender: TObject);
begin
    QuickRep1.Preview;
end;

procedure TForm5.FormCreate(Sender: TObject);
begin
    //DataSource はプロパティで設定
    QRDBText1.DataField := '社員番号';
end;

のみでありOnNeedData等のイベントは設定していませんし、
設計時と実行時の設定が異なる事はありません


かず  2008-05-09 07:21:26  No: 30645

DataField名が日本語!!普通英文字で書くでしょう
トラブルが多いとされています。

>プロパティエディタ上でフィールド名を指定しないといけないと?
基本的な使用法を理解しなさい。しないなら完成しません。

>QuickRep.Dataset := nil 
>だとしたら1件目も表示されないと思うのですが?
1件目が表示されます。たがらofZさんがチェックしてくれたのです。

QuickRep.Dataset := 使用テーブル名  を指定してみたのですか?
結果はどうだったのですか?


AY  2008-05-09 07:23:44  No: 30646

何度読み返しても  意味が解らなかったのですが・・

QuickRepを置いているフォームに、ボタンを置いていて
「実行時」と書かれているのは、このフォームを表示している時の
事ですね。

そうなります。
フォームを表示している時には、デザインと同じものが見えているでしょう。
そして  Previewすると、レポートが表示されます。
この時  当然データセットの先頭が表示されます。

書かれている状態は、すべてそうなります。
正常な動きです。

他の表現、
>で現在のレコードの 社員番号 に 1000 が登録されていても
この現在のレコードとは何を指していますか?
もしかして、フォーム上にDBGridか何かを置いていて
それで選択して、現在のレコードと言っていますか?
この点も、捕捉されないと話が見えません


AY  2008-05-09 07:27:53  No: 30647

一度、QuickReportのサンプルを、開いてみられた方が
良いのではないですか?
根本的に、使い方を間違っていませんか?


かず  2008-05-09 07:47:56  No: 30648

AYさんの補足
通常、Delphiに限らず画面は画面のフォームを、QuickReportはフォームに張りますが、ここにはボタンなどは置かずに、他のフォームから呼びます。
Form1  メインの画面とします。
Form2にQuickRep1があるとします。

Form1のボタンのクリックイベントに
Form2.QuickRep1.Priview;

とやるのが普通です。

ペンネーム2号と同じものを作ったら、正しくプレヴュー画面が表示され全データが表示されました。変な使いかたですが

QuickReportのBandtypeはrbDetailになってますか?


ペンネーム2号  2008-05-09 08:18:35  No: 30649

>QuickRep.Dataset := nil 
>だとしたら1件目も表示されないと思うのですが?
1件目が表示されます。たがらofZさんがチェックしてくれたのです。

表示されますか?
Dataset を設定しないでどのテーブルの1件目が表示されるのでしょうか?

>QuickRep.Dataset := 使用テーブル名  を指定してみたのですか?
>結果はどうだったのですか?

//DataSource はプロパティで設定
QRDBText1.DataField := '社員番号';

>そうなります。
>フォームを表示している時には、デザインと同じものが見えているでしょう。
>そして  Previewすると、レポートが表示されます。
>この時  当然データセットの先頭が表示されます。

ひょっとして・・・・・

DBEdit の場合
現在のレコードの DataField の内容が表示されますが
QRでは表示してくれないのですか?

>根本的に、使い方を間違っていませんか?

間違っているというより、使い方がまったくわかっていません


ペンネーム2号  2008-05-09 08:19:17  No: 30650

//DataSource はプロパティで設定
QRDBText1.DataField := '社員番号';

でかいてあるとおいプロパティで設定してあります

QRRep RQDBText 共に


かず  2008-05-09 08:21:47  No: 30651

ペンネーム2号と同じものを作った(たぶん)ときに
QuickRep1のDataSetプロパティを設定しないとQRDBText1はフィールド名を表示します。

QuickRep1のDataSetプロパティは項目データベースの+を押して展開しないと表示されません。


かず  2008-05-09 08:37:41  No: 30652

>ひょっとして・・・・・

>DBEdit の場合
>現在のレコードの DataField の内容が表示されますが
>QRでは表示してくれないのですか?
DBEditとQRDBEditと同じにしない。
あくまでもQRDBEditはTableのデータを順に表示(印刷する)するだけです。
正しくDetaiBand内にQRDBTextを書いたとして

>QRDBText1.DataField := '社員番号';  書かない。わかんないかなあ
DataFieldプロパティに設定するだけ  言ったことやりなさい。
プロパティに書いて終わりならコードで書かない。
DataFieldプロパティにカーソルを置いて、リストを表示させ社員番号が選択できますか。できなければDatasetが設定されていない。

もう疲れた!


AY  2008-05-09 18:51:04  No: 30653

ペンネーム2号さん、先ず  かずさんの書かれた
>通常、Delphiに限らず画面は画面のフォームを、QuickReportはフォームに張りますが、ここにはボタンなどは置かずに、他のフォームから呼びます。
>Form1  メインの画面とします。
>Form2にQuickRep1があるとします。
>
>Form1のボタンのクリックイベントに
>Form2.QuickRep1.Priview;
>
>とやるのが普通です。

この形にしてみましょう。
操作しやすいと思いますよ。
(レポートのデータソースもForm2におきます、後のことがあるので
Tableではなく、TQueryで、Select * From  ???にでもしてください)
これで、全てのレコードが印刷されるように。
確認できたら・・
現在のフォームの説明が無いので予測ですが
「現在のレコード」に拘っていらっしゃるようなのでForm1で
ある特定のレコードを選択して印刷したいのでしょう。
それは、Form2のTQueryの操作によって、社員番号=1000を条件に
レポートを開けばお望みの結果になります。


ofZ  2008-05-09 20:04:43  No: 30654

レスを全部読んでいないけど、QuickRepに直接QRDBEdit貼り付けしていませんか?
もはや、設計画面の作り方の問題にしか見えない。

QuickRep.Bands.HasDetail = True にして、Detail と表示されているとこに
QRDBEditを貼り付けしないと、自動でレコード表示しません。

それでも、設計時プレビューと実行時の結果が異なるのが気になる。


ペンネーム2号  2008-05-09 20:27:00  No: 30655

>それでも、設計時プレビューと実行時の結果が異なるのが気になる。

設計時プレビューの事など1度も話していませんが?


ペンネーム2号  2008-05-09 20:34:19  No: 30656

>実行時にレコードの内容を表示するにはどのようにしたら
>良いのでしょうか?

答えとしては

>そうなります。
>フォームを表示している時には、デザインと同じものが見えているでしょう。
>そして  Previewすると、レポートが表示されます。
>この時  当然データセットの先頭が表示されます。
>書かれている状態は、すべてそうなります。
>正常な動きです。

で答えが出てる気がするのですが・・・

かずさんは実行時にレコード内容が表示されてるのでしょうか?
(プレビューでなくフォーム上)


ペンネーム2号  2008-05-09 20:36:43  No: 30657

>レスを全部読んでいないけど、QuickRepに直接QRDBEdit貼り付けしていませんか?

直接貼り付けたら1件目のデータも表示されないと思いますが?


ofZ  2008-05-09 21:12:08  No: 30658

やっと状況わかったよ。
> AY 2008/05/08(木) 22:23:44 
確かにコレが答えだ。

> で答えが出てる気がするのですが・・・
じゃ、解決にしてくださいな。

このまま続けても、今「何が問題で」「何が解決していない」のか、
まったくわかりません。

> かずさんは実行時にレコード内容が表示されてるのでしょうか?
答えが出ている(と、おっしゃる)以上、話がかみ合えば、おのずと
回答がわかりますよね?
正確に状況を把握しているのは、ペンネーム2号さんのみで、他の方々は
推測で回答しています。

> AY 2008/05/08(木) 22:23:44 
この回答が正解であれば、そのように答えてもらいたいし、そうしないと
他の方が、違うのかと思い別の回答をつける場合もある。
そうなれば、話が広がる一方で、答えが見えなくなります。


ペンネーム2号  2008-05-09 21:38:38  No: 30659

>Table1AfterScrollで個々に設定すれば表示させる事は可能ですが・・・

で言っているように

procedure TForm1.Table1AfterScroll(DataSet: TDataSet);
var
    I: Integer;
    WC : TComponent;
begin
    for I:=0 to Form1.ComponentCount -1 do
    begin
      WC := TWinControl(Form1.Components[I]);
      if WC is TQRDBText then TQRDBText(WC).Caption := TQRDBText(WC).DataSet.FieldByName(TQRDBText(WC).DataField).AsString;
    end;
end;

としないと駄目と言う事ですね!

〔解決〕

確認用として

>ひょっとして・・・・・

>DBEdit の場合
>現在のレコードの DataField の内容が表示されますが
>QRでは表示してくれないのですか?

としたら

そうです

とでもしてくれたらそこで終わったんですが・・・・

プロパティエディタから設定しないと駄目って所に誰も突っ込みを
入れないのが気になりますがw

ついでに

Table1.Active を True にすると DBText などは1レコード目を表示
してくれますが、QRDBText では表示してくれません。

おそらくは QRDBText で FieldDataLink が設定されていないか FieldDataLink のイベントが設定されてい為かと思いますが・・・・・
ソースが無いのでわかりません。

バグか仕様バグとしか思えないんだけど・・・・・


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加