今だけ人気マンガ100円レンタル特集♪

お世話になります。

MS-SQL2000サーバーから、MS-ACCESS-VBA上でDAOにてレコードセットを取得、あるフィールドのValueをテキストファイルに書き出したい

という処理を行っております。

このあるフィールドがテキスト(Verchar)なのですが
Valueが255文字を超えている場合、変数に入れた時点で256文字目以降が
文字化けしてしまいます。

256文字目以降も変数に入れてテキストファイルに書き出したいのですが
どのようにすれば実現できますでしょうか?

Viewをつくり複数フィールドに分けて(255文字づつ)出力するなども
考えたのですが、どうにもスマートでなく・・・・

どなたか良い考え・経験をお持ちの方、アドバイスお願いします。

このQ&Aに関連する最新のQ&A

A 回答 (2件)

Stringって32767バイト入りませんか?


dim sWk as string * 32767 としても入らなければ
取り出し方法に問題があるかも知れませんね。

ご確認ください。
    • good
    • 0

テキスト型で受けると255バイトの制約があるので「メモ型」では?

この回答への補足

ご回答ありがとうございます。

どちらかというとアクセス云々というよりも、VBAのコードの中で変数(String等)にどうやったら256文字以上のテキストを格納できるか?といった質問です。。

説明がわかりにくくてすいません。

補足日時:2007/03/14 09:20
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

QVBAで文字を反映させると255文字の制限になってしまいます。

VBAで文字を反映させると255文字制限に引っかかってしまいます。
最大で700文字程度反映できるようにしたいのですが、どのように設定すればよろしいでしょうか?
現在、
Worksheets("sheet1").Cells(47, 42).FormulaR1C1 = Worksheets("sheet2").Cells([i] + 2, 43).FormulaR1C1
とこのように設定しています。
コードを区切ってしまえばきちんと表示させることができるのですが、変数を使って繰り返し表示させようと思っているので区切らないほうが理想です。

すべてのコードは長めです。
教えてください。

Aベストアンサー

私の問題認識に誤りがあるのかもしれませんので、下記を実行しても 255
文字になるのか確認して下さい。

下記のテストコードは Sheet1 の A1 セルに 700 文字の文字をセットし、
Copy メソッド、FormulaR1C1 プロパティーのそれぞれで、Sheet2 の A 列
へ転記しています。

きちんと転記が成功したかを確認するために、Sheet2 の B 列には LEN
関数で文字数を数えています。

なお、当方( WindowsXP + Excel2002 )では、どちらも255文字といった
現象はありません。

Sub TestMacro()
  
  Dim strBuf As String
  
  With Worksheets("Sheet1").Cells(1, "A")
    ' セルの書式を「標準」にする
    .NumberFormat = "General"
    ' 700文字のテストデータを A1 セルにセット
    .Value = String$(700, "A")
    ' コピーテスト
    .Copy
    ' 式の転記テスト
    strBuf = .FormulaR1C1
  End With
  
  With Worksheets("sheet2")
    ' ワークシート Sheet2 の A1 セルにペーストテスト
    .Cells(1, "A").PasteSpecial
    .Cells(1, "B").Formula = "=LEN(A1)"
    ' ワークシート Sheet2 の A2 セルに式を転記
    .Cells(2, "A").FormulaR1C1 = strBuf
    .Cells(2, "B").Formula = "=LEN(A2)"
  End With
  
End Sub


あるいは文字列の固定長変数を使ってるとか...

Sub Sample()

  Dim strBuf As String * 255 '255 Byte
  
  With Worksheets("Sheet1").Cells(1, "A")
    .Value = String$(700, "A")
    strBuf = .Value
  End With
  Worksheets("sheet2").Cells(1, "A").Value = strBuf

End Sub

この Sample プロシージャの場合、700文字のデータを変数 strBuf に
代入しようとしてますが、実際には先頭の 255 バイトしか代入されません。

私の問題認識に誤りがあるのかもしれませんので、下記を実行しても 255
文字になるのか確認して下さい。

下記のテストコードは Sheet1 の A1 セルに 700 文字の文字をセットし、
Copy メソッド、FormulaR1C1 プロパティーのそれぞれで、Sheet2 の A 列
へ転記しています。

きちんと転記が成功したかを確認するために、Sheet2 の B 列には LEN
関数で文字数を数えています。

