Page 276 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 通常モードに戻る ┃ INDEX ┃ ≪前へ │ 次へ≫ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ ▼GETステートメント レコード長エラー かもねぎ 03/5/19(月) 13:04 ┗Re:GETステートメント レコード長エラー Hirofumi 03/5/21(水) 21:21 ┗Re:GETステートメント レコード長エラー かもねぎ 03/5/21(水) 23:46 ─────────────────────────────────────── ■題名 : GETステートメント レコード長エラー ■名前 : かもねぎ ■日付 : 03/5/19(月) 13:04 -------------------------------------------------------------------------
初めて投稿させていただきます。 他の人がaccess95で作成したシステムを、初心者なりに 四苦八苦しながらaccess2002へ変換しています。 環境は、OS=XP access=2000と2002の共存です。 ランダムファイルからデータを取得してる(と思う)のですが、 2002で実行すると、実行時エラーが発生します。 ■エラーコード59:レコード長が一致しません。 もともと取得したいレコードは700バイトなのですが, (名前や電話番号や数字データが混在してますが固定長です) Dim REC As String * 700 ⇒ 300(ぐらい)にすると エラーにはかからず、データを取得します。 取得したデータを調べると253バイトしか取得できていない のですが、ちゃんと700バイト取得するにはどのようにすれば いいのでしょうか。 いろいろ調べた結果,unicodeの関係など疑っていますが 解決策が思い浮かびません。 access95時でのソースをそのまま書きます。 Private Sub PCCOPY() DoCmd.Hourglass True On Error GoTo Bgin_Err I_ERR_SW = 0 Dim FPATH As String '* Dim FNAME As String '* Dim REC As String * 700 '* ⇒300位だと動く Dim I As Integer '* Dim MAX As Integer '* '* '** ファィル名 設定 '* FPATH = JhtdataPath ' パス名 読み込み FNAME = FPATH & "TK" Close Open FNAME For Random As #1 Len = 700 Close #1 Open FNAME For Random As #1 Len = 700 MAX = (LOF(1) / 700) '* TRX 件数 Open "C:\HAICHI\HT\TK.WK" For Random As #2 Close #2 Kill "C:\HAICHI\HT\TK.WK" Open "C:\HAICHI\HT\TK.WK" For Random As #2 Len = 700 For I = 1 To MAX Get #1, I, REC ⇒ここでエラー Put #2, I, REC Next I 初心者な為、とんちんかんな質問になっていたらすいません。 足りない情報などございましたら、教えてください |
私も余り詳しくないので、間違っていたらゴメンナサイ プロシージャの全文が書かれていないのではきりしませんが 1、Upされたコードでは、「エラーコード59: レコード長が一致しません。」 は出ない様な気がします、実際にエラーを起こしているコードは別のものでは? 理由、上記のエラーは、Len節のバイト数(読み込みバファサイズ)より、 取り込む変数のバイト数が大きい場合に起きると思います Len = 700 Dim REC As String * 700 なのでこの点は無理がないと思います ただ、通常は以下のような書き方をします Open FNAME For Random As #1 Len = Len(REC) 2、Upされたコードは、 >ランダムファイルからデータを取得してる(と思う)のですが データを取得しているのでは無く、データを別のファイルにコピーしている と思われます(なんか非常に大時代な書き方の様な気がします) VBAにFileCopyステートメントとDir関数が有りますのでその方が簡単でしょう 3、あと気に成る点は、 Dim MAX As Integer と有りますが、MAXがVBAの予約語で有る可能性が有りますので買えた方が善いかも? あと MAX = (LOF(1) / 700) と有りますが、これは MAX = (LOF(1) \ 700) とした方が善いでしょう |
▼Hirofumi さん:回答ありがとうございます。助かりました。 >>ランダムファイルからデータを取得してる(と思う)のですが > > データを取得しているのでは無く、データを別のファイルにコピーしている > と思われます(なんか非常に大時代な書き方の様な気がします) > VBAにFileCopyステートメントとDir関数が有りますのでその方が簡単でしょう そうでした!ただファイルがコピーしてあるだけでした! なにしろ、初心者な上、作成者がいないので不可解な記述に とまどっています。(AC95時にはその書き方しかできなかったのでしょうか) いろいろ試してみたところ、 漢字が入るフィールドが怪しかったので、モジュールでユーザー定義を 宣言して、フィールドを分けて試したら一応うまくいきました。 1データは700バイトなんですが、 Open FNAME For Random As #1 Len = Len(REC) で、取得しているlenは720でした。やはり漢字のフィールドが混ざってるのが 原因でしょうか。string型は 255バイトまでとか? しかし、この問題はfilecopyでうまくいきそうです。 ヒントとアドバイス ありがとうございました!!! >3について。 アドバイスありがとうございます。 アドバイスどおり、変更しました! |