【T6】Delphiテクニカルセッション「知って得する！現役ヘルプデスクが答えるDelphiテクニカルエッセンス4.0」
株式会社ミガロ. RAD事業部 技術支援課 課長
吉原 泰介

アジェンダ• ミガロ.について• よくある問合せQ&A■Q1. WEBサービスを利用するには？
■Q2. ガントチャートを実装するには？
■Q3. EXE間でパラメータを受渡しするには？
■Q4. CSVファイルをTTableで読み込むには？

• まとめ

ミガロ.について
株式会社ミガロ. －A 100% IBM i Company－
ミガロについて
会社情報
会社情報
所在地：本社 大阪市浪速区湊町2-1-57
所在地：本社 大阪市浪速区湊町2-1-57
難波サンケイビル13F
難波サンケイビル13F
東京事業所 東京都港区麻布台1-4-3
東京事業所 東京都港区麻布台1-4-3
エグゼクティブタワー麻布台11F
エグゼクティブタワー麻布台11F
事業内容
事業内容
IBM i 向けのソフトウェア・ツール販売および技術サポート
IBM i 向けのソフトウェア・ツール販売および技術サポート【開発ツール】【災害対策ソフト】【開発ツール】【災害対策ソフト】
・Delphi/400
・*noMAX・Delphi/400
・*noMAX・JACi400
・JACi400【アプリケーション･ライフサイクル・マネージメント】【アプリケーション･ライフサイクル・マネージメント】
・MKS
・MKS

• Delphi/400• DelphiをIBM iに完全対応させたミドルウェア• 国内約630社、全世界約5,000社の導入実績

よくある問合せQ&A■Q1. WEBサービスを利用するには？

【Q1】WEBサービスを利用するには？
【質問】
DelphiからWEBサービスの情報を取得することはDelphiからWEBサービスの情報を取得することはできますか？
できますか？
【回答】
TIｄHTTPコンポーネントを利用することでWEBサービス
TIｄHTTPコンポーネントを利用することでWEBサービスの結果のリソースを取得することが可能です。
の結果のリソースを取得することが可能です。
またXMLデータバインディング機能を使用するとまたXMLデータバインディング機能を使用すると取得したリソースをクラスで扱うこともできます。
取得したリソースをクラスで扱うこともできます。

■Q1. WEBサービスを利用するには？

 WEBサービスについて• インターネットの技術を活用し、遠隔サイトにあるアプリケーションの機能をネット
ワークを通じて利用できるようにしたものをWEBサービスという¾ データのやり取りにXMLを使用する¾ WEBサービスのアクセス手段にはSOAPとRESTが存在する

 SOAPとREST• クライアントとWEBサービスサーバーとの間をSOAPメッセージというXMLでやり取りする方式をSOAPという¾ WEBサービスを使用するためのルールが記述されたXML（WSDL）を使用し、通信を行なう• URLを指定しWEBサービスサーバーにアクセスすると結果がXML形式で返却される方式をRESTという¾ WEBサービスヘのアクセスが、URLのみで仕組みがシンプルである
REST方式WEBサービス

URL

リクエスト（URL)

レスポンス（HTTP/XML)XML

■Q1. WEBサービスを利用するには？

RESTを提供するWEBサービス• 当初WEBサービスといえば、SOAPが主流であったが、近年容易に扱えるRESTの利用が多くなっている• Yahoo!やGoogle、アマゾンといったサイトがREST式のWEBサービスを提供している
参考：Yahoo!デベロッパーネットワーク例）Yahoo! 検索 WEBサービス
http://developer.yahoo.co.jp/
キーワード “migaro” で問い合わせを実施【リクエストURL】
http://search.yahooapis.jp/WebSearchService/V1/webSearch?appid=<アプリケーシ
ョンID>&query=migaro【レスポンスXML】

■Q1. WEBサービスを利用するには？

WEBサービス利用サンプルプログラムの作成• Yahoo!ニュースを提供するREST型WEBサービスにアクセスし情報を取得する¾HTTPクライアントを実装するTIｄHTTPコンポーネントを使用する。
¾URLを指定して、結果のリソースを取得するには、Getメソッドを使用する。

