
こんにちは。宜しくお願いします。
かなり古いシステムでVB6で開発されているものがあるのですが、昨日、データーベース(SQLServer2005)のとあるテーブルの列のサイズをVarchar(1000)からVarchar(2000)へ変更しました。
すると、いままで問題なく稼動していたシステムにエラーが発生しまして、デバッグしてみると、SELECT文で取得した変更箇所の列の値が、NULLで戻ってきました。
NULL値の対策として、IsNull関数を使用して、NULL値の場合には、別の文字列に変換するようにしてあるのですが、IsNull関数ではNull=Falseを返します。
いろいろネットで文献を探しまして、Where句に指定している列名をSELECT句に含まないといけないという記述を発見しましたが、実行しても結果は変わりませんでした。
なにかSQLServer側で意識しなくてはいけない事があるのでしょうか。
当方、DBにはあまり詳しくないので、原因に心当たりのある方はご教授頂ければ幸いです。
A 回答 (2件)
- 最新から表示
- 回答順に表示
No.2
- 回答日時:
奥が深いと思ったら、どこがおかしいのかは最終のアプリケーションの戻りだけを調べるのではなく、
いろいろな方法で問題がある個所を特定する必要がありますね。
1)SQL Server Management StudioでSQL Serverに直接接続する
・古いアプリケーションと書いてあったので、もともとSQL Server 2005ではなかったのであれば、
データベースのプロパティで互換性レベルが90になっているかどうか確認する
・クエリ画面でテーブルを直接SELECTし、確かに値が入っていることを確認する
・対象のクエリを投げてみて、確かに値が入っていることを確認する
2)MSDASQL以外の違うプロバイダを使って接続してみる
・ADOで接続してみる(ゴミプログラムを書いて確認)
Dim cn As Object
Dim rs As Object
Set cn = CreateObject("ADODB.Connection")
Set rs = CreateObject("ADODB.Recordset")
cn.Open "Provider=SQLOLEDB;Data Source=インスタンス名;User ID=ユーザ名;Password=パスワード;Initial Catalog=データベース名"
rs.Open "クエリ",cn
Do Until rs.EOF
' Msgbox や Debug.Printで中身を確認
rs.MoveNext
Loop
rs.Close
cn.Close
Set rs = Nothing
Set cn = Nothing
・上記のProviderを"SQLNCLI"に変更して確認してみる
今の段階ではなんとも言えないですが、MSDASQLではエラーでSQLOLEDBでは正常ならば、プロバイダの問題という可能性もありますし、最終的にはテーブルを再作成(外部キーを保管して別のテーブルにデータを移すのは簡単にできます)すれば解決するかもしれません。
この回答への補足
jamshid6さん、詳しいご回答ありがとうございます。
問題は解決しておりませんが、回避策はできました。
レコードセットをオープンしてそのレコードセットから直接、テキストボックスに値を代入していたのですが、レコードセットオープン直後に一旦、変数に格納し、その上でテキストボックスに代入するとエラーがなくなりました。
× テキストボックス1.text=rst!列名
○ 変数1=rst!列名
テキストボックス1.text=変数1
これがどういうことかよくわかりませんが、すべての項目でなく、特定の列のみに発生するというのが解せません。
ちなみにエラーなる列は、varchar(2000)ですが、これより大きな別の列は問題なく稼動してます。
やはり原因とした、エラーとなる列のサイズを変更したことによることが起因のような気がします。
もしかすると、VB側の問題かもしれませんね。
一応、ご教授頂きました点は、試してみたいと思います。
ありがとうございました。
No.1
- 回答日時:
IsNull関数というのはVB6のIsNull関数?
それなら単純にその変換部分に何らかの問題があるんじゃないかと思いますが。
あと、NVarcharに変換したとか…(それでこういうエラーがでるとも思えませんが)
ビュー経由でアクセスしているならそのビューを作りなおすとか。
あ。まさかMDBのリンクテーブル経由でDBアクセスしてるとかはないですよね?
その場合、リンクテーブルは作り直しになりますが…。
この回答への補足
khazad-leftyさん、ご回答ありがとうございます。
>>IsNull関数というのはVB6のIsNull関数?
はいそうです。この関数をは他の列でも使用してますのでこの部分が問題の可能性は低いような気がします。
そもそもデバックで該当部分にブレークを張ってみてみると、DBから返却された列に、値が入っていたり、NULLになっていたりするんです。本来は値が入っている項目になります。
なにかプログラムのバグという雰囲気ではないのです。
MDBは使用してません。SQLServerにODBC(DAO)で接続しています。
確かにビューを呼び出してるので、ビューを作り直してみましたし、ビューを経由しないで直接テーブルを参照しても改善されませんでした。
なんとなく、SQLServer側の特にカーソル関係の問題ではないかと思いますけど、正直わかりません。
ネットでも同様の現象の事例が見つからず、解決の糸口すらない状態です。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(コンピューター・テクノロジー) 【Tableau Desktop】文字列から8桁の数字を日付型(yyyyMMdd)として取得 1 2023/07/31 10:17
- MySQL PHPとMySQLを使った掲示板の作り方 1 2022/06/02 13:00
- MySQL エラー 1068 (42000): 複数の主キーが定義されていますエラー 2 2022/11/17 04:36
- Access(アクセス) アクセス テーブルの空白を変数に置換するボタンが作りたい 4 2022/07/08 11:19
- その他(データベース) Accessのクエリで1フィールドの抽出条件設定をNullでなく全角半角含む空白のみの文字列でない文 1 2023/04/24 15:20
- PHP php テーブルが作成できない 1 2022/11/17 23:41
- PHP PHPでCSVを出力するさいに、ループの中で前の行の値を変更したい 3 2022/10/27 17:44
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- Visual Basic(VBA) シートをコピーする下記記述でダイアログを用いた記述がわかりません?( A = Dir(ThisWor 4 2022/08/22 12:26
- MySQL `picture` varchar(255) のコマンドで間違いないでしょうか? 1 2022/11/21 04:08
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
私が考えたAccessのテーブル設...
-
ACCESSツール自動バージョンア...
-
データベースの基本についてです。
-
Access2003 リレーションされ...
-
デザインビューで、連結式 を...
-
Accessの計算について
-
Accessで突然編集できなくなり...
-
アクセス2000のルックアッ...
-
Accessでテーブルからテーブル...
-
Accessでエラー
-
テーブルの書き出し?
-
集計方法のアドバイスほしいです!
-
accessのマクロでODBC接続で外...
-
会社別一覧表を作りたい
-
関数の実行について
-
注文した商品名をマスターで作るか
-
2つのテーブルを比較して一致し...
-
Excelについてご質問です。 テ...
-
ACCESSに同時アクセス(編集)を...
-
Accessレコードの追加や変更が...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Accessでテーブル名やクエリ名...
-
Accessでテーブルからテーブル...
-
Accessレコードの追加や変更が...
-
Accessでvlookupみたいなことは...
-
ACCESSのSQLで数値型に変換する...
-
デザインビューで、連結式 を...
-
Accessクエリでの、LIKE条件
-
2つのテーブルを比較して一致し...
-
access テーブル内のレコード...
-
テーブル作成クエリで主キーを設定
-
SQLで条件指定結合をしたいがNU...
-
3つの表を1つに縦に連結する
-
ACCESSに同時アクセス(編集)を...
-
Accessの追加クエリで既存のテ...
-
ファイルメーカ 検索実行せず...
-
リンクテーブルを CopyObject ...
-
DAOのTableDefs("TblName").Con...
-
INSERT時にデータ登録とmaxの発...
-
ODBCで接続するとDBに変更/追加...
-
SQLで日付を条件に削除したい
おすすめ情報