procedure TMainForm.BtndataloadClick(Sender: TObject);
var
tmp_write : String;
tmp_jumin_no : String;
tmp_reg_date : String;
tmp_st_gubun : String;
tmp_name_han : String;
tmp_bf_dpt : String;
tmp_nw_dpt : String;
tmp_home_addr : String;
tmp_file_num, tmp_size, tmp_chek : Integer;
b_chek : BOOLEAN;
begin
is_file_name := DirectoryListBox1.Directory;
is_file_name := is_file_name + '\' + edit2.Text;
Oraquery2.Close;
Oraquery2.SQL.Clear;
ORaquery2.SQL.Add('SELECT JUMIN_NO, REG_DATE, ST_GUBUN, NAME_HAN, BF_DPT, NW_DPT, HOME_ADDR ');
Oraquery2.SQL.Add('FROM 01 ');
Oraquery2.sql.Add('WHERE JUMIN_NO = :ls_jumin_no ');
Oraquery2.ParamByName('ls_jumin_no').AsString := is_jumin_no;
Oraquery2.ExecSQL;
Oraquery2.Active := true;
IF FileExists(is_file_name) THEN
DeleteFile(pChar(is_file_name));
tmp_file_num := FileCreate(is_file_name);
IF tmp_file_num < 0 THEN
begin
Messagedlg('파일오픈 오류', mterror, [mbok], 0);
FileClose(tmp_file_num);
exit;
end;
Oraquery2.First;
While not Oraquery2.Eof do
begin
tmp_jumin_no := Oraquery2.FieldByName('jumin_no').AsString;
tmp_reg_date := Oraquery2.FieldByName('reg_date').AsString;
tmp_st_gubun := Oraquery2.FieldByName('st_gubun').AsString;
tmp_name_han := Oraquery2.FieldByName('name_han').AsString;
tmp_bf_dpt := Oraquery2.FieldByName('bf_dpt').AsString;
tmp_nw_dpt := Oraquery2.FieldByName('nw_dpt').AsString;
tmp_home_addr := Oraquery2.FieldByName('home_addr').AsString;
tmp_write := tmp_jumin_no + ',' + tmp_reg_date + ',' + tmp_st_gubun + ',' +
tmp_name_han + ',' + tmp_bf_dpt + ',' + tmp_nw_dpt + ',' +
tmp_home_addr;
tmp_size := Length(tmp_write);
tmp_chek := FileWrite(tmp_file_num, tmp_write, tmp_size);
IF tmp_chek < 0 THEN
begin
Messagedlg('파일쓰기 오류', mterror, [mbok], 0);
FileClose(tmp_file_num);
exit;
end;
Oraquery2.Next;
end;
FileClose(tmp_file_num);
Messagedlg('파일생성 성공', mtInformation, [mbok], 0);
end;
파일은 제위치에 생성이 되는데 filewrit해서 파일을 열어보면 내용이 깨져서 나옵니다.
그리고 보통 filewrite에서 라인모드로 입력할지 아닐지 정하는것 같기도 한데(?)
전부 한줄로 이어져서 뿌려지네여. (데이터는 5줄)
하루종일 인터넷 찾고 책찾다가 안되서 도움요청합니다. ^^
아래와 같이 고치세요...
tmp_chek := FileWrite(tmp_file_num, tmp_write, tmp_size);
==>tmp_chek := FileWrite(tmp_file_num, tmp_write[1], tmp_size);
FileOpen, FileWrite, FileClose등과 같은 함수들은 라인모드(?), Text, Binary 같은 구분이 없습니다. 쓴대로 써질뿐입니다. 줄바꿈이 필요하면 줄바꿈기호도 직접 넣어주셔야 합니다.
줄바꿈은... Carriage Return + Line Feed
tmp_write에 데이터 넣을때 CR+LF를 추가해주시면 되죠...
tmp_write := tmp_jumin_no + ',' + tmp_reg_date + ',' + tmp_st_gubun + ',' +
....
tmp_home_addr + #13#10;
FileOpen, FileWrite, FileClose같은 함수들은 가장 저수준의 입출력함수들이고, 이 외에 비슷한 저수준의 함수로 AssignFile, Reset, Rewrite, WriteLn, CloseFile등이 있고, CreateFile, OpenFile, ReadFile등과 같은 API 함수들도 있습니다. TFileStream과 같이 객체화된서 사용하기 편한것들도 있죠...
또한 이런 경우는 TStringList를 쓰셔서 간단히 할 수도 있습니다.
^^ 항상 즐코하세요...