IdHTTP1:
TIdHTTPprocedure TForm1.btnGetClick(Sender: TObject);const
cCMD = 'http://news.yahooapis.jp/NewsWebService/V1/Topics'+ ‘?appid=<アプリケーションID>‘;
var
sData: String;
Yahoo!ニュース
begin
リクエストURL//URLを指定して実行結果を取得
sData := IdHTTP1.Get(cCMD);//文字コードを変換 (UTF8->Ansi)//sData := Utf8ToAnsi(sData);//取得結果をメモコンポーネントに表示※アプリケーションIDは、Yahoo!デベロッ
パーネットワークより取得する

Memo1.Lines.Text := sData;end;

結果リソース(XML)取得
Delphi2007以前は
AnsiStringに変換

■Q1. WEBサービスを利用するには？

WEBサービス利用サンプルプログラムの実行
結果セットが<ResultSet>タグに出力
totalResultsReturned=取得件数

最新のYahoo!ニュース情報がXML文書として出力1件のニュースが<Result>タグに出力<datetime>：更新日時<title>：トピックのタイトル<category>：カテゴリ<url>：関連するURL■Q1. WEBサービスを利用するには？

 XMLについて• XML文書はHTMLと同じマークアップ言語と呼ばれ、タグにより情報の意味や構造を定義したテキスト文書である¾ HTMLと異なり、XMLはタグ自体の意味を自由に定義できるのが特徴である• XML文書が使用するタグや構造を定義したものをXMLスキーマという¾ XMLスキーマ(.xsd)自体もXMLにて記述されている
参考：Yahoo!ニュースWEBサービス
http://developer.yahoo.co.jp/webapi/
news/news/v1/topics.html

■Q1. WEBサービスを利用するには？

 DelphiによるXML文書の取り扱い• XMLスキーマを取込みDelphiコードで読み書き可能なクラスを作成することが可能である• XMLデータバインディングを使用すれば、クラスを自動生成できる

WEBサービス提供サーバー

Delphi
アプリ

URL

クラス

XML文書
XMLデータバインディング

RESTサービス

■Q1. WEBサービスを利用するには？

サンプルプログラムの改良• XMLをDelphiコードで利用可能にする為に、XMLデータバインディングを使用する【設定手順】 １．新規作成⇒その他を選択
２．XMLフォルダのXMLデータバインディングを選択
３．ソースコード欄にXSDファイルを指定（図１)４．ウィザードを進み、データバインディングの設定を保存しないに設定し(図2) 、完了【図1】

Yahoo!ニュース XMLスキーマ
http://news.yahooapis.jp/
NewsWebService/V1/Topics.xsd【図2】

設定を保存しないを選択■Q1. WEBサービスを利用するには？

 WEBサービス利用サンプルプログラムの作成• RESTにて取得したXML文書をデータバインディングにより作成したクラスを使用しDelphiソースで情報を取得する¾ XML文書をDelphiで取り扱うには、TXMLDocumentコンポーネントを使用する¾ XMLデータバインディングで生成された
newsyahooapisjpNewsWebServiceV1Topics
ユニットにあるGetResultSet関数にXML文書をセットすると情報にアクセス可能になる
TXMLDocument

OnClickイベント

ウィザードにより生成されたユニット■Q1. WEBサービスを利用するには？

WEBサービス利用サンプルプログラムソース
XMLデータバインディングにて作成されたユニットを追加

uses newsyahooapisjpNewsWebServiceV1Topics;
procedure TForm1.btnGetClick(Sender: TObject);const
cCMD = 'http://news.yahooapis.jp/NewsWebService/'+ ' V1/Topics?appid=<アプリケーションID>';
var
i: Integer;sData: String;
AXMLResultSet: IXMLResultSet; //結果セット
AXMLResult: IXMLResult;//１件の結果
begin//メモコンポーネントをクリアする
Memo1.Clear;//URLを指定して実行結果を取得
sData := IdHTTP1.Get(cCMD);

