配列変数に格納

解決


さばたん  2003-01-23 03:26:23  No: 2660

こんばんは。

TForm1.FormShow にて、 ArrNo := 0; として
procedure TForm1.MyPro;
var
  ArrNo: Integer;
  DelStr: array of String;
begin
  with DM.Query1 do
  begin
    try
      Close;
      SQL.Clear;
      SQL.Add(' UPDATE test_tbl ');
      SQL.Add(' SET column = 100 ');
      SQL.Add(' WHERE code =  1 ');
      DelStr[ArrNo] := SQL.Text;          //←ココでエラーとなってしまいます
    except
      DBErrFlg := 1;
      raise;
    end;
  end;
  ArrNo := ArrNo + 1;
end;

UPDATE文を作成し、配列変数に入れておき(ココ部)、
後でまとめて ExecSQL; させようとしているのですがうまく出来ず困っています。
UPDATE文をいくつ作成するかはその都度変わるので
ヘルプも見てみながら配列を使用してみたのですが。。
配列変数の宣言がおかしいのでしょうか?

お分かりになる方がいましたら、何卒宜しくお願いします。


にしの  2003-01-23 03:46:10  No: 2661

用意した配列の中には、いくつの要素が入りますか?
この定義だと、その「いくつの要素が入るか」が定義されていません。
かといって、要素数を固定すると、その数しか納められません。

動的配列についてヘルプで引いてみてください。


のちょ  2003-01-23 21:34:45  No: 2662

//SetLengthは配列の数を指定
SetLength(DelStr, ArrNo);
こんな感じじゃなかったかな?@初心者


さばたん  2003-01-25 04:00:40  No: 2663

こんばんは。
にしのさん、のちょさん、ありがとうございます。

ヘルプを読んでやってみたのですがうまくいきません。。

{TForm1.FormShow}で、
  ArrNo := 0;
{type - Public宣言部}で、
  ArrDelStr: array of String;

procedure TForm1.MyPro(var TestCode: AnsiString);
var
  ArrNo: Integer;
  Str: String;
begin
  SetLength(ArrDelStr,ArrNo);
  ArrDelStr[ArrNo] := TestCode;  //←ココでエラー
  ArrNo := ArrNo + 1;
end;

「MyPro を呼び出したときに、TestCode を配列に入れていく」
という動作をさせたいのですが。。
他に宣言しなくてはいけないものがあったりするのでしょうか?!

宜しくお願いします。


しゅう  2003-01-25 04:26:26  No: 2664

SetLength(ArrDelStr,ArrNo);
  ArrDelStr[ArrNo] := TestCode;  //←ココでエラー

ここで、例えばArrNo=3の場合、ArrDelStrの要素数は3個になりますが、
ArrDelStr[0]
ArrDelStr[1]
ArrDelStr[2]
と、作成されます。
このように動的な要素数の開始数字は0からになっているため、
   ArrDelStr[ArrNo]
は,
   ArrDelStr[3]
となり、エラーが出ます。
これを、
   ArrDelStr[ArrNo-1]
とすればokです。

また、length(ArrDelStr)とすればArrDelStrの今の要素数を知ることができるため、ArrNoを作らなくても、

  SetLength(ArrDelStr,length(ArrDelStr)+1)

とすれば要素数をひとつ増やすことができます。
まとめると、

{type - Public宣言部}で、
  ArrDelStr: array of String;

procedure TForm1.MyPro(var TestCode: AnsiString);
begin
  SetLength(ArrDelStr,length(ArrDelStr)+1)
  ArrDelStr[high(ArrDelStr)] := TestCode;  
end;

これでどうでしょうか。


さばたん  2003-01-25 04:58:08  No: 2665

出来ました!
しゅうさん、迅速かつ的確な説明ありがとうございます。
配列の作り方が少し分かった気がします!

にしのさん、のちょさんもありがとうございました。


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

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






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