レコード型を用いて、入力された情報(氏名・住所・電話番号)は
ID ごとに保存されるようにして、保存はメインフォームが閉じるまで
にしたいのですが、どのようにしたらよいのですか?皆さんお忙しいとは
思いますが宜しくおねがいします
例えば
Type
TPersonData = record
fID :Integer;
fName :String;
・
・
end;
で、宣言します
後は変数を宣言するだけ
var
arrPsnData :array of TPersonData; //動的配列として
または
arrPsnData :array[0..99] of TPersonData; //静的配列として
です。
ちなみに、FormなどUnitをまたいで使用される場合で
グローバル変数を使わずに、関数や手続きの引数や戻
り値として使用したい場合は、共通で使うUnitを新規
作成してそこに宣言してから、各使用するUnitの
interface節にUsesして使用した方使い勝手が良いかな。
ひつこいです。
ちなみに、Dのバージョンによっては
レコード型動的変数で
aaa := arrPsnData[i].fID 等の記述
の際には fID 等のフィールド名が候補に
挙がってこない事がありますが、気に
せず使ってください。
D6かD7までは出てきてたのに・・・
> 保存はメインフォームが閉じるまで
> にしたいのですが、どのようにしたらよいのですか?
保存の仕方を質問しているのでは?
>保存の仕方を質問しているのでは?
保存の仕方???
Publicにでも、配列変数を宣言してから
変数に値を入れたらメインフォームを閉
じるまでは保持しますよね。
って、ことですか?
いきなりすみません。Public以外はないのですか?
ふ〜む。
Publicにしたのは、他のユニットからでも参照できるのでそうしただけです。
ただ、グローバル変数になってしまうので、個人的にはお勧めしません。
Form1内つまりUnit1内だけで各手続きなどで共通して使用するだけなら
Privateでも構いませんし、
implementation
uses ・・・;
var
//ここに宣言
でも構いません。
が、後者はあまり使用しません。
また、単一の手続き内だけで使用するなら手続き内に宣言しても良いです。
procedure TForm1.ButtonOnClick(Sender :TObject);
var
//ここに宣言
begin
もっとも複数のユニット間で使用するがグローバル変数を使いたくないとか、
単一ユニットだがPrivateにも宣言したくなかったら別に方法もありますが。
保存の仕方というと、ファイルやデータベースへの保存の話かな?と
思うのですが、配列の宣言の仕方ということで宜しいのでしょうか?
最初の質問が
>レコード型を用いて、入力された情報(氏名・住所・電話番号)は
>ID ごとに保存されるようにして、保存はメインフォームが閉じるまで
との事ですから、ファイルやDBは関係ないと思いますが。
動的配列を使用して記述したらどうなるんですか?記述の仕方をできれば教えて
いただきたいんですが。すみません
setlength(arrPsnData,10)
の様にします。
簡単にHelpを見れば判ることなのに、
自分で調べていないと、いつまでたっても覚えませんよ。
レコード型の動的配列の宣言の仕方は以前の投稿を
動的配列では
最初は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
に、注意してください。
まあ、取りあえずやってみてください。
> 以前私も怒られたのですが
いや、べつに怒ったわけではないですけど・・・・(笑
ツイート | ![]() |