RecordsetのFieldのSizeを設定するには?

解決


shin  2004-09-11 08:58:39  No: 85515

はじめまして、shinと申します。
以下のコードで、エクセルのワークシート全体のデータをレコードセットに
格納しようとしました。

Set db = ws.OpenDatabase(strPath, False, False, "Excel 8.0;HDR=NO;")
Set rs = db.OpenRecordset("Sheet1$")

しかし、一部データがレコードセットに格納されずNull値になってしまいました。
原因を調べたところ、おそらくレコードセットのFieldのSizeが
違っていたからだと思われます。
FieldのSizeが255に設定されているものと、8に設定されているものがあり、
8のFieldに格納されるデータのSizeが8を超えていたためにNull値になっていたと思われます。

ワークシートのデータを格納する前に、
レコードセットのFieldのSizeを255に統一しておく方法はありませんか?
もしくは、この問題を解決する方法が思いつく方、お助けください。
よろしくお願いします。


だい  URL  2004-09-13 22:51:28  No: 85516

PRB: Excel Values Returned as NULL Using DAO OpenRecordset
http://support.microsoft.com/default.aspx?scid=kb;EN-US;194124

デフォルトでは、
先頭8行目までで数値型なのか文字列型なのかを自動判別します。
その結果、数値型と認識されたフィールド出現する文字列データはNullになります。

回避策としては、

IMEX=1  を追加して、強制的に文字列型として認識させる方法があります。
Set db = ws.OpenDatabase(strPath, False, False, _
"Excel 8.0;HDR=NO;IMEX=1;")
としてみてください。


shin  2004-09-18 09:28:58  No: 85517

だい様、アドバイス通りにコードを変更したところ、
うまくデータを取得することができました。
ありがとうございました!!


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加