BDS2006 pro
Xp pro
> が、CsvファイルをClientDataSetに取り込む方法が解りません。
> ClienDataSet1.Fields[0].****
このような形になると思います。
var
sl:TStringList;
csv:String;
begin
csv := '1000,suzuki,Tokyoy';
sl:=TStringList.Create ;
sl.Delimiter:=',' ;
sl.DelimitedText := csv;
with ClientDataSet1 do begin
Last;
Insert;
FieldByName('Number').AsInteger :=sl[0];
FieldByName('Name').AsString :=sl[1];
FieldByName('Address').AsString :=sl[2] ;
Post;
end;
sl.Free;
end;
Postの位置は別途考える必要があります。
//////////////////////////////////////////////////////////////////
EMAIL: oh...@digipub-net.com
HP : http://www.digipub-net.com/
Delphiに関するドキュメント補完サイト:
http://www.digipub.biz/11/ap/Book/DelphiSpace/pDelphiSpace.aspx
ECO(Enterprise Core Object)に関するドキュメント補完サイト:
http://www.digipub.biz/11/ap/Book/Eco/pEcoSpace.aspx
procedure TForm1.Button1Click(Sender: TObject);
var
sl:TStringList;
csv:String;
begin
csv := '1000,suzuki,Tokyoy';
sl:=TStringList.Create ;
sl.Delimiter:=',' ;
sl.DelimitedText := csv;
with ClientDataSet1 do begin
Last;
Insert;
FieldByName('Number').AsAsInteger :=sl[0]; *1
FieldByName('Name').AsString :=sl[1];
FieldByName('Address').AsString :=sl[2] ;
Post;
end;
sl.Free;
end;
これを実行すると
IntegerとStringには互換性がないとエラーが出ます
*1のAsIntegerをAsStringにするとコンパイルはできます。
コンパイル後、Button1をクリックすると
「データセットは閉じているため、この操作は実行できません」とメッセージが出ます。
で、Lastの前行にOpenを挿入すると
「ClientDataSet1 :データプロバイダ/パケットがありません」とエラーが出ます。
どうすればいいのか
申し訳ありませんが、教えていただけませんか。
なお、ClientDataSet1 の右クリックから項目の新規作成で「Number」を作成しています
大津です。
> FieldByName('Number').AsAsInteger :=sl[0]; *1
はうっかりしていました。StrToInt()などで、整数化する必要がありました。
サンプルプログラムは、すでにClientDataSet1がデータベースやローカルファ
イルに結合している前提で書いています。以下のエラーは、それができていない
ことによると思われます。
> で、Lastの前行にOpenを挿入すると
> 「ClientDataSet1 :データプロバイダ/パケットがありません」とエラーが出ます。
>
またCSVファイルに出力した元のClientDataSet1のフィールド定義があるはず
なので、それに合わせて
FieldByName('XXXXX').AsXXXXXXX
を設定し、まずOpenしてから、サンプルのようなプログラムを実行することに
なります。
CSVファイル自体は、StringList.LoadFromFileか何かで読み込み、一行ずつ読
み込む処理をループさせればいいと思います。
*************************************
大津 修一
Shuichi Ohtsu
EMAIL: oh...@digipub-net.com
HP : http://www.digipub-net.com/
Delphiに関するドキュメント補完サイト:
http://www.digipub.biz/11/ap/Book/DelphiSpace/pDelphiSpace.aspx
ECO(Enterprise Core Object)に関するドキュメント補完サイト:
http://www.digipub.biz/11/ap/Book/Eco/pEcoSpace.aspx
*************************************
> サンプルプログラムは、すでにClientDataSet1がデータベースやローカルファ
> イルに結合している前提で書いています。以下のエラーは、それができていない
> ことによると思われます。
> またCSVファイルに出力した元のClientDataSet1のフィールド定義があるはず
> なので、それに合わせて
ClientDataSet1に単独で任意の(他のアプリケーションソフト(Excelなど)で吐き出した)
csvファイルの内容をセットしたいのです。
> CSVファイル自体は、StringList.LoadFromFileか何かで読み込み、一行ずつ読
> み込む処理をループさせればいいと思います。
そのようにしようと思っています。
任意のcsvファイルなのでフィールド名は
F1...F10...Fn
などとしたいと思っています。
> サンプルプログラムは、すでにClientDataSet1がデータベースやローカルファ
>イルに結合している前提で書いています。以下のエラーは、それができていない
>ことによると思われます。
ADOConnectionなどを利用せずに、ClientDataSet1だけにcsvファイルの
内容をClientDataSet1にとりこみたいのですが。????不可能
大津です。
>
> ADOConnectionなどを利用せずに、ClientDataSet1だけにcsvファイルの
> 内容をClientDataSet1にとりこみたいのですが。????不可能
>
>
予めClientDataSet1のフィールド属性が決まらないのであれば、とりあえずす
べてをStringとし、必要フィールド数だけ定義しておきます。
次にこれをローカルファイルに反映させておきます。これは以下のように新た
なローカルファイル(XMLファイル)を作成します。
procedure TfrmMain.btnMakeThemeTbXmlClick(Sender: TObject);
begin
try
ClientDataSet1.Close;
except
end;
if SaveDialog1.Execute then begin
if FileExists(SaveDialog1.FileName) then begin
ShowMessage('同名のファイルがすでに存在します。'
+#13+'違うファイル名を選択してください');
exit;
end;
ClientDataSet1.FileName:= SaveDialog1.FileName;
ClientDataSet1.CreateDataSet;
ClientDataSet1.SaveToFile(ClientDataSet1.FileName);
ClientDataSet1.Close;
end;
end;
次にこのローカルファイルを再度オープンし、前回お示ししたような方法で読
み込めばいいと思います。