2010年9月23日木曜日

SQL Server のデータベースのテーブルとフィールド名を表示する。(その2)

Sql Server 2005以上であれば、システムカタログに対してクエリを発行することで
テーブル名とフィールド名のリストの取得ができます。
(詳細は、システムカタログのクエリのQandAページを参照)

クエリを発行できるということは、





程度の画面であればマスターリンクを使ってノンコーディング
(クエリーは組む必要はありますが)でテーブルとフィールドのリストを表示できます。

このへんがDelphiのすごいところですね。

以下、フォーム表示をテキスト表示したもの


object Form1: TForm1
  Left = 0
  Top = 0
  Caption = 'Form1'
  ClientHeight = 535
  ClientWidth = 727
  Color = clBtnFace
  Font.Charset = DEFAULT_CHARSET
  Font.Color = clWindowText
  Font.Height = -11
  Font.Name = 'Tahoma'
  Font.Style = []
  OldCreateOrder = False
  PixelsPerInch = 96
  TextHeight = 13
  object PageControl1: TPageControl
    Left = 0
    Top = 0
    Width = 727
    Height = 535
    ActivePage = TabSheet2
    Align = alClient
    TabOrder = 0
    object TabSheet1: TTabSheet
      Caption = 'TabSheet1'
      object Label1: TLabel
        Left = 192
        Top = 88
        Width = 56
        Height = 13
        Caption = #12501#12451#12540#12523#12489#21517
      end
      object Label2: TLabel
        Left = 16
        Top = 88
        Width = 50
        Height = 13
        Caption = #12486#12540#12502#12523#21517
      end
      object Label3: TLabel
        Left = 552
        Top = 88
        Width = 56
        Height = 13
        Caption = #12501#12451#12540#12523#12489#21517
      end
      object Label4: TLabel
        Left = 376
        Top = 88
        Width = 50
        Height = 13
        Caption = #12486#12540#12502#12523#21517
      end
      object Button1: TButton
        Left = 96
        Top = 16
        Width = 169
        Height = 33
        Caption = 'dbGo'#12398#12513#12477#12483#12489#12434#20351#29992
        TabOrder = 0
        OnClick = Button1Click
      end
      object ListBox1: TListBox
        Left = 16
        Top = 106
        Width = 169
        Height = 401
        ItemHeight = 13
        TabOrder = 1
        OnClick = ListBox1Click
      end
      object ListBox2: TListBox
        Left = 191
        Top = 106
        Width = 169
        Height = 401
        ItemHeight = 13
        TabOrder = 2
      end
      object ListBox3: TListBox
        Left = 376
        Top = 106
        Width = 169
        Height = 401
        ItemHeight = 13
        TabOrder = 3
        OnClick = ListBox3Click
      end
      object ListBox4: TListBox
        Left = 550
        Top = 106
        Width = 169
        Height = 401
        ItemHeight = 13
        TabOrder = 4
      end
      object Button2: TButton
        Left = 472
        Top = 16
        Width = 169
        Height = 33
        Caption = 'DbExpress'#12398#12513#12477#12483#12489#12434#20351#29992
        TabOrder = 5
        OnClick = Button2Click
      end
    end
    object TabSheet2: TTabSheet
      Caption = 'TabSheet2'
      ImageIndex = 1
      object DBGrid1: TDBGrid
        Left = 0
        Top = 0
        Width = 145
        Height = 507
        Align = alLeft
        DataSource = DataSource1
        TabOrder = 0
        TitleFont.Charset = DEFAULT_CHARSET
        TitleFont.Color = clWindowText
        TitleFont.Height = -11
        TitleFont.Name = 'Tahoma'
        TitleFont.Style = []
        Columns = <
          item
            Expanded = False
            FieldName = 'Name'
            Visible = True
          end>
      end
      object DBGrid2: TDBGrid
        Left = 145
        Top = 0
        Width = 160
        Height = 507
        Align = alLeft
        DataSource = DataSource2
        TabOrder = 1
        TitleFont.Charset = DEFAULT_CHARSET
        TitleFont.Color = clWindowText
        TitleFont.Height = -11
        TitleFont.Name = 'Tahoma'
        TitleFont.Style = []
        Columns = <
          item
            Expanded = False
            FieldName = 'NAME'
            Visible = True
          end>
      end
    end
    object TabSheet3: TTabSheet
      Caption = 'TabSheet3'
      ImageIndex = 2
      object DBGrid3: TDBGrid
        Left = 0
        Top = 0
        Width = 177
        Height = 507
        Align = alLeft
        DataSource = DataSource3
        TabOrder = 0
        TitleFont.Charset = DEFAULT_CHARSET
        TitleFont.Color = clWindowText
        TitleFont.Height = -11
        TitleFont.Name = 'Tahoma'
        TitleFont.Style = []
        Columns = <
          item
            Expanded = False
            FieldName = 'Name'
            Visible = True
          end>
      end
      object DBGrid4: TDBGrid
        Left = 177
        Top = 0
        Width = 184
        Height = 507
        Align = alLeft
        DataSource = DataSource4
        TabOrder = 1
        TitleFont.Charset = DEFAULT_CHARSET
        TitleFont.Color = clWindowText
        TitleFont.Height = -11
        TitleFont.Name = 'Tahoma'
        TitleFont.Style = []
        Columns = <
          item
            Expanded = False
            FieldName = 'NAME'
            Visible = True
          end>
      end
    end
  end
  object ADOConnection1: TADOConnection
    Connected = True
    ConnectionString =
      'Provider=SQLNCLI10.1;Integrated Security="";Persist Security Inf' +
      'o=False;User ID=sa;Initial Catalog=AdventureWorks;Data Source=SA' +
      'KANOTE-PC\SqlExpress;Initial File Name="";Server SPN=""'
    LoginPrompt = False
    Provider = 'SQLNCLI10.1'
    Left = 16
    Top = 456
  end
  object SQLConnection1: TSQLConnection
    ConnectionName = 'MSSQLConnection'
    DriverName = 'MSSQL'
    GetDriverFunc = 'getSQLDriverMSSQL'
    LibraryName = 'dbxmss.dll'
    LoginPrompt = False
    Params.Strings = (
      'SchemaOverride=%.dbo'
      'DriverUnit=DBXMSSQL'
    
        'DriverPackageLoader=TDBXDynalinkDriverLoader,DBXCommonDriver150.' +
        'bpl'
    
        'DriverAssemblyLoader=Borland.Data.TDBXDynalinkDriverLoader,Borla' +
        'nd.Data.DbxCommonDriver,Version=15.0.0.0,Culture=neutral,PublicK' +
        'eyToken=91d62ebb5b0d1b1b'
    
        'MetaDataPackageLoader=TDBXMsSqlMetaDataCommandFactory,DbxMSSQLDr' +
        'iver150.bpl'
    
        'MetaDataAssemblyLoader=Borland.Data.TDBXMsSqlMetaDataCommandFact' +
        'ory,Borland.Data.DbxMSSQLDriver,Version=15.0.0.0,Culture=neutral' +
        ',PublicKeyToken=91d62ebb5b0d1b1b'
      'GetDriverFunc=getSQLDriverMSSQL'
      'LibraryName=dbxmss.dll'
      'VendorLib=sqlncli10.dll'
      'MaxBlobSize=-1'
      'OSAuthentication=False'
      'PrepareSQL=True'
      'DriverName=MSSQL'
      'HostName=SAKANOTE-PC\SQLEXPRESS'
      'Database=AdventureWorks'
      'User_Name=sa'
      'Password=sysdba'
      'BlobSize=-1'
      'ErrorResourceFile='
      'LocaleCode=0000'
      'IsolationLevel=ReadCommitted'
      'OS Authentication=False'
      'Prepare SQL=False'
      'ConnectTimeout=60'
      'Mars_Connection=False')
    VendorLib = 'sqlncli10.dll'
    Connected = True
    Left = 464
    Top = 56
  end
  object ADOQuery1: TADOQuery
    Connection = ADOConnection1
    CursorType = ctStatic
    Parameters = <>
    SQL.Strings = (
      'SELECT Object_ID, Name FROM SYS.TABLES')
    Left = 16
    Top = 488
  end
  object DataSetProvider1: TDataSetProvider
    DataSet = ADOQuery1
    Left = 56
    Top = 504
  end
  object ClientDataSet1: TClientDataSet
    Active = True
    Aggregates = <>
    Params = <>
    ProviderName = 'DataSetProvider1'
    Left = 88
    Top = 504
  end
  object DataSource1: TDataSource
    DataSet = ClientDataSet1
    Left = 24
    Top = 184
  end
  object ADOQuery2: TADOQuery
    Connection = ADOConnection1
    CursorType = ctStatic
    Parameters = <
      item
        Name = 'Object_ID'
        DataType = ftInteger
        Value = 14623095
      end>
    SQL.Strings = (
      'SELECT Object_ID , NAME FROM sys.columns')
    Left = 144
    Top = 504
  end
  object ClientDataSet2: TClientDataSet
    Active = True
    Aggregates = <>
    IndexFieldNames = 'Object_ID'
    MasterFields = 'Object_ID'
    MasterSource = DataSource1
    PacketRecords = 0
    Params = <>
    ProviderName = 'DataSetProvider2'
    Left = 208
    Top = 504
  end
  object DataSetProvider2: TDataSetProvider
    DataSet = ADOQuery2
    Left = 176
    Top = 504
  end
  object DataSource2: TDataSource
    DataSet = ClientDataSet2
    Left = 96
    Top = 176
  end
  object ClientDataSet3: TClientDataSet
    Active = True
    Aggregates = <>
    Params = <>
    ProviderName = 'DataSetProvider3'
    Left = 464
    Top = 112
  end
  object DataSetProvider3: TDataSetProvider
    DataSet = SQLQuery1
    Left = 464
    Top = 168
  end
  object SQLQuery1: TSQLQuery
    MaxBlobSize = -1
    Params = <>
    SQL.Strings = (
      'SELECT Object_ID, Name FROM SYS.TABLES')
    SQLConnection = SQLConnection1
    Left = 464
    Top = 216
  end
  object DataSource3: TDataSource
    DataSet = ClientDataSet3
    Left = 456
    Top = 280
  end
  object DataSetProvider4: TDataSetProvider
    DataSet = SQLQuery2
    Left = 600
    Top = 176
  end
  object ClientDataSet4: TClientDataSet
    Active = True
    Aggregates = <>
    IndexFieldNames = 'Object_ID'
    MasterFields = 'Object_ID'
    MasterSource = DataSource3
    PacketRecords = 0
    Params = <>
    ProviderName = 'DataSetProvider4'
    Left = 592
    Top = 104
  end
  object DataSource4: TDataSource
    DataSet = ClientDataSet4
    Left = 576
    Top = 280
  end
  object SQLQuery2: TSQLQuery
    MaxBlobSize = -1
    Params = <
      item
        DataType = ftInteger
        Name = 'Object_ID'
        ParamType = ptInput
        Value = 14623095
      end>
    SQL.Strings = (
      'SELECT Object_ID , NAME FROM sys.columns')
    SQLConnection = SQLConnection1
    Left = 584
    Top = 240
  end