なお、当方( WindowsXP + Excel2002 )では、どちらも255文字といった
現象はありません。

Sub TestMacro()
  
 ...続きを読む

QEXCELファイルのカレントフォルダを取得するには?

EXCELファイルのカレントフォルダを取得するには?

C:\経理\予算.xls

D:\2005年度\予算.xls

EXCEL97ファイルがあります。

VBAで
  カレントフォルダ名
(C:\経理\,D:\2005年度\)
を取得する事は可能でしょうか?

CURDIRでは上手い方法が見つかりませんでした。

Aベストアンサー

こんばんは。
Excel97 でも、同じですね。以下で試してみてください。

Sub test()
'このブックのパス
a = ThisWorkbook.Path
'アクティブブックのパス
b = ActiveWorkbook.Path
'Excelで設定されたデフォルトパス
c = Application.DefaultFilePath
'カレントディレクトリ
d = CurDir
MsgBox "このブックのパス   : " & a & Chr(13) & _
   "アクティブブックのパス: " & b & Chr(13) & _
   "デフォルトパス    : " & c & Chr(13) & _
   "カレントディレクトリ : " & d & Chr(13)
End Sub

Qアクセス メモ型 255文字以上入れられない

アクセスでテーブルデザインでメモ型にしています。
そのフィールドには何文字でも入力できるようですが、
そのフィールドをフォームのテキストボックスのコントロールソースにすると
なぜか255文字以上入力できません。

テーブルは一度クエリにして、フォームのレコードソースとしています。
ダイレクトにテーブルを開いて、そのメモ型のフィールドに情報を入れることは出来ますが
フォームからは255文字以上は入力できません。

これを回避する方法をご教授ください。

Aベストアンサー

なぜか255文字以上入力できません。
-------------------------------------------------------------
本当ですか? 自分はAccess2010ですが、この制限はありません。
ENTERキーを押下すると次のフィールドに移動するだけで、文字列は
入力できるのではありませんか

ENTERキー押下を改行に変更するには、該当のフォーム名を右クリック
からデザインビューを選択して
メモ型のフィールドクリックするとこのフィールドのプロパティーが表示されます
その他タグのENTERキー入力時動作の枠の右が「規定」になっていたら
ここをクリックして「フィールドに行を追加」に変更してください。

追伸accessヴァージョンによって変わっています。
今後のQには ヴァージョンの記述をおすすめします。

Qウォッチ式の文字数制限について

Visual Basic 6.0を使っています☆
デバッグ中にウォッチ式というウィンドウを開いて変数の中身をみているのんですけど、SQLを格納しているString型の変数を見ても240文字ぐらいしか表示されません。
本当なら800文字程度あるはずなのですが・・・。

ウォッチ式の中で表示できる文字数に制限があるんでしょうか?
もしあるならそれを表示文字数を増やす方法とかってあるんでしょうか?

困っているので、どなたかわかる方がいらっしゃったら教えて頂けませんか?

Aベストアンサー

> Visual Basic 6.0を使っています☆
> ウォッチ式の中で表示できる文字数に制限があるんでしょうか?

あります。
確か250文字だったと思います。

> もしあるならそれを表示文字数を増やす方法とかってあるんでしょうか?

残念ですが、ないと思います。他の方法を組み合わせてください。

例えば・・・
・「Debug.Print S」に様に、イミディエイトウィンドウに都度出力。
・「Mid(S,1,250)」「Mid(S,251,250)」「Mid(S,501,250)」「Mid(S,751,250)」の様なウォッチ式を設定しておく。
とか・・・

QEXCEL VBA で現在開いているブックのファイル名を取得する方法

EXCEL2003 VBAで業務を簡素化するために、現在開いているブックのファイル名を取得する方法が分かりません。
作業手順をマクロを使って処理していますが、オリジナルのワークブックをファイル名を変えて保存し、以後、このワークブックを読み込んで使用しています。
このときのVBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり、以後の業務に使用できません。
常にファイル名を取得出来るVBAをどなたか、教えて下さい。

Aベストアンサー

>現在開いているブックのファイル名
 ちょっと曖昧な表現かなぁという気もいたしますが、VBAが書いてあるブックのブック名は
ThisWorkbook.Name
で、現在 "アクティブにして" 操作対象になっているブックの名前は
ActiveWorkbook.Name
ですね。

 しかし、