XMLDocumentにロードし、オブジェクトとして使用可能にする//取得結果をXMLコンポーネントにセット
XMLDocument1.LoadFromXML(sData);//XML結果セットの取得
AXMLResultSet := GetResultSet(XMLDocument1);
ＸＭＬをセットし、結果セットとして操作できるようにする//結果セットより取得した件数分情報を取得する
for i := 0 to
AXMLResultSet.TotalResultsReturned - 1 do
begin//１件の情報を取得する
AXMLResult := AXMLResultSet.Result[i];//メモコンポーネントに件名をセットする。
Memo1.Lines.Add(AXMLResult.Title);
end;
end;

■Q1. WEBサービスを利用するには？

WEBサービス利用サンプルプログラムの実行取得したXML文書を解析し、取得したニュース件数分のタイトルをリスト出力■Q2. ガントチャートを実装するには？

【Q2】ガントチャートを実装するには？
【質問】
工程管理のスケジュールをチャート化したいのですが工程管理のスケジュールをチャート化したいのですが見栄えの良いガントチャートは作成できますか？
見栄えの良いガントチャートは作成できますか？
【回答】
ガントチャートはTDBChartにも用意されていますがガントチャートはTDBChartにも用意されていますがTStringGridやTPanelを工夫しても見易いチャート
TStringGridやTPanelを工夫しても見易いチャートを作成することができます。
を作成することができます。

■Q2. ガントチャートを実装するには？

 ガントチャートの実装方法• トランザクションデータから工程スケジュールの情報を取得し、そのデータに基づくガントチャートをTStringGridを土台に
TPanleを動的に生成することで作成する

工程スケジュール
データ

TStringGrid

位置を計算して動的にCreate
TPanelTPanel■Q2. ガントチャートを実装するには？

チャート実装サンプルプログラムの作成• チャート出力位置、サイズを指定する入力欄とチャートを出力するTStingGridを画面に配置したフォームを作成する¾StringGridのセル幅、セル高さ、行数、列数を設定する

btnSetPanel:
TBitBtn

spedtX:
TSpinEdit
spedtY:TSpinEdit
spedtLength:
TSpinEdit

StringGrid1: TStringGrid

■Q2. ガントチャートを実装するには？

チャート実装サンプルプログラムソース
private{ Private 宣言 }FPanelCount: Integer;

ＳｔｒｉｎｇＧｒｉｄのセルサイズと画面指定
した位置、サイズによりパネルの出力
位置、幅、高さを算出

パネル数をカウント
するグローバル変数

procedure TfrmSample.BtnSetPanelClick(Sender: TObject);var
Panel: TPanel;
begin

Width := (StringGrid1.DefaultColWidth + 1)
* spedtLength.Value;//表示文字列指定
Caption := 'サンプル' + IntToStr(FPanelCount);//パネル表示カウンターをインクリメントする//コンポーネント名指定

Inc(FPanelCount);

Name//パネル表示処理 (パネルを動的にCreateする)Parent := StringGrid1;

Panel := TPanel.Create(Application);with Panel do
begin

Color

//パネル表示位置指定
Left:= (StringGrid1.DefaultColWidth + 1)
* (spedtX.Value - 1);
Top:= ((StringGrid1.DefaultRowHeight + 1)
* (spedtY.Value - 1)) + 3;
Height := StringGrid1.DefaultRowHeight - 6;:= 'Panel' + IntToStr(FPanelCount);//親コンポーネントの指定//パネルの色指定:= clAqua;//パネルの再描画
Invalidate;
end;
end;

PanelのNameにPanel1,Panel2・・・と名付ける■Q2. ガントチャートを実装するには？

チャート実装サンプルプログラムの実行
チャートを描画する横軸、縦軸、長さを指定してボタンをクリック

指定した位置と長さにもとづくチャートが描画

■Q2. ガントチャートを実装するには？

 ガントチャートのExcel出力• 画面同様にExcelのマクロ（VBA)をDelphiから操作することによりガントチャートのExcel出力を行う
工程スケジュール
データ

マクロ
(VBA)

Excel

オートシェープ
オートシェープ

位置を計算して動的にCreate■Q2. ガントチャートを実装するには？