end

SQL Server のデータベースのテーブルとフィールド名を表示する。(その1)

仕事でSql Serverのテーブルリストを表示する必要があったので・・・

DelphiでSQl Srerverのテーブルリストを表示する方法をいくつか


1. dbGOのConnectionのGetTableNamesメソッドとGetFieldNamesメソッドを利用する。


dbGoのGetTableNamesを利用すればInitial_Catalogで指定したデータベースの
テーブルリストを取得できます。

また、GetFieldNamesを利用すれば、指定したテーブルのフィールドのリストを表示できます。

ソースは、こんな感じ・・・
(ボタンをクリックするとテーブルのリストを表示し、リストの中のテーブルをクリックすると
クリックしたテーブルのリストを表示します。)

  1. procedure TForm1.Button1Click(Sender: TObject);  
  2. begin  
  3.   ADOConnection1.Connected := true;  
  4.   ADOConnection1.GetTableNames(ListBox1.Items,false);  
  5.   ADOConnection1.Connected := false;  
  6. end;  
  7.   
  8. procedure TForm1.ListBox1Click(Sender: TObject);  
  9. var  
  10.   TableName : String;  
  11. begin  
  12.    if ListBox1.Items.Count > 0 then  
  13.    begin  
  14.       TableName := ListBox1.Items[ListBox1.ItemIndex];  
  15.       if Length(TableName) > 0 then  
  16.       begin  
  17.         ADOConnection1.Connected := true;  
  18.         ADOConnection1.GetFieldNames(TableName,ListBox2.Items);  
  19.         ADOConnection1.Connected := false;  
  20.       end;  
  21.    end;  
  22. end;  

