(現在 過去ログ47 を表示中)

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

[ 最新記事及び返信フォームをトピックトップへ ]

■7365 / inTopicNo.1)  SQL Server の IDENTITY について
  
□投稿者/ そら -(2013/01/18(Fri) 15:01:29)
    2013/01/21(Mon) 16:27:38 編集(投稿者)

    お世話になります。
    桐9 2012 と SQL Server 2005 を使っております。

    [ID] int identity primary key
    を含むテーブルに対して、外部DBをとおして行追加しようとすると、
    [ID] にも挿入しようとするため、エラーになってしまいます。

    一括処理やイベント処理を使わずに、会話処理でXVWで直接、行追加することは可能ですか?
引用返信 [メール受信/OFF] 削除キー/
■7366 / inTopicNo.2)  Re[1]: SQL Server の IDENTITY について
□投稿者/ くおんたむ -(2013/01/18(Fri) 23:44:59)
    どうも、そらさん

    > [ID] int indentity primary key
    > を含むテーブルに対して、外部DBをとおして行追加しようとすると、
    > [ID] にも挿入しようとするため、エラーになってしまいます。
    >
    > 一括処理やイベント処理を使わずに、会話処理でXVWで直接、行追加することは可能ですか?

    これとか?
    http://www.habata.net/kiri/kbbs/kakov9/29407.htm

    外していたら、スイミマセン m(_ _)m
引用返信 [メール受信/OFF] 削除キー/
■7367 / inTopicNo.3)  Re[2]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/19(Sat) 13:51:43)
    くおんたむさん、ありがとうございます。
    
    ご紹介下さったリンクを拝見しましたが、十分に理解できず、
    自分なりの解釈を加えて、下記の様なトリガを追加してみました。
    
    問題となっている[ID]の挿入を回避する試みです。
    
    
    CREATE TRIGGER InsteadOfInsert on テスト表
    INSTEAD OF INSERT AS BEGIN 
    	SET IDENTITY_INSERT テスト表 ON
    	INSERT INTO テスト表( 
    		[項目1],
    		[項目2]
    	)
    	SELECT
    		[項目1],
    		[項目2]
    	FROM inserted
    	SET IDENTITY_INSERT テスト表 OFF
    END;
    
    しかし外部DBで行追加を試すと、3行目でIDENTITY_INSERTを
    ONにしているにもかかわらず、
    「IDENTITY_INSERT が OFF に設定されているときは、
    テーブル'テスト表'のID列に明示的な値を挿入できません」という、
    エラーダイアログが出てしまいます。
    
    3行目と12行目の SET IDENTITY_INSERT を外しても、同じ症状でした。
    
    根本的に何か間違っているのでしょうか?

引用返信 [メール受信/OFF] 削除キー/
■7368 / inTopicNo.4)  Re[3]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/19(Sat) 15:54:59)
    2013/01/21(Mon) 16:31:34 編集(投稿者)
    ややぎこちない実装ですが、下記の2つの目標を両立する方法が分かりました。
    ですが、もしより簡潔な方法をご存知でしたら、お教え頂けますか?
    
    目標	・SQL Server側での主キーのカウンター付け
    	・外部DBからの行追加
    
    
    実装概要:INSTEAD OF INSERTトリガ内で、IDENTITYをエミュレートします
    
    
    実装例:
    
    CREATE TABLE テスト表 (
    	[ID]	int	primary key,
    	[項目1]	int,
    	[項目2]	int
    );
    
    go
    
    CREATE TRIGGER InsteadOfInsert on テスト表
    INSTEAD OF INSERT AS BEGIN 
    	INSERT INTO テスト表( 
    		[ID],
    		[項目1],
    		[項目2]
    	)
    	SELECT
    		[newID],
    		[項目1],
    		[項目2]
    	FROM
    		inserted,
    		(select
    			case
    				when max( [ID] ) is null then 1
    				else max( [ID] ) + 1
    			end as [newID]
    		from	テスト表)a
    END;

