タイトル : Re^2: vb6でaccessのデータ型が長いテキストが読み込めない 投稿日 : 2024/02/06(Tue) 13:56 投稿者 : たろう
魔界の仮面弁士様、色々と詳しくありがとうございます。 まず結果ですが、下記のように対応したら出来ました! 本当にどうしていいかわからず困っていましたので助かりました。 > ''' 修正前 > 'If IsNull(rs.Fields(0).Value) Then > ' s0 = "" > 'Else > ' s0 = CStr(rs.Fields(0).Value) > 'End If > 'rs.Fields(1).Value = s1 > > ''' 修正後 > s0 = "" & rs.Fields(0).Value > rs.Fields(1).Value = "" & s1 > のようにして対応していました。 > 空文字列と連結することで、 Null や vbNullString を "" に置き換えるという回避策です。 下記は「Value」に引き渡した時点でnullになってしまい結果を得ることができませんでした。 > Public Function DumpText(ByVal Value As Variant) As String > Dim S As String: S = "" > Dim B() As Byte: B = "" & Value > Dim P As Long > For P = LBound(B) To UBound(B) > S = S & Right$("00" & Hex(B(P)), 2) > Next > DumpText = S > End Function 下記の件、大変参考になりました。 列名でNameやDateも使用していましたので、これからは気を付けたいと思います。 > 今回の事象を抜きにしても、その列名はあまり良くないですね。 > LongText は予約語なので、フィールド名に使うことは避けた方が無難です。 > > 予約語を SQL 中で使う場合、[〜] などで囲むなどのエスケープ処理が必要になるなど、 > 使い勝手が悪いですし、誤動作の要因にもなりえるため、別の名前の方が安全です。 > (そのほか、No とか Name とか Date といった列名もトラブルの元です) こちらも気を付けたいと思います。 > COM オブジェクトに対する暗黙の自動型変換はパフォーマンス劣化の要因にもなりますので、面倒がらずに > If Not IsNull(TestTable00![LongText].Value) Then > If Not IsNull(TestTable00("LongText").Value) Then > If Not IsNull(TestTable00.Fields("LongText").Value) Then > If Not IsNull(TestTable00.Fields.Item("LongText").Value) Then > If Not IsNull(TestTable00.Collect("LongText")) Then > などと記述することが望ましいです。 "データのチェックができません。"というメッセージは自分がエラーの時にだしていたメッセージでした。 色々自分の中で整理できずに、大文字小文字なども適当になっており申し訳ありませんでした。 また質問することがありましたら、情報はきちんと正確にお伝えするように気を付けます。 開発環境は今のところどうにもならないのですが、たくさんの問題点や確認しなくてはいけない点を細かく教えていただき感謝しております。 本当にありがとうございました。 |