2. DbExpressを利用する。

DbExpressのSQLConnectionにもGetTableNamesメソッドとGetFieldNamesがあるので
dbGOと同様に処理できます。

ただし、試した中では、DbExpressでは、スキーマを指定しないとdboスキーマのテーブル
しか取得しないようなので、GetSchemaNamesでスキーマ名のリストを取得したうえで
スキーマ毎にテーブルを取得する必要がありました。

でソースはこんな感じ。スキーマ名を取得してる関係でちょっと複雑です。

  1. procedure TForm1.Button1Click(Sender: TObject);  
  2.   
  3. procedure TForm1.Button2Click(Sender: TObject);  
  4. var  
  5.   GetSchemaNames : TStringList;  
  6.   TableNames : TStringList;  
  7.   i,j : Integer;  
  8. begin  
  9.   ListBox3.Items.Clear;  
  10.   SQLConnection1.Connected := true;  
  11.   GetSchemaNames := TStringList.Create;  
  12.   try  
  13.     SQLConnection1.GetSchemaNames(GetSchemaNames);  
  14.     for i := 0 to GetSchemaNames.Count -1 do  
  15.     begin  
  16.       TableNames := TStringList.Create;  
  17.       try  
  18.         SQLConnection1.GetTableNames(TableNames,GetSchemaNames.Strings[i],false);  
  19.         for j := 0 to TableNames.Count-1 do  
  20.         begin  
  21.           ListBox3.Items.Add(GetSchemaNames.Strings[i] + '.' + TableNames.Strings[j]);  
  22.         end;  
  23.       finally  
  24.         TableNames.Free;  
  25.       end;  
  26.     end;  
  27.   finally  
  28.     GetSchemaNames.Free;  
  29.   end;  
  30.   SQLConnection1.Connected := false;  
  31. end;  
  32.   
  33. procedure TForm1.ListBox3Click(Sender: TObject);  
  34. var  
  35.   TableName : String;  
  36. begin  
  37.    if ListBox1.Items.Count > 0 then  
  38.    begin  
  39.       TableName := ListBox3.Items[ListBox3.ItemIndex];  
  40.       if Length(TableName) > 0 then  
  41.       begin  
  42.         SQLConnection1.Connected := true;  
  43.         SQLConnection1.GetFieldNames(TableName,ListBox4.Items);  
  44.         SQLConnection1.Connected := false;  
  45.       end;  
  46.   
  47.    end;  
  48. end;  