引用返信 [メール受信/OFF] 削除キー/
■7369 / inTopicNo.5)  Re[4]: SQL Server の IDENTITY について
□投稿者/ 尾形 -(2013/01/19(Sat) 20:44:09)
引用返信 [メール受信/OFF] 削除キー/
■7370 / inTopicNo.6)  Re[5]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/20(Sun) 13:54:44)
    2013/01/21(Mon) 17:38:49 編集(投稿者)

    尾形さん、ありがとうございます。
    SQLインジェクションが使えることは初めて知りました。

    > 自前で[ID]振ったほうがいいような気もします

    外部DBでも挿入初期値が設定できれば、イベントを使わずにすむのですが、
    もしかしてそれに似た機能って実現できますか?

    イベントで下記のようにすることも、第2候補として考えていますが、複雑化してしまいます。


    手続き定義開始 フォーム::行挿入開始( 長整数 &明細番号 )
        項目値代入 [ID] = #日時文字列( #日時値, 9, 4, 2 ) \
            + #条件選択( \
                #文字数( #WSNAME ) > 10 , #右側文字列( #WSNAME, 16 ), \
                1, #WSNAME ) \
            + #文字列( #MOD( #行番号, 100000000 ) )
    手続き終了


    また、未検証ですが、この場合では主キーがnvarchar(50)になり、
    大量のレコードを抱えた時の処理速度がインデックスを付けてもやや不安です。

    やや不恰好な主キーになることと、行追加後に再抽出が必要になることと、
    どちらが優先か、もう少し形になってから比較検討する予定です。