Ｅｘｃｅｌ出力サンプルプログラムの作成• DelphiよりＯＬＥオートメーションにてExcelを操作し、チャートを作成する¾テンプレートとなるExcelを用意し、予めチャートを図形として描画するマクロ(VBA)を埋め込んでおく¾Delphiよりパラメータを指定してマクロを実行することで、チャートを描画する【図形を描画するVBA】例
メソッド名：ExcelOutChart
OLEでマクロ実行
Excel.Application.Run

テンプレートExcel(マクロ付)
Sample.xls

引数にて指定したセルの開始
位置、終了位置にもとづき、図形(チャート）を描画

■Q2. ガントチャートを実装するには？

 Ｅｘｃｅｌ出力サンプルプログラムの作成• マクロを含むExcelテンプレートに直接データ作成後、新しいブックに作成したシートをコピーして保存し、テンプレートのExcelは変更を保存せずに終了する¾ マクロを含むExcelをテンプレートとする場合、ファイルコピーしたExcelを使って作成するとマクロを含むExcelが完成し、Excelをユーザーが開く際にマクロ警告が発生してしまう(図1)¾ 新しいブックに作成したシートのみをコピーすると、マクロはコピーされない為、警告が発生しなくなる（図2）
マクロを含むExcelテンプレート
空のExcel
ブック
ファイル
COPY

チャート
作成

チャート
作成

シート
COPY

保存

【図1】

マクロを含む
Excelが完成

【図2】

保存
しない

保存

マクロを
含まない
Eecelが完成

■Q2. ガントチャートを実装するには？

Ｅｘｃｅｌ出力サンプルプログラムソース
procedure TfrmSample.btnExcelOutClick(Sender: TObject);const
cFormatFNM = 'Sample.xls';
var
i: Integer;
sSourceFile, sCopyFile: String;Excel, WorkBook1, WorkBook2, WorkSheet1, WorkSheet2: Variant;
begin//コピー元ファイルの指定
sSourceFile := ExtractFilePath(Application.ExeName)+ cFormatFNM;//ファイル名の決定
sCopyFile := ExtractFilePath(Application.ExeName) +FormatDateTime('YYYYMMDDHHMMSS',Now) + '.xls';//エクセルの起動
Excel := CreateOleObject('Excel.Application');
OLEでExcel起動//コピー元のExcelをオープンする
WorkBook1 := Excel.WorkBooks.Open(FileName :=sSourceFile, ReadOnly := False);//表示の有無
Excel.Visible := False;//アラートを非表示にする
Excel.Application.DisplayAlerts := False;// Sheet1 を選択
WorkSheet1 := WorkBook1.Worksheets['Sheet1'];// シートをアクティブにする
WorkSheet1.Activate;//データの書き出し(マクロの実行）
Excel.Application.Run('ExcelOutChart',
spedtX.Value,
spedtY.Value,
spedtLength.Value,
55,'サンプル');
ExcelOutChart
プロシージャーを実行
横軸、縦軸、長さ、色キャプションを渡す＜次ページに続く＞

■Q2. ガントチャートを実装するには？

Ｅｘｃｅｌ出力サンプルプログラムソース
コピー先のブックを保存し、テンプレートのブックは保存せずに終了//コピー先のファイルを開く
WorkBook2 := Excel.WorkBooks.Add;//Sheetを1つだけ残して他を削除

新しいブックを作成

for i := 0 to WorkBook2.Sheets.Count - 2 do
begin
WorkSheet2 := WorkBook2.WorkSheets[1];
WorkSheet2.Delete;
新しいブックの最終シート
end;//コピーの実行の後ろに、テンプレートのシートをコピーWorkSheet2 := WorkBook2.WorkSheets[Workbook2.Sheets.Count];
WorkBook1.WorkSheets[1].Copy( ,WorkSheet2);//残っているSheetを削除
WorkSheet2 := WorkBook2.WorkSheets[1];
WorkSheet2.Delete;//コピー先ファイルの保存
WorkBook2.SaveAS(sCopyFile);//コピー元Excelを保存せずに終了する
WorkBook1.Close;//エクセルを表示する
Excel.Application.DisplayAlerts := True;
Excel.Visible := True;end;■Q2. ガントチャートを実装するには？

Ｅｘｃｅｌ出力サンプルプログラムの実行

チャート(図形)が描画された
マクロを含まないExcelが開く■Q2. ガントチャートを実装するには？

応用した工程管理スケジュール
プロジェクト、担当者ごとの作業工程状況がチャートとして出力

工程負荷状況一覧表として、
Excelに出力■Q3. EXE間でパラメータを受渡しするには？

【Q3】EXE間でパラメータを受渡しするには？
【質問】
起動中のアプリケーション間でパラメータを受け渡して起動中のアプリケーション間でパラメータを受け渡して処理を行うことはできますか？
処理を行うことはできますか？
【回答】
アプリケーション間で通信を行う手法は色々ありますが、
アプリケーション間で通信を行う手法は色々ありますが、
WM_COPYDATAというWindowsMessageを利用
WM_COPYDATAというWindowsMessageを利用すると簡単に値の受渡しが行えます。
すると簡単に値の受渡しが行えます。

■Q3. EXE間でパラメータを受渡しするには？

 パラメータ（メッセージ）送信サンプルプログラムの作成【送信元アプリケーション】①WM_COPYDATA を利用してメッセージを送信する場合、送信先のWindowHandleを取得する②次に送信する情報をTCopyDataStruct 構造体に設定する
TCopydatastruct
TCopydatastruct
dwDatadwData任意の32ビット値
任意の32ビット値
cdData
送受信するデータのサイズ(バイト数)
cdData 送受信するデータのサイズ(バイト数)
lpDatalpData 送受信するデータのポインタ送受信するデータのポインタ③WM_COPYDATAをメッセージ送信する

■Q3. EXE間でパラメータを受渡しするには？

 パラメータ（メッセージ）送信サンプルプログラムソース
procedure TForm1.Button1Click(Sender: TObject);
Delphi2007以前とvar
2009以降で扱いがhWindow : HWND;
変わるもの
CDS : TCOPYDATASTRUCT;[V2009～]
SendStr : String;
String:UnicodeString
begin
Char:WideChar//送信先ウィンドウハンドルの取得
Pchar:PWideChar①送信先のWindowHandleを取得する
hWindow := FindWindow('TForm2',nil);
SendMessage:（ここではTForm2）
if (hWindow < 1) thenSendMessageW
begin
exit;
[～V2007]end;
String:AnsiString//画面入力値(ここではEdit1の文字列)
Char:AnsiChar②送信する情報をCopyDataStruct 構造体に設定
SendStr := Edit1.Text + #0;
Pchar:PAnsiChar
バイトサイズはWideCharの場合Lengthのみで//任意の値
SendMessage:
算出しないように注意
CDS.dwData:=999;
SendMessageA
もしくはByteLengthで取得する(Delphi2009)//バイトサイズ
CDS.cbData:=Length(SendStr) * sizeof(Char);//送信文字列
CDS.lpData:=PChar(SendStr);③WM_COPYDATAをメッセージ送信する//メッセージ送信
SendMessage(hWindow,WM_COPYDATA,Self.Handle,LPARAM(Addr(CDS)));end;

■Q3. EXE間でパラメータを受渡しするには？

 パラメータ（メッセージ）の受信サンプルプログラムソース【受信側アプリケーション】①WM_COPYDATA を受け取るためのメッセージハンドラを作成②受け取ったパラメータ（メッセージ）を処理
private{ Private 宣言 }procedure WMCopyMessage(var WMCopyData: TWMCopyData);
message WM_COPYDATA;・①WM_COPYDATA を受け取るためのメッセージハンドラを作成
・
procedure TForm2.WMCopyMessage(var WMCopyData: TWMCopyData);
var
ReceiveStr: String;
begin//受け取ったパラメータ（メッセージ）を処理
ReceiveStr:=PChar(WMCopyData.CopyDataStruct.lpData);
Edit1.Text:=ReceiveStr;②受け取ったパラメータ（メッセージ）を処理
end■Q3. EXE間でパラメータを受渡しするには？

 アプリケーション間のパラメータ（メッセージ）の送受信【送信側アプリケーション】【受信側アプリケーション】
message

同様にアプリケーション間でメッセージで同期をとるような動作も可能

message

レコード移動ごとに現在の情報を送信受信した情報を元にデータを読込み

■Q4. CSVファイルをTTableで読み込むには？

【Q4】CSVファイルをTTableで読み込むには？
【質問】
CSVファイルをTTableで読み込むことはできませんか？
CSVファイルをTTableで読み込むことはできませんか？
【回答】
TTableでCSVファイルやTXTファイルを読み込むことは
TTableでCSVファイルやTXTファイルを読み込むことは可能です。ただしCSVファイル自体にはテーブルとしての可能です。ただしCSVファイル自体にはテーブルとしての構造定義が存在しないのでスキーマファイルを用意する必構造定義が存在しないのでスキーマファイルを用意する必要があります。
要があります。

■Q4. CSVファイルをTTableで読み込むには？

TTableでCSVファイルを読み込む• CSVファイルをTTableコンポーネントで読み込むには、以下のようにプロパティを設定する

DataBaseName:
CSVファイルのパス

TableType:
ttASCII

TableName:
CSVファイル名■Q4. CSVファイルをTTableで読み込むには？

TTableでCSVファイルを読み込む• 例えば[地域、店舗名、住所、電話番号]のデータを持つ
CSVファイルをそのまま読み込んでみる

Sample.csv
Sample.csv
北海道,○×店,札幌市○×区１－１,xxx-xxx-xxxx
北海道,××店,札幌市××区２－２,xxx-xxx-xxxx
北海道,△△店,札幌市△△区３－３,xxx-xxx-xxxx
北海道,○○店,札幌市○○区２－１,xxx-xxx-xxxx
北海道,×○店,札幌市×○区１－４,xxx-xxx-xxxx
北海道,△×店,札幌市△×区３－２,xxx-xxx-xxxx
北海道,○△店,札幌市○△区１－１,xxx-xxx-xxxx
北海道,○×店,旭川市○×１－２,xxx-xxx-xxxx
北海道,××店,旭川市××４－２,xxx-xxx-xxxx
北海道,○×店,小樽市○×３－３,xxx-xxx-xxxx
北海道,○○店,北見市○○４－４,xxx-xxx-xxxx
・・・・

読み込めてはいるけれど・・

■Q4. CSVファイルをTTableで読み込むには？

問題点• CSVファイルにはテーブル構造のような定義がないので項目を正しく区分けして読み込めない

CSVファイル内容のテーブル構造を定義した
CSVファイル内容のテーブル構造を定義した
スキーマファイルを用意する必要がある。
スキーマファイルを用意する必要がある。
スキーマファイルとは，ASCII
スキーマファイルとは，ASCIIテーブルとDBとのテーブルとDBとの間でデータをやり取りする場合に使用し，間でデータをやり取りする場合に使用し，テーブルの構造とその項目のデータ型に関するテーブルの構造とその項目のデータ型に関する情報が入ったテキストファイル。拡張子はSCH
情報が入ったテキストファイル。拡張子はSCH。。

■Q4. CSVファイルをTTableで読み込むには？

スキーマファイルの構造例[SAMPLE]//[SAMPLE]//ファイル名
ファイル名(拡張子なし)(拡張子なし)FILETYPE//
FILETYPE==Delimited
Delimited//形式：Delimited
形式：DelimitedまたはまたはFixed
Fixed
CHARSET//CHARSET==ascii
ascii//言語ドライバ名
言語ドライバ名
DELIMITER//
DELIMITER==““//文字項目の囲み文字(省略可)
文字項目の囲み文字(省略可)SEPARATOR//SEPARATOR==, ,//項目間項目間の区切り文字の区切り文字Field1
Field1==REGION,CHAR,12,0,0
REGION,CHAR,12,0,0 ////以下項目以下項目(フィールド)(フィールド)情報
情報
Field2
Field2==STORE,CHAR,10,0,13
STORE,CHAR,10,0,13
Field3
Field3==ADDR,CHAR,40,0,24
ADDR,CHAR,40,0,24
Field4
Field4==TELNO,CHAR,12,0,65
TELNO,CHAR,12,0,65※スキーマファイル内の情報は，大文字と小文字を区別する。
※スキーマファイル内の情報は，大文字と小文字を区別する。

■Q4. CSVファイルをTTableで読み込むには？

スキーマファイルの設定詳細
FILETYPE
FILETYPE
テキストファイルの形式として，
テキストファイルの形式として，Fixed
Fixed（固定長テキスト）または（固定長テキスト）またはDelimited（カンマ付きテキスト）のどちらかを指定。
Delimited（カンマ付きテキスト）のどちらかを指定。

CHARSETCHARSET
使用する言語ドライバの名前を指定。
使用する言語ドライバの名前を指定。

DELIMITER
DELIMITER
各文字フィールド（英数字または文字）を囲む半角一文字を指定。
各文字フィールド（英数字または文字）を囲む半角一文字を指定。

SEPARATORSEPARATOR
各項目を区切る半角の文字を一文字指定
各項目を区切る半角の文字を一文字指定

■Q4. CSVファイルをTTableで読み込むには？

スキーマファイルの設定詳細
項目情報
項目情報
Field
Field
( (==項目名,
項目名,データ型,
データ型,文字数,
文字数,小数点以下桁数,
小数点以下桁数,開始位置
開始位置) )
テーブルの項目
テーブルの項目(列)(列)の属性を指定。
の属性を指定。
各行は「FieldX=」で開始。
各行は「FieldX = 」で開始。
ここでここでXXは項目番号
は項目番号(Field1，Field2(Field1，Field2など)など)

スキーマファイルで使用できるデータ型
CHAR
CHAR

文字
文字

NUMBERNUMBER
FLOAT
FLOAT

16
16ビット整数
ビット整数

BOOL
BOOL
DATE
DATE

6464ビット浮動小数
ビット浮動小数3232ビット倍長整数
ビット倍長整数

時刻型項目
TIME
時刻型項目
TIME
TIMESTAMP
日付＋時刻型項目
TIMESTAMP 日付＋時刻型項目

LONGINTLONGINT

論理値
論理値(T(TまたはまたはF)F)
日付型項目
日付型項目

■Q4. CSVファイルをTTableで読み込むには？

スキーマファイルを利用してCSVファイルを読み込む• スキーマファイルをCSVファイルと同じパスに配置すると正しくフィールドを区切って読み込める。

Sample.csv
Sample.csv
北海道,○×店,札幌市○×区１－１,xxx-xxx-xxxx
北海道,××店,札幌市××区２－２,xxx-xxx-xxxx
北海道,△△店,札幌市△△区３－３,xxx-xxx-xxxx
北海道,○○店,札幌市○○区２－１,xxx-xxx-xxxx
北海道,×○店,札幌市×○区１－４,xxx-xxx-xxxx
北海道,△×店,札幌市△×区３－２,xxx-xxx-xxxx
北海道,○△店,札幌市○△区１－１,xxx-xxx-xxxx
北海道,○×店,旭川市○×１－２,xxx-xxx-xxxx[Sample]北海道,××店,旭川市××４－２,xxx-xxx-xxxx
FILETYPE= Delimited
北海道,○×店,小樽市○×３－３,xxx-xxx-xxxx
CHARSET = ascii
北海道,○○店,北見市○○４－４,xxx-xxx-xxxx
SEPARATOR=,
Field1 = REGION,CHAR,12,0,0・・・・ = STORE,CHAR,10,0,13
Field2
Field3 = ADDR,CHAR,40,0,24
Field4 = TELNO,CHAR,12,0,65

Sample.sch
Sample.sch

CSVファイルをDBファイルとして読み込み

まとめ

WEBサービスの利用• RESTを使用したWEBサービスの利用とXMLデータバインディングの活用

ガントチャートの実装• TStringGridとＴPanelの動的生成によるチャートの生成

EXE間のパラメータ受渡し• WM_COPYDATAを利用したメッセージの送受信

CSVファイルのTTableでの読込み• スキーマファイルを利用したCSVファイルの定義、読込み