tagCANDY CGI VBレスキュー(花ちゃん)の Visual Basic 6.0用 掲示板 [ツリー表示へ]   [Home]
一括表示(VB6.0)
タイトルリッチテキストのデータ
記事No12226
投稿日: 2008/05/08(Thu) 19:38
投稿者まい
リッチテキストボックスのプロパティTextRTFの値(何か{}や''がつく長い文字列)を
string型の変数に入れて、DBのテーブルのフィールドに登録したいのですが、
フィールド型はTEXT型、SQL-SERVERです。
UPDATE文を実行するとエラーになってしまいます。
レコードセットを作ってAddNewしてフィールドにセットすると登録出来ます。
UPDATE文でセット出来ないのでしょうか?
どうすれば登録できるのでしょうか?

[ツリー表示へ]
タイトルRe: リッチテキストのデータ
記事No12227
投稿日: 2008/05/08(Thu) 20:11
投稿者いな
> UPDATE文を実行するとエラーになってしまいます。

エラーになってしまいます。という質問に例外なくいわれますが、
「どんなエラーメッセージが表示されるか?」
「どんなエラー番号が表示されるか?」
を明記し、掲示板を見ている人に何が起こっているのか?
を伝えることが一番の解決への近道かと思います。

また、単純な構文エラーであることもありますので、
発行しているUPDATE分を記載すると、
「ここは○○じゃなく△△と書くといいと思います。」
というような回答も多いので、
そういった情報があれば解決が近いかと思います。

[ツリー表示へ]
タイトルRe: リッチテキストのデータ
記事No12229
投稿日: 2008/05/08(Thu) 20:25
投稿者魔界の仮面弁士
要は、
 UPDATE Table Set Field = 'I am a boy.'
は OK でも、
 UPDATE Table Set Field = 'I'm a boy.'
は NG だ、という話ですよね。


対処方法としては、「'」等をエスケープして
 UPDATE Table Set Field = 'I''m a boy.'
とすれば動作しますが、こういう場合には、ADODB.Parameter を使った方が良いでしょう。

手元に SQL Server が無いのでうろ覚えですが、ADODB.Command オブジェクトを使って
 Set cmd.ActiveConnection = cn
 cmd.CommandText = "UPDATE Table SET RTF = ? WHERE ID = ?"
などとしておいて、
 cmd.Parameters(0).Value = RTF1
 cmd.Parameters(1).Value = ID1
 cmd.Execute
 cmd.Parameters(0).Value = RTF2
 cmd.Parameters(1).Value = ID2
 cmd.Execute
のようにして実行すれば良かったような気が。あるいは、省略構文として
 cmd.Execute , Array(RTF3, ID3)
 cmd.Execute , Array(RTF4, ID4)
とか。


なお、パラメータの定義は、cmd.Refresh すれば取得されますが、
パフォーマンス重視の場合は、CreateParameter メソッドで定義してください。

[ツリー表示へ]
タイトルRe^2: リッチテキストのデータ
記事No12230
投稿日: 2008/05/09(Fri) 11:18
投稿者まい
UPDATE文は合っています。
問題はリッチテキストボックスの性質が関係していまして・・
リッチテキストボックスを使った事があれば質問イメージが伝わると
思ったんですけど・・
魔界の仮面弁士さまには伝わったようですね。
おかげでやっと出来ました。
ADDNewが出来てUpdateが出来ないなんておかしいと思ってたので・・やり方がないかと。

新規VBPでリッチテキストボックスを1つ貼り付けて
Debug.Print RichTextBox1.TextRTFとすると

{\rtf1\ansi\ansicpg932\deff0{\fonttbl{\f0\fnil\fcharset128 \'82\'6c\'82\'72 \'82\'6f\'83\'53\'83\'56\'83\'62\'83\'4e;}}
\viewkind4\uc1\pard\lang1041\f0\fs18 RichTextBox1
\par }

↑みたいな訳わからない文字列が取得出来ます。(リッチテキストボックスのデータの属性データのようですが)
これをセットするわけなのですが・・

恐らく''がたくさん付くからだと思うのですが・・
でも''をはずすわけにはいきません。なぜなら意味不明な文字列には、
リッチテキストボックスのデータが入っていますから
今度、逆にTABLE1から読み出した場合、正しく表示出来なくなってしまいます。

[ツリー表示へ]