引用返信 [メール受信/OFF] 削除キー/
■7371 / inTopicNo.7)  Re[6]: SQL Server の IDENTITY について
□投稿者/ 今村 誠 -(2013/01/20(Sun) 20:29:25)
    2013/02/06(Wed) 15:46:40 編集(投稿者)

    名札 メイン
     条件 (#配列要素数("Swin名")=-1) VAR 共通,文{ &Swin名}
     条件 (#配列要素数("Swintb")=-1) var 共通,文{ &Swintb = #一括パス名 + "user.tbl" }
     if ( #FSIZE( &Swintb ) = -1 )
      call 表の作成(&Swintb,"WSNAME,文字列,M10252","略字,文字列,M1252","年,文字列,M1352") /* #ユーザ名,#WSNAME */
      終了 表 編集対象表
     end
     表 &Swintb
     検索 [WSNAME] { #WSNAME }, 文字比較方法=自動, 部分一致検索=しない,終了状態=&秒
     if ( &秒 = -1 )
      確認 "指定されたユーザー"+#WSNAME+"は登録されていません"
      終了 表 編集対象表
      中止
     else
      &Swin名 = [略字]
      終了 表 編集対象表
     end
     call 行挿入終了( #行番号,1 )

    proc 行挿入終了(長整数 &明細番号,長整数 &モード)
     var 文 { &主 = #日時文字列( #日時値, 9, 4, 2 ) }
     手続き実行 日付文字作( &主 )
     確認 &主+&Swin名
     手続き実行 主キーを変更( &主 )
     確認 &主+#WSNAME
    end

    proc 表の作成(文 &Sfn ,文 &Sitem1 ,文 &Sitem2 ,文 &Sitem3 )
     var 文 {&Se="英字作成.k3"},Long {&Ie[4],&Lct=0,&Lk}
     印字開始 &Se,終了状態=&Ie[4]
     印字 """"+#対応文字列(&Sitem1,1)+""","""+#対応文字列(&Sitem1,2)+""","""+#対応文字列(&Sitem1,3)+""""
     印字 """"+#対応文字列(&Sitem2,1)+""","""+#対応文字列(&Sitem2,2)+""","""+#対応文字列(&Sitem2,3)+""""
     印字 """"+#対応文字列(&Sitem3,1)+""","""+#対応文字列(&Sitem3,2)+""","""+#対応文字列(&Sitem3,3)+""""
     印字終了 改頁=しない
     表作成 &Sfn, 定義ファイル=&Se,モード=専有, 終了状態=&Ie[4]
     for &Ie[1]=65,122
      if ( (&Ie[1]>64)*(&Ie[1]<91)+(&Ie[1]>96)*(&Ie[1]<123)=1)
       for &Ie[2]=65,122
        if ( (&Ie[2]>64)*(&Ie[2]<91)+(&Ie[2]>96)*(&Ie[2]<123)=1)
         Eval "行追加 終了状態=&Ie[3],["+#対応文字列(&Sitem2,1)+"]=#J(&Ie[1])+#J(&Ie[2]),["+#対応文字列(&Sitem3,1)+"]=#str(#代入(&Lct,&Lct+1),4)"
        end
       end
      end
     end
    end
    proc 日付文字作( reffer 文 &S主 )
     var 文{&S年 = #SSTR( &S主,1,4),&S英1,&S英2}
     &S英1 = #sstr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",#切り上げ(#NUM(&S年)/52,0),1)
    &S英2 = #sstr("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",1+#MOD(#NUM(&S年)-1,52),1)
     &S主 = #計算( /* 月からミリ秒の1桁のみを抜き出し */\
    #代入(&S主,#SSTR(&S主,5,17))\
    ,#代入(&S主\
    ,#S(#S(#S(#S(#S(#S(#S(#S(#S(#S(\
    #S(#S(#S(#S(#S(#S(#S(#S(#S(#S(\
    #S(#S(#S(#S(#S(#S(#S(#S(&S主\
    ,"00","0"),"01","1"),"02","2"),"03","3"),"04","4")\
    ,"05","5"),"06","6"),"07","7"),"08","8"),"09","9")\
    ,"10","A"),"11","B"),"12","C"),"13","D"),"14","E")\
    ,"15","F"),"16","G"),"17","H"),"18","I"),"19","J")\
    ,"20","K"),"21","L"),"22","M"),"23","N"),"24","O")\
    ,"25","P"),"26","Q"),"27","R"))\
    ,#代入(&S主\
    ,#S(#S(#S(#S(#S(#S(#S(#S(#S(#S(\
    #S(#S(#S(#S(#S(#S(#S(#S(#S(#S(\
    #S(#S(#S(#S(#S(#S(#S(#S(&S主\
    ,"28","S"),"29","T"),"30","U"),"31","V"),"32","W")\
    ,"33","X"),"34","Y"),"35","a"),"36","b"),"37","c")\
    ,"38","d"),"39","e"),"38","d"),"39","e"),"40","f")\
    ,"41","g"),"42","h"),"43","i"),"44","j"),"45","k")\
    ,"46","l"),"47","m"),"48","n"),"49","o"),"50","p")\
    ,"51","q"),"52","r"),"53","s"))\
    ,#代入(&S主\
    ,#S(#S(#S(#S(#S(#S(&S主,"54","t")\
    ,"55","u"),"56","v"),"57","w"),"58","x"),"59","y"))\
    ,&S英1 + &S英2 + #S(#S(#S(#TRIM(&S主,4),"/",""),":",""),".",""))
    end

    proc 主キーを変更( reffer 文 &S主 )
     var 整数 { &I年1 , &I年2 } ,文字列 { &S年 , &S月 , &S日 , &S時 , &S分 , &S秒 , &Sミリ }
     &I年1 = #文字位置("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",#SSTR(&S主,1,1))
     &I年2 = #文字位置("ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz",#SSTR(&S主,2,1))
     &S年 = #STR((&I年1-1)*52+&I年2,4)
     &S月 = #SSTR(&S主,3,1)
     &S日 = #SSTR(&S主,4,1)
     &S時 = #SSTR(&S主,5,1)
     &S分 = #SSTR(&S主,6,1)
     &S秒 = #SSTR(&S主,7,1)
     &Sミリ = #SSTR(&S主,8,1)
     call 変換(&S月)
     call 変換(&S日)
     call 変換(&S時)
     call 変換(&S分)
     call 変換(&S秒)
     &S主 = &S年+"/"+&S月+"/"+&S日+" "+&S時+":"+&S分+":"+&S秒+"."+&Sミリ
    end

    proc 変換( reffer STR &S暗号)
    &S暗号=#STR(#文字位置("0123456789ABCDEFGHIJKLMNOPQRSTUVWXYabcdefghijklmnopqrstuvwxy",&S暗号)-1,2)
    end