2010年9月12日日曜日

JoinStringはないの?(その2)

Delフサさんから指摘を受けましたので、オープン配列版のJoinString関数を
作成してみました。(Delフサ様ご指摘ありがとうございます。)

でついでに、文字列の最後にDelemeterを付加するかどうかを指定できる
オーバーロード関数をも作ってみました。

以下、ソースコード

  1. unit VbLikeStringUtil;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   StrUtils,Types;  
  7.   
  8.   function JoinString(AStrings : Array of String; Delemeter: String) : String overload;  
  9.   function JoinString(AStrings : Array of String; Delemeter: String; AddLastDelemeter : Boolean) : String overload;  
  10.   
  11.   
  12. implementation  
  13.   
  14. uses  
  15.   SysUtils;  
  16.   
  17.   
  18. function JoinString(AStrings : Array of String; Delemeter: String) : String overload;  
  19. begin  
  20.   Result := JoinString(AStrings,Delemeter,false);  
  21. end;  
  22.   
  23. function JoinString(AStrings : Array of String; Delemeter: String; AddLastDelemeter : Boolean) : String overload;  
  24. var  
  25.   i : Longint;  
  26. begin  
  27.   
  28.   Result := '';  
  29.   if (Length(AStrings) > 0then  
  30.   begin  
  31.   
  32.     //最後の  
  33.     for i := low(AStrings) to high(AStrings)-1 do  
  34.     begin  
  35.       Result := Result + AStrings[i] + Delemeter;  
  36.     end;  
  37.   
  38.     //文字配列の最後の要素  
  39.     Result := Result + AStrings[high(AStrings)];  
  40.   
  41.     //最後にデリミターを付加する場合  
  42.     if AddLastDelemeter then  
  43.     begin  
  44.       Result := Result + Delemeter;  
  45.     end;  
  46.   
  47.   end;  
  48. end;  

でテストコードはこんな感じ。

  1. unit Unit1;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, StdCtrls;  
  8.   
  9. type  
  10.   TForm1 = class(TForm)  
  11.     Button1: TButton;  
  12.     Label1: TLabel;  
  13.     Button2: TButton;  
  14.     procedure Button1Click(Sender: TObject);  
  15.     procedure Button2Click(Sender: TObject);  
  16.   private  
  17.     { Private 宣言 }  
  18.   public  
  19.     { Public 宣言 }  
  20.   end;  
  21.   
  22. var  
  23.   Form1: TForm1;  
  24.   
  25. implementation  
  26.   
  27. uses  
  28.   StrUtils,Types, VbLikeStringUtil;  
  29.   
  30. {$R *.dfm}  
  31.   
  32. procedure TForm1.Button1Click(Sender: TObject);  
  33. var  
  34.   JoinItems : TStringDynArray;  
  35. begin  
  36.   
  37.   
  38.   SetLength(JoinItems,5);  
  39.   
  40.   JoinItems[0] := 'イージス';  
  41.   JoinItems[1] := 'ジャスティス';  
  42.   JoinItems[2] := 'ザク';  
  43.   JoinItems[3] := 'セイバー';  
  44.   JoinItems[4] := 'グフ';  
  45.   
  46.   Assert('イージス|ジャスティス|ザク|セイバー|グフ'=JoinString(JoinItems,'|'));  
  47.   
  48.   Label1.Caption := JoinString(JoinItems,'|');  
  49.   
  50.   
  51.   
  52. end;  
  53.   
  54. procedure TForm1.Button2Click(Sender: TObject);  
  55. begin  
  56.   
  57.   //空配列の場合は空文字を返す  
  58.   Assert(''=JoinString([],'|'));  
  59.   
  60.   //通常の場合  
  61.   Assert('ミリアリア|キラ|メイリン|バルトフェルド'  
  62.      = JoinString(['ミリアリア','キラ','メイリン','バルトフェルド'],'|'));  
  63.   
  64.   //オプションの第3引数にTrueを指定すると文字列の最後にデリミタを付加します。  
  65.   Assert('ミリアリア|キラ|メイリン|バルトフェルド|'  
  66.      = JoinString(['ミリアリア','キラ','メイリン','バルトフェルド'],'|',true));  
  67.   
  68.   Label1.Caption := JoinString(['ミリアリア','キラ','メイリン','バルトフェルド'],'|',true);  
  69. end;  
  70.   
  71. end.  

ちなみに、今回の文字列は、Seedの自分の好きなキャラシリーズです。

2010年9月5日日曜日

JoinStringはないの?

VB6のJoin関数および.Net FrameworkのString.Joinメソッドは、
XEで追加されたほどSplitString使用頻度は多くないがたまに必要に
なることがある。

Help,ソースをざっくり見たところなさそうだったので実装してみた。
(といっても文字列を連結しただけですが・・・)

以下、ソースコード

  1. unit VbLikeStringUtil;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   StrUtils,Types;  
  7.   
  8.   function JoinString(AStrings: TStringDynArray; Delemeter : String) : String;  
  9.   
  10. implementation  
  11.   
  12. uses  
  13.   SysUtils;  
  14.   
  15. function JoinString(AStrings: TStringDynArray; Delemeter : String) : String;  
  16. var  
  17.   i : Longint;  
  18. begin  
  19.   
  20.   Result := '';  
  21.   for i := low(AStrings) to high(AStrings) do  
  22.   begin  
  23.     Result := Result + AStrings[i];  
  24.     if i < high(AStrings) then Result := Result + Delemeter;  
  25.   end;  
  26.   
  27.   
  28. end;  
  29.   
  30. end.  


実際の使用方法のサンプルは、こんな感じ

  1. unit Unit1;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, StdCtrls;  
  8.   
  9. type  
  10.   TForm1 = class(TForm)  
  11.     Button1: TButton;  
  12.     Label1: TLabel;  
  13.     procedure Button1Click(Sender: TObject);  
  14.   private  
  15.     { Private 宣言 }  
  16.   public  
  17.     { Public 宣言 }  
  18.   end;  
  19.   
  20. var  
  21.   Form1: TForm1;  
  22.   
  23. implementation  
  24.   
  25. uses  
  26.   StrUtils,Types, VbLikeStringUtil;  
  27.   
  28. {$R *.dfm}  
  29.   
  30. procedure TForm1.Button1Click(Sender: TObject);  
  31. var  
  32.   JoinItems : TStringDynArray;  
  33. begin  
  34.   
  35.   
  36.   SetLength(JoinItems,5);  
  37.   
  38.   JoinItems[0] := 'イージス';  
  39.   JoinItems[1] := 'ジャスティス';  
  40.   JoinItems[2] := 'ザク';  
  41.   JoinItems[3] := 'セイバー';  
  42.   JoinItems[4] := 'グフ';  
  43.   
  44.   
  45.   Label1.Caption := JoinString(JoinItems,'|');  
  46.   
  47.   
  48. end;  
  49.   
  50. end.  

2010年9月3日金曜日

SplitStringを試してみる。

Delphi XEでSplitString関数が追加された。VBにあって、Delphiになかった関数で
個人的には気になってた関数です。(欲しかった関数です。)

で、ちょっとためしてみた。

以下、ソースコード

  1. unit Unit1;  
  2.   
  3. interface  
  4.   
  5. uses  
  6.   Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,  
  7.   Dialogs, StdCtrls;  
  8.   
  9. type  
  10.   TForm1 = class(TForm)  
  11.     Button1: TButton;  
  12.     Label1: TLabel;  
  13.     ListBox1: TListBox;  
  14.     procedure Button1Click(Sender: TObject);  
  15.   private  
  16.     { Private 宣言 }  
  17.   public  
  18.     { Public 宣言 }  
  19.   end;  
  20.   
  21. var  
  22.   Form1: TForm1;  
  23.   
  24. implementation  
  25.   
  26. {$R *.dfm}  
  27.   
  28. uses  
  29.   StrUtils,Types;  
  30.   
  31. procedure TForm1.Button1Click(Sender: TObject);  
  32. var  
  33.   TestString : String;  
  34.   SplitResult:TStringDynArray;  
  35. begin  
  36.   TestString := 'フリーダム,ジャスティス,デストロイ,セイバー';  
  37.   SplitResult := SplitString(TestString,',');  
  38.   Label1.Caption := TestString;  
  39.   
  40.   for TestString in SplitResult do begin  
  41.     ListBox1.Items.Add(TestString);  
  42.   end;  
  43.   
  44. end;  
  45.   
  46. end.  

Visual Basicライクで非常に簡単に使えます。

内部的には、FindDelimiter関数を使ってDelemeterをみつけ
Copy関数で部分文字列を切り出してます。

これなら、下位バージョンでも実装できそうですね。

ところでFindDelimiter関数は、いつから存在したのでしょうか?
個人的には、Delphiにはまだまだ知らない便利な関数が一杯ありそうです。


2010.09.10 山本隆の開発日記で紹介して頂いたので
調子にのってC++ Builderで書いてみました。
(C++は自信がないので、役に立つかどうかわかりませんが・・・)

  1. //---------------------------------------------------------------------------  
  2.   
  3. #include <vcl.h>  
  4. #include <strutils.hpp>  
  5. #pragma hdrstop  
  6.   
  7. #include "Unit1.h"  
  8. //---------------------------------------------------------------------------  
  9. #pragma package(smart_init)  
  10. #pragma resource "*.dfm"  
  11. TForm1 *Form1;  
  12. //---------------------------------------------------------------------------  
  13. __fastcall TForm1::TForm1(TComponent* Owner)  
  14.  : TForm(Owner)  
  15. {  
  16.   
  17. }  
  18. //---------------------------------------------------------------------------  
  19. void __fastcall TForm1::Button1Click(TObject *Sender)  
  20. {  
  21.   
  22.  UnicodeString TestString = "イージス|バスター|デュエル|ブリッツ|ストライク";  
  23.   
  24.  LabeledEdit1->Text = TestString;  
  25.   
  26.  TStringDynArray SplitResult = SplitString(TestString,"|");  
  27.   
  28.  for (int i = 0; i < SplitResult.Length; i ++) {  
  29.   ListBox1->Items->Add(SplitResult[i]);  
  30.  }  
  31.   
  32.  SplitResult.set_length(0);  
  33.   
  34. }  
  35. //---------------------------------------------------------------------------  
  36.   
  37. </strutils.hpp></vcl.h>