こんばんは。
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文をいくつ作成するかはその都度変わるので
ヘルプも見てみながら配列を使用してみたのですが。。
配列変数の宣言がおかしいのでしょうか?
お分かりになる方がいましたら、何卒宜しくお願いします。
用意した配列の中には、いくつの要素が入りますか?
この定義だと、その「いくつの要素が入るか」が定義されていません。
かといって、要素数を固定すると、その数しか納められません。
動的配列についてヘルプで引いてみてください。
//SetLengthは配列の数を指定
SetLength(DelStr, ArrNo);
こんな感じじゃなかったかな?@初心者
こんばんは。
にしのさん、のちょさん、ありがとうございます。
ヘルプを読んでやってみたのですがうまくいきません。。
{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 を配列に入れていく」
という動作をさせたいのですが。。
他に宣言しなくてはいけないものがあったりするのでしょうか?!
宜しくお願いします。
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;
これでどうでしょうか。
出来ました!
しゅうさん、迅速かつ的確な説明ありがとうございます。
配列の作り方が少し分かった気がします!
にしのさん、のちょさんもありがとうございました。
ツイート | ![]() |