引用返信 [メール受信/OFF] 削除キー/
■7372 / inTopicNo.8)  Re[6]: SQL Server の IDENTITY について
□投稿者/ 尾形 -(2013/01/21(Mon) 06:41:51)
    > イベントで下記のようにすることも、
    > 複雑化してしまいます。
    外部DBを使う予定であれば
    全てイベントで実装するつもりでないと厳しいと思います

    自分の場合は、ライブラリ化して
    使いまわしできるようにしています


引用返信 [メール受信/OFF] 削除キー/
■7373 / inTopicNo.9)  Re[3]: SQL Server の IDENTITY について
□投稿者/ うにん -(2013/01/21(Mon) 10:32:58)
    関係ないと思うけど、SQLServer2000のヘルプでは
    >セッション内の 1 つのテーブルのみが IDENTITY_INSERT プロパティを ON に設定できます。
    となってました。

    > CREATE TRIGGER InsteadOfInsert on テスト表
    > INSTEAD OF INSERT AS BEGIN

    トリガの中ではIDを指定しないのだから、やるとしたら
    > SET IDENTITY_INSERT テスト表 ON
    こっちがOFFではないでしょうか?
    > INSERT INTO テスト表(
    > [項目1],
    > [項目2]
    > )
    > SELECT
    > [項目1],
    > [項目2]
    > FROM inserted
    > SET IDENTITY_INSERT テスト表 OFF
    > END;

    > しかし外部DBで行追加を試すと、3行目でIDENTITY_INSERTを
    > ONにしているにもかかわらず、
    > 「IDENTITY_INSERT が OFF に設定されているときは、
    > テーブル'テスト表'のID列に明示的な値を挿入できません」という、
    > エラーダイアログが出てしまいます。

    トリガを実行する前にINSERT文をチェックするんですかね?

    トレースログを見ました?

引用返信 [メール受信/OFF] 削除キー/
■7374 / inTopicNo.10)  Re[7]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/21(Mon) 17:56:52)
    今村さん、ありがとうございます。

    15文字削減できるわけですね。
    速度が問題になる場合、どれだけ速度が改善できるか検証してみようと思います。


    > * 生成文字の末尾に使用者名の2文字のイニシャルを付加すれば簡単では

    #ユーザ名の一部を使用するという意味でしょうか?
    そうではなく、端末ごとにイニシャルを事前登録する仕様は、できれば避けたいと考えております。
    仮にそのような仕様にする場合には、日時値は一定日時(例.1980/1/1)からの経過秒数に変換し、
    イニシャルではなく2桁の整数を使うことで、[ID]を数値型にしようと考えております。


    また、先程の式では #WSNAME と #行番号 のサニタイジングが抜けていたため、修正しました。

    項目値代入 [ID] = #日時文字列( #日時値, 9, 4, 2 ) \
        + #条件選択( \
            #文字数( #WSNAME ) > 10 , #右側文字列( #WSNAME, 16 ), \
            1, #WSNAME ) \
        + #文字列( #MOD( #行番号, 100000000 ) )
引用返信 [メール受信/OFF] 削除キー/
■7375 / inTopicNo.11)  Re[7]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/21(Mon) 18:03:13)
    尾形さん、ありがとうございます。

    そうですよね。
    やはりイベントが必要になってしまいますよね。

    ただ、障害発生時の原因究明や、手作業でのデータメンテナンスを想定すると、
    出来れば外部DBを直接手作業で編集できるようなシンプルさが保てる事が、
    望ましいとも感じております。
引用返信 [メール受信/OFF] 削除キー/
■7376 / inTopicNo.12)  Re[4]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/21(Mon) 18:12:29)
    うにんさん、ありがとうございます。

    ご指摘下さったとおりに、ONとOFFを入れ替えてみましたが、症状は全く同じでした。


    > トリガを実行する前にINSERT文をチェックするんですかね?

    おそらく仰る通りだと思います。


    > トレースログを見ました?

    ONとOFFの順序を変えても、そのままでも、トレースでは下記の様になりました

    エラー :KD1672:ODBC エラー データソース固有エラーコード : 544 SQLSTATE : 23000 [Microsoft][ODBC SQL Server Driver][SQL Server]IDENTITY_INSERT が OFF に設定されているときは、テーブル 'テスト表' の ID 列に明示的な値を挿入できません。 (C:\テスト表.xvw(外部DB) )
引用返信 [メール受信/OFF] 削除キー/
■7377 / inTopicNo.13)  Re[8]: SQL Server の IDENTITY について
□投稿者/ 今村 誠 -(2013/01/21(Mon) 22:54:10)
    そらさんこんにちは、桐でも同じだと思いますが、カウンター項目に
    値を設定しようとすれば断られると思います。
     外部データベースには主キーがないと索引も作れないし、検索や
    絞り込むにも不便だと思います。
    私の提案した日付+ユーザー特定暗号は英字2文字ですが50000人くらい
    PCユーザーがいても#WSNAMEと2文字の大文字英字と小文字英字を使い
    ユーザー名一覧表から表引きして代入すれば簡単に実装可能です。
     行番号を何桁付加するのか書いてありませんが、1行の追加入力に
    0,1秒以上必要ではないでしょうか?
     日時値を変換した時点で、同一使用者での同じ日時値はあり得ません。
    並び替えも問題ないしユーザー名も判別可能な中で、行番号を付加する
    意味が全くわかりません。
     カウンター数値項目が何のために必要なのか解りません。
     主キーがイベントで作れるのだから必要のない項目は削除してはいかが
    でしょうか。

引用返信 [メール受信/OFF] 削除キー/
■7378 / inTopicNo.14)  Re[5]: SQL Server の IDENTITY について
□投稿者/ うにん -(2013/01/21(Mon) 23:36:02)
    >>トレースログを見ました?
    >
    > ONとOFFの順序を変えても、そのままでも、トレースでは下記の様になりました
    >
    > エラー :KD1672:ODBC エラー データソース固有エラーコード : 544 SQLSTATE : 23000 [Microsoft][ODBC SQL Server Driver][SQL Server]IDENTITY_INSERT が OFF に設定されているときは、テーブル 'テスト表' の ID 列に明示的な値を挿入できません。 (C:\テスト表.xvw(外部DB) )

    ああ、すいません、桐の一括処理のトレースじゃなくて、ODBCとかSQLサーバ側のログのことです。

    postgresqlで使ってますけど、直接行追加するより、表に入れて読み込みしたほうが
    楽かなあという気が...
    (読み込みだと再抽出があんまり気にならないので)

引用返信 [メール受信/OFF] 削除キー/
■7381 / inTopicNo.15)  Re[6]: SQL Server の IDENTITY について
□投稿者/ 尾形 -(2013/01/22(Tue) 12:56:26)
    どうも、こんにちは
    シビアな状況でなければ、お手軽に


    手続き定義開始 フォーム::行挿入終了前(・・・・)
    条件    ( &モード <> 1 ) 手続き終了
    代入    &STR = " '" + \
              ",MAX( `ID` )" + \
              " FROM `mst_tokui`" + \
              " ; -- "
    代入    &秒 = #IS表
    手続き実行 Lib_編集表xvw( "ダミー.xvw" , "" , "" )
    再抽出   終了状態=&終了,変数使用=する
    代入    &件数 = #NVL( #数値( [項目1] ) , 0 )
    編集表   &秒
    項目値代入 [ID] = &件数 + 1
    手続き定義終了

