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


Delphi初心者  2005-05-30 21:05:27  No: 15192

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


Syake  2005-05-30 22:44:45  No: 15193

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

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

です。


Syake  2005-05-30 22:55:29  No: 15194

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


Syake  2005-05-30 23:04:51  No: 15195

ひつこいです。

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


えーと  2005-05-31 00:42:40  No: 15196

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

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


Syake  2005-05-31 01:30:07  No: 15197

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

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

って、ことですか?


えーて  2005-05-31 03:43:30  No: 15198

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


Syake  2005-05-31 04:36:02  No: 15199

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

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

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

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


ななし  2005-05-31 05:11:12  No: 15200

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


Syake  2005-05-31 05:16:43  No: 15201

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


Delphi初心者  2005-05-31 20:07:49  No: 15202

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


HOta  2005-05-31 20:27:45  No: 15203

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


Syake  2005-05-31 20:46:51  No: 15204

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

動的配列では
最初は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-06-01 03:38:56  No: 15205

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

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


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

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






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