DELPHI7を使用しています。
初心者質問かもしれませんが、よろしくお願いします。
以下のソースは、簡略化したものです。
エクセルに出力したデータが文字化けをおこしてしまいます。
原因がわかる方いましたら、教えてください。
変数宣言
------------------------------------------------------
PIchiran = ^TIchiran;
TIchiran = record
Sys_Kbn: String[20];
Shinsain: String[5];
Kanji_Name: String[20];
Syosai_Cd: String[8];
FIchiran = Array of TIchiran;
A.UNIT
------------------------------------------------------
function TEST_A: Boolean;
var
IchiranArray : FIchiran;
i: Integer;
begin
//データベースより値を取得
while not Eof do
begin
SetLength(IchiranArray, Length(IchiranArray) + 1);
IchiranArray[i].Sys_Kbn := FieldByName('A').AsString;
IchiranArray[i].Shinsain := FieldByName('B').AsString;
IchiranArray[i].Kanji_Name := FieldByName('C').AsString;
IchiranArray[i].Syosai_Cd := FieldByName('D').AsString;
i := i + 1;
Next;
end;
//ポインタ受け渡し
TEST_B.pub_PIchiran := @IchiranArray;
end;
B.UNIT
------------------------------------------------------
public
{ Public宣言 }
pub_PIchiran : PIchiran;
procedure TEST_B;
var
i: Integer;
begin
with EWSheet do
begin
B.UNIT
------------------------------------------------------
public
{ Public宣言 }
pub_PIchiran : PIchiran;
procedure TEST_B;
var
i: Integer;
begin
with EWSheet do
begin
//エクセルにデータを出力する
Range['A1', 'A1'].Value := pub_PIchiran.Sys_Kbn;
Range['B1', 'B1'].Value := pub_PIchiran.Shinsain;
Range['C1', 'C1'].Value := pub_PIchiran.Kanji_Name;
Range['D1', 'D1'].Value := pub_PIchiran.Syosai_Cd;
Inc(pub_PIchiran);
i := i + 1;
end;
end;
> //ポインタ受け渡し
> TEST_B.pub_PIchiran := @IchiranArray;
ここで、IchiranArrayを外に出しているようですが、function TEST_Aの実行が終わった時点で、IchiranArrayは破棄されますよ。
返信ありがとうございました。
根本的に、間違っているのかも知れないのですが、
一応グローバル変数にしても文字化けしました。
気になってることがありまして、
ポインタの使い方は、あってますか??
そこから自信がないのですが・・・。
>一応グローバル変数にしても文字化けしました。
A.UNITのfunction TEST_A内の IchiranArray : FIchiran;を外に出したということですよね?
それならOKですが。
>ポインタの使い方は、あってますか??
Range['A1', 'A1'].Value := pub_PIchiran^.Sys_Kbn;
の様にします。
IchiranArray : FIchiran;
が動的配列になっていますね
//ポインタ受け渡し
TEST_B.pub_PIchiran := @IchiranArray;
ではなく
TEST_B.pub_PIchiran := @IchiranArray[0];
としてください。
回答ありがとうございました。
上記修正を行ったところ、エクセルにデータが出力されました。
貴重な時間を割いていただき、ありがとうございました。
ツイート | ![]() |