引用返信 [メール受信/OFF] 削除キー/
■7382 / inTopicNo.16)  Re[6]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/22(Tue) 14:57:10)
    うにんさん、ありがとうございます。

    > ODBCとかSQLサーバ側のログのことです。

    私の調べ方が悪いのかもしれませんが、
    どちらの場合もトリガの動きなどは見えませんでした。


    > 直接行追加するより、表に入れて読み込みしたほうが
    > 楽かなあという気が...
    > (読み込みだと再抽出があんまり気にならないので)

    桐表の便利な機能を捨てて、あえて外部DBを直接編集する根本的な理由は、
    ワーク表と外部DBの同期がきちんとなされないトラブルでした。

    また、明記しておりませんでしたが、行追加の他にも、行訂正と行削除もするため、
    ワーク表と外部DBを同期する際は、読み込みではなく、次の様に若干複雑になります。

    編集表 テスト外部DB
    併合 テスト桐表, 両方, { [ID]照合, [項目1]複写, [項目2]複写 }

    編集表 テスト桐表
    削除行 有効
    絞り込み [ID]{ #削除 }

    編集表 テスト外部DB
    併合 テスト桐表, 両方, { [ID]照合, [項目1]複写, [項目2]複写 }
引用返信 [メール受信/OFF] 削除キー/
■7383 / inTopicNo.17)  Re[7]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/22(Tue) 15:18:12)
    尾形さん、ありがとうございます。

    このイベント処理では、同時複数アクセスで、[ID]がコリジョンするリスクはないでしょうか?


    ダミー.xvwで[ID]が最大のレコードの[項目1]に1足した数を、
    最初の編集対照表の[ID]に入れるわけですね。

    つまり[ID]を別のテーブルの[項目1]から生成する、と。
    ここで得られる[項目1]にはどんな値がはいっているのでしょうか?
引用返信 [メール受信/OFF] 削除キー/
■7384 / inTopicNo.18)  Re[8]: SQL Server の IDENTITY について
□投稿者/ 尾形 -(2013/01/22(Tue) 16:16:42)
    >  &STR = " '" + \
          ",MAX( `ID` )" + \
          " FROM `mst_tokui`" + \
          " ; -- "

    ダミー.xvwで、任意の入力中のテーブル
    (上記サンプルは、mst_tokuiとしてます)
    から、[ID]のMAXを取得してきます


    > つまり[ID]を別のテーブルの[項目1]から生成する
    同一テーブルからMAX取ってきます

    http://tayu.o0o0.jp/bbs/kiri/cbbs.cgi?mode=al2&namber=5556&no=0&KLOG=36
    ここの#5586以降あたりが
    面白いですよ


引用返信 [メール受信/OFF] 削除キー/
■7385 / inTopicNo.19)  Re[9]: SQL Server の IDENTITY について
□投稿者/ 尾形 -(2013/01/22(Tue) 16:43:42)
    ちょっと補足

    &STR = " '" + \
        ",`得意先名`" + \
        ",`住所`" + \
        " FROM `mst_tokui`" + \
        " WHERE `ID` = 123" + \
        " ; -- "
    結合 "ダミー.xvw"・・・
    これで、[項目1]に得意先名、[項目2]に住所が入ります
    (得意先IDは123指定)


    &STR = " '" + \
        ",MAX( `伝票ID` )" + \
        " FROM `denpyo_meisai`" + \
        " ; -- "
    結合 "ダミー.xvw"・・・
    これで、[項目1]にdenpyo_meisaiテーブルのMAX(`伝票ID`)
    が入ります


    動的にテーブルも項目も変更できます

引用返信 [メール受信/OFF] 削除キー/
■7386 / inTopicNo.20)  Re[9]: SQL Server の IDENTITY について
□投稿者/ そら -(2013/01/22(Tue) 17:49:30)
    2013/01/22(Tue) 17:58:21 編集(投稿者)

    尾形さん、ご丁寧にありがとうございます。

    > 同一テーブルからMAX取ってきます

    ということは、やはり同時複数アクセスで、[ID]がコリジョンするリスクがないでしょうか?

    つまりある端末が、行挿入終了前のイベント処理をしている間に、
    別の端末が同様に行挿入終了前のイベント処理を開始して、MAX( ID )を取得すると、
    両方の端末で重複した [ID] が設定されてしまい、先に行追加が完了した方のレコードが、
    消えてしまわないかということです。


    > 動的にテーブルも項目も変更できます

    SQLインジェクションを使うわけですね。
    一段落しましたら、勉強させて頂きます。
引用返信 [メール受信/OFF] 削除キー/

次の20件>

トピック内ページ移動 / << 0 | 1 >>

[このトピックに返信]
Mode/  Pass/

HOME HELP 新規作成 新着記事 トピック表示 ファイル一覧 検索 過去ログ

- Child Tree -
- Antispam Version -