>VBAは、オリジナルのファイル名を使っているため、ファイル名を変更するとエラーになり
というような文脈からすると、
ThisWorkbook.Name
の方ですかね。

QEXCEL VBAで計算値を四捨五入、切り上げ、切捨てする方法

ネットで探してみたのですが、計算結果を四捨五入して特定のセルを
返すにはどうしたらいいのでしょうか?

Sub hokangosa()

Dim ZPS As Double
Dim ZPOS As Double
Dim DMN As Double
MsgBox (" >>> 補間誤差自動計算 <<< ")
MsgBox (" >>> 初期値入力します <<< ")
ZPS = InputBox(">>> ステップを入力してください<<<")
ZPOS = Sheet1.Cells(22, 4).Value
DMN = ZPOS / ZPS
Sheet1.Cells(23, 6).Value = DMN
End Sub

ここでDMNの値を四捨五入したいです。

またこれとは別に切上げ、切捨ても教えていただけるとありがたいです。

Aベストアンサー

DMN = Application.WorksheetFunction.Round(ZPOS / ZPS, 0)
で、四捨五入
DMN = Application.RoundDown(ZPOS / ZPS, 0)
で切り捨て
DMN = Application.RoundUp(ZPOS / ZPS, 0)
で切り上げです。

引数で、対象桁を変更できます。

QVB上で実行中の無限ループの止め方

今まで、CUIベースのBASICでのプログラムの経験はあるのですが
Visual系のBASICは初心者です。
原因はわかっているのでプログラムの修正はできるのですが
VB上でコンパイルして実行したときに無限ループに陥ってしまって
どうにもプログラムをとめられなくなります。
そんなことがないように、実行前に全てのプロジェクトを保存して
いますので、そんなに実害はないのですが、どうすればとめられるのでしょう・・
今現在は、タスクマネージャーから強制終了させています。

Aベストアンサー

無限ループの一番内側に
DoEvents
を入れておくと、ウィンドウ切替え->デバッガ終了操作が出来ますよ

危なそうなとこにも入れておくと、何かと安心です。

QAccessのRefresh・Requery・Repaintの違い

Requeryはもう一度ソースレコード(テーブル)を読み込むようです。このとき、テーブルの先頭レコードに移動してしまいます。
Refreshは最新のレコード(テーブル)を再表示するような気がします。レコードの移動は起こらない気がします。
Repaintは、VBAでキャプションなどを変更したとき使っています。
でも、よくわかっていません。
どんなときにどんなメソッドを使えばいいのでしょうか?
詳しい方、よろしくお願いいたします。

Aベストアンサー

たびたびすみません。
調べてたらこんなのがでてきました。
http://www.nurs.or.jp/~ppoy/access/access/acF007.html

参考URL:http://www.nurs.or.jp/~ppoy/access/access/acF007.html

QExcelVBAを使って、値がある場合は作業を繰り返し実行するプログラムを作成したい。

以下のようなプログラムをVBAで作成したいと考えています。

A1のセルに値があれば、その値をB1に返す。
次にA2のセルに値があれば、その値をB2に返す。
A行に値がある一番下のセルまで同じようなことをさせたいと考えています。

VBAは初心者です。
どなかた宜しくお願い致します。

Aベストアンサー

#2さんと似たものですが・・・・参考にしてください。

Sub test001()
Dim i As Long
i = 1
Do While Cells(i, 1) <> ""
Cells(i, 2) = Cells(i, 1)
i = i + 1
Loop
End Sub

Q日付型のフィールドに空白を入れる方法を教えてください

ASP(VBScript)でSQLサーバにINSET INTO文を使ってデータを格納しているのですが、日付の部分がNULLの時、「1900/1/1」が入ってしまいます。
そのまま、空白を入れる方法はどうやったらよろしいのでしょうか?

TABLE1の内容は
番号|内容|日付です。

INSERT INTO TABLE1 VALUES ( 1, 'あいう', '')

結果
1|あいう|1900/1/1

Aベストアンサー

あとは、プログラムの書き方次第ですね、、、


If hensu=Null Or hensu="" Then
dt = "NULL"
Else
dt = "'" & hensu & "'"
End IF

E_SQL = "INSERT INTO TABLE1 VALUES & _
"( 1,'あいう', " & dt& ")"
の様に書きます。


このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング