- - PR -
DTSSourceオブジェクトの文字列変換
1
| 投稿者 | 投稿内容 | ||||||||
|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2006-08-25 02:09
おせわになります。
現在、DTSにてテーブルAからテーブルBにデータをコピーする処理を作成しています。 その際、テーブルAの在るフィールドデータについて文字列判定処理を実施し、 データが保持する文字パターンが一定条件を満たす場合、部分的に文字の置き換えを 実施、その上でテーブルBに格納したいとおもっています。 そこで、テーブルAからテーブルBへのデータ変換タスクで在るフィールドデータに ついてActiveXスクリプト(VBS)により変換を定義しました。 下記はそのスクリプトの一部です。 <ここから>-------------------------------------- Dim strValue ' 変換前文字列格納変数 strValue = CStr(DTSSource("before")) <ここまで>-------------------------------------- ※DTSSource("before")のbeforeは変換元フィールド名です。 上記のように変換元のフィールドデータ(DTSSourceオブジェクト)を 文字列判定処理前に文字列に変換しようとしたのですが、下記のように エラーとなってしまいました。 <エラー>---------------------------------------- エラーの説明:型が一致しません。:'DTSSource' ------------------------------------------------ CStr関数をつかってDTSSourceをオブジェクトから文字列に変換をしているつもり なのですが、上手くいきません。 DTSSourceオブジェクトを文字列に変換するにはどのようにしたらよいのでしょうか。 ご教授の程、よろしくお願いいたします。 <環境> Windows2000Server (SP4) Microsoft SQL Server2000 Standard Edition (SP4) | ||||||||
|
投稿日時: 2006-08-25 13:20
before列にnullが入ってるんじゃないかなぁ・・・。
CStr関数って引数がnullだとエラーになるんじゃなかったですかね。 IsNull関数でどうにかしてやればいいのかも。 または、SQLのほうでISNULL(before,'')するとか。 http://www2.jiu.ac.jp/~en/VBSdocs/87.htm | ||||||||
|
投稿日時: 2006-08-25 20:31
お疲れ様です。 TimberLandChapel です。 不思議な現象ですね。 かめたろさんのご指摘のように,CStr に Null 値を放り込むと実行時エラーに確かになりますが, その場合は, Null の使用の仕方が不正です:CStr というエラーになるはずです。 CStr の処理がこけているのであれば,エラーの説明は CStr になるはずです。 一方,ここでは 'DTSSource' になっていますね。 型変換がエラーを起こしているのではないと思います。 何か再現しないかといろいろ試してみましたが, 'DTSSource'で型エラーは出せていません。 パイプするテーブルの定義などをいただけると,再現性を試せるのですが。 ---------- TimberLandChapel Micorosoft MVP for Windows Server System - SQL Server(Jul 2005 - Jun 2007) http://blogs.timberlandchapel.com/blogs/timberlandchapel/ | ||||||||
|
投稿日時: 2006-08-27 23:12
おせわになります。
かめたろ様、TLC様、ご回答ありがとうございます。 (リターンが遅れまして、申し訳ありません。) 当現象なのですが以下のようにコードを修正した結果、エラーがでなくなりました。 <旧コード>------------------------- メインコード(関数AB呼び出し) Function A() 関数Aの処理 End Function Function B() 関数Bの処理 End Function ------------------------------------- <修正コード>------------------------- Function main() メインコード(関数AB呼び出し) End Function Function A() 関数Aの処理 End Function Function B() 関数Bの処理 End Function ------------------------------------ 関数の呼び出し部にもFunctionでくくることで解消しました。 (お騒がせいたしました^^;) ところが、エラーは解消されたのですが、格納されたDTSSourceの内容について よくわからない現象が発生しているのです。 strValue = CStr(DTSSource("before")) として strValue 自体を DTSDestination("after") = strValue (after は格納先テーブルのフィールド) とした場合、正常にテーブルに格納されるのですが strValue = CStr(DTSSource("before")) strValue2 = strValue DTSDestination("after") = strValue2 とした場合は、なぜかデータが抜けてしまいます。 (フィールド内は<Null>とも表示されず、空白です。) strValue2 = strValue の部分の値の渡し方に問題があるのでしょうか? 色々と調べたのですがわかりませんでした。 何かご存知でしたら、何卒よろしくお願いいたします。 | ||||||||
|
投稿日時: 2006-08-28 00:22
お疲れ様です。 TimberLandChapel です。 更新できない列は,text,ntext 型を使用していませんか? でない場合は, スクリプト内で中間変数(vbs ですから,内部処理型〜のバリアントにすべてなってしまいますから)を用いないで 「DTSDestination("after")」をそのまま加工し続けるということができます。 DTSDestination("after") = Replace(DTSDestination("after"),"A","B") のようにです。 一方, text,ntext型列には, このフィールドの更新の形態が異なることから,データをパイプできないはずです。 これらのフィールドにデータをパイプするには, 「照合」を用いて,UPDATETEXT ステートメントなどを発行してあげる必要があります。 いかがでしょう? ---------- TimberLandChapel Micorosoft MVP for Windows Server System - SQL Server(Jul 2005 - Jun 2007) http://blogs.timberlandchapel.com/blogs/timberlandchapel/ | ||||||||
|
投稿日時: 2006-08-28 09:36
あー、そっかー。適当なことを書いちゃって余計に混乱させるトコでしたね。スミマセン・・・。TLCさん、フォローありがとうございます。 -------書き込み追加---------------
なるほど!「照合」だけに SELECT だけよって先入観があるけど、そうゆう使い方もありですね! [ メッセージ編集済み 編集者: かめたろ 編集日時 2006-08-28 09:49 ] | ||||||||
|
投稿日時: 2006-08-30 21:39
おせわになります。
ご返答おくれまして、重ね重ね申し訳ありません。
いえいえ、勉強になります。 ありがとうございました。^^
教えていただいたやり方でうまく出来ました。 ありがとうございました。 今回、DTS関連のオブジェクトについて自分でも色々と調べたのですが まとまった情報を見つけることができませんでした。 何かあるようでしたら、教えていただけるとありがたいです。。。 かめたろ様、TLC様、ありがとうございました。 | ||||||||
1
