1

PDFファイルのバイナリを格納するために使用されるSQL Server 2000テーブルに画像列があります。

SqlServer 2000 DTS を使用して、列の各行の内容を実際の物理ファイルにエクスポートする必要があります。

http://www.freevbcode.com/ShowCode.asp?ID=1654&NoBox=Trueで vb の次のメソッドを見つけました。

Set rs = conn.execute("select BinaryData from dbo.theTable")
FileHandle = FreeFile 
Open ("AFile") For Binary As #FileHandle 
ByteLength = LenB(rs("BinaryData")) 
ByteContent = rs("BinaryData").GetChunk(ByteLength)
Put #FileHandle, ,ByteContent 
Close #FileHandle

残念ながら、DTS スクリプト タスクは VB ではなく VBSCript であり、3 行目のASキーワードでスローされます。

他のアイデアはありますか?

4

2 に答える 2

1

バイナリファイルの書き込みは、VBScriptでは非常に難しい作業です。VBScriptによって公開される唯一の直接ファイル操作は、テキストファイルの書き込みのみをサポートするFileSystemObjectオブジェクトに存在します。唯一の実行可能なオプションは、ADO Streamオブジェクトを使用することです。これは、VBScriptがスクリプトで作成されたバイト配列をCOMオブジェクトに渡すことをサポートしていないため、依然として面倒です。COMオブジェクトは、任意のバイナリデータを書き込むことができる必要があります。

これは、おそらく機能しないが、正しい解決策への道に進む可能性のあるADOストリームを使用する手法です。

adTypeBinary = 1

Set rs = CreateObject("ADODB.Recordset")
rs.Open "SELECT binary_data FROM dbo.data_table", "connection string..."
Set strm = CreateObject("ADODB.Stream")
strm.Type = adTypeBinary
strm.Open
strm.Write rs.Fields("binary_data").GetChunk( _
    LenB(rs.Fields("binary_data").Value))
strm.SaveToFile "binarydata.bin"
strm.Close
rs.Close

Accessを使用してこのコードを試しましたが、残念ながら機能しなかったようです。作成したテーブルにあるものと同じバイナリデータを取得できませんでしたが、何が違うのかを確認するために16進エディタに入る必要はありませんでした。

ADO操作でエラーが発生した場合は、スクリプトの先頭に「On Error Resume Next」を追加し、このコードを使用することで、実際のメッセージを取得できます。

For Each err In rs.ActiveConnection.Errors
    WScript.Echo err.Number & ": " & err.Description
Next
于 2009-02-19T02:24:23.740 に答える
0

可能であれば、DTS の代わりに SQL Server Integration Services (SSIS) を使用し、VB.NET を使用できるスクリプト タスクを使用します。

SQL Server 2000 データ ソースに接続し、エクスポートされた出力をファイルに指定できます。

于 2009-02-18T20:31:14.603 に答える