レコード型を使用するには?


Delphi初心者  2005-05-30 12:05:27  No: 15192  IP: 192.*.*.*

レコード型を用いて、入力された情報(氏名・住所・電話番号)は
ID ごとに保存されるようにして、保存はメインフォームが閉じるまで
にしたいのですが、どのようにしたらよいのですか?皆さんお忙しいとは
思いますが宜しくおねがいします

編集 削除
Syake  2005-05-30 13:44:45  No: 15193  IP: 192.*.*.*

例えば
Type
   TPersonData = record
     fID :Integer;
     fName :String;
       ・
       ・
   end;
で、宣言します

後は変数を宣言するだけ
var
  arrPsnData :array of TPersonData; //動的配列として
  または
  arrPsnData :array[0..99] of TPersonData; //静的配列として

です。

編集 削除
Syake  2005-05-30 13:55:29  No: 15194  IP: 192.*.*.*

ちなみに、FormなどUnitをまたいで使用される場合で
グローバル変数を使わずに、関数や手続きの引数や戻
り値として使用したい場合は、共通で使うUnitを新規
作成してそこに宣言してから、各使用するUnitの
interface節にUsesして使用した方使い勝手が良いかな。

編集 削除
Syake  2005-05-30 14:04:51  No: 15195  IP: 192.*.*.*

ひつこいです。

ちなみに、Dのバージョンによっては
レコード型動的変数で
aaa := arrPsnData[i].fID  等の記述
の際には fID 等のフィールド名が候補に
挙がってこない事がありますが、気に
せず使ってください。
D6かD7までは出てきてたのに・・・

編集 削除
えーと  2005-05-30 15:42:40  No: 15196  IP: 192.*.*.*

> 保存はメインフォームが閉じるまで
> にしたいのですが、どのようにしたらよいのですか?

保存の仕方を質問しているのでは?

編集 削除
Syake  2005-05-30 16:30:07  No: 15197  IP: 192.*.*.*

>保存の仕方を質問しているのでは?
保存の仕方???

Publicにでも、配列変数を宣言してから
変数に値を入れたらメインフォームを閉
じるまでは保持しますよね。

って、ことですか?

編集 削除
えーて  2005-05-30 18:43:30  No: 15198  IP: 192.*.*.*

いきなりすみません。Public以外はないのですか?

編集 削除
Syake  2005-05-30 19:36:02  No: 15199  IP: 192.*.*.*

ふ〜む。
Publicにしたのは、他のユニットからでも参照できるのでそうしただけです。
ただ、グローバル変数になってしまうので、個人的にはお勧めしません。

Form1内つまりUnit1内だけで各手続きなどで共通して使用するだけなら
Privateでも構いませんし、
implementation
uses ・・・;
var
   //ここに宣言
でも構いません。
が、後者はあまり使用しません。

また、単一の手続き内だけで使用するなら手続き内に宣言しても良いです。
procedure TForm1.ButtonOnClick(Sender :TObject);
var
//ここに宣言
begin


もっとも複数のユニット間で使用するがグローバル変数を使いたくないとか、
単一ユニットだがPrivateにも宣言したくなかったら別に方法もありますが。

編集 削除
ななし  2005-05-30 20:11:12  No: 15200  IP: 192.*.*.*

保存の仕方というと、ファイルやデータベースへの保存の話かな?と
思うのですが、配列の宣言の仕方ということで宜しいのでしょうか?

編集 削除
Syake  2005-05-30 20:16:43  No: 15201  IP: 192.*.*.*

最初の質問が
>レコード型を用いて、入力された情報(氏名・住所・電話番号)は
>ID ごとに保存されるようにして、保存はメインフォームが閉じるまで
との事ですから、ファイルやDBは関係ないと思いますが。

編集 削除
Delphi初心者  2005-05-31 11:07:49  No: 15202  IP: 192.*.*.*

動的配列を使用して記述したらどうなるんですか?記述の仕方をできれば教えて
いただきたいんですが。すみません

編集 削除
HOta  2005-05-31 11:27:45  No: 15203  IP: 192.*.*.*

setlength(arrPsnData,10)
の様にします。
簡単にHelpを見れば判ることなのに、
自分で調べていないと、いつまでたっても覚えませんよ。

編集 削除
Syake  2005-05-31 11:46:51  No: 15204  IP: 192.*.*.*

レコード型の動的配列の宣言の仕方は以前の投稿を

動的配列では
最初はarrPsnData = nil の状態です。
(確保されていない)
また、 if arrPsnData = nil then がTrue
ならデータが無い状態として判断できます。
初期化したいときはこの逆で
arrPsnData := nil; です。

添え字(レコード数)を増やしたい時は
SetLength(arrPsnData,10);
で、確保できます。
一旦、確保した後に
SetLength(arrPsnData,20);
とした場合は、先程確保されていたデータは保持
されます。
逆に
SetLenght(arrPsnData,5);
少なくした場合は、添え字0〜4までのでーたはそのまま
ですが、5〜9までは消えてしまいます。(当たり前か)
※添え字は  必ず0から始まりますので注意を

で、確保した後の使用方法は通常の配列と同じです。
  arrPsnData[0].fID := 100;
  arrPsnData[1].fID := 101;
等と適当にやってください。

それと、以前私も怒られたのですが
https://www.petitmonte.com/bbs/answers?question_id=2526
に、注意してください。

まあ、取りあえずやってみてください。

編集 削除
りおりお  2005-05-31 18:38:56  No: 15205  IP: 192.*.*.*

> 以前私も怒られたのですが

いや、べつに怒ったわけではないですけど・・・・(笑

編集 削除