• ベストアンサー

ACCESSで空白行を追加

ACCESSでレポートの改ページの位置を調整するために 印刷用のDB作成時にデータの間に必要な行だけ 空白行を挿入しています。 下記のような要領で挿入しているのですが、うまく空白行が入りません。  Set dbw = CurrentProject.Connection  For intIdx = 1 To intCount    dbw.Execute strSQL  Next intIdx  dbw.Close  Set dbw = Nothing 動作も不安定で毎回、空白行が多く入ったり少なく入ったりするので、 原因が特定できません。 解決策をご存知の方、教えて下さい。 よろしくお願いします。

  • sprit
  • お礼率66% (45/68)

質問者が選んだベストアンサー

  • ベストアンサー
noname#182251
noname#182251
回答No.1

VBAはほとんど知らないのですが 空白行が望む位置に並ぶためのインデックスは何を使用しているのでしょうか?

sprit
質問者

お礼

インデックスをつけていませんでした。 空白行が望む位置にくるようにレコードに行カウントを持たせて インデックスに使用したら、希望通りに出力されました。 お礼が遅くなってしまいましたが、ありがとうございました。 とても助かりました。

その他の回答 (3)

  • ShowMeHow
  • ベストアンサー率28% (1424/5027)
回答No.4

問題のありかの可能性としては 1.空白行を追加する場所が間違っている? (ANo.1の方がおっしゃっておられること) strSQLの内容を詳しく見てみる必要があります。 2.空白行の追加方法に問題があるのではなく、空白行の計算方法に問題がある? (ANo3の方がおっしゃっておられること) intCountの計算方法があっているか確認する必要があります。 どちらにしても、提供されている情報だけでは原因を特定できません。

sprit
質問者

お礼

お礼が遅くなってしまいましたが、希望の位置に空白行を並ばせるためのインデックスを設定することで解決できました。 私の質問の仕方が悪くて、説明不足にも関わらず、ご回答いただき、ありがとうございました。

  • Pakkun10
  • ベストアンサー率44% (22/50)
回答No.3

エスパーすると、intCountを求める式が間違ってるんだと思います。

sprit
質問者

お礼

お礼が遅くなってしまいましたが、希望の位置に空白行を並ばせるためのインデックスを設定することで解決できました。 私の質問の仕方が悪くて、説明不足にも関わらず、ご回答いただき、ありがとうございました。

  • Dxak
  • ベストアンサー率34% (510/1465)
回答No.2

[AC97] レコードがない場合も用紙の最後まで罫線を出力する方法 http://support.microsoft.com/kb/404909/ja 普通は、こんな感じ 空白のレコードがあるかのように見せかけるパターン で、質問の方は、何が障害になってるのか?よく判りません (変数の中身が、提示されていないのと、レポートの構成などが判らないため・・・) strSQLの中身で、ソートしなおすインデックス等、基準が無くて、予想したところ意外に、空白レコードが挿入されてるのが、現状ではないかと、想像するのですが・・・あくまで、想像の話ね

sprit
質問者

お礼

予想された通り、インデックスが原因でした。 お礼が遅くなってしまいましたが、説明不足にも関わらず、 ご回答いただきありがとうございました。

関連するQ&A

  • レコードは2行あるのに「-1」が返ってくる

    accessです。 テーブル1にレコードは2行あるのに、下記のコードを実行すると「-1」が返ってきます。 なぜでしょうか? ------------------------------------------------------------ Sub test() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Set cn = Application.CurrentProject.Connection Set rs = cn.Execute("SELECT * FROM テーブル1") MsgBox rs.RecordCount rs.Close cn.Close Set rs = Nothing Set cn = Nothing End Sub ------------------------------------------------------------ ご教示よろしくお願い致します。

  • VBでAccess DBにinset処理をかける

    Dim cn As ADODB.Connection '接続 (1)Set cn = CurrentProject.Connection '実行 cn.Execute strSqlm←SQLがはいっています。 '終了 cn.Close: Set cn = Nothing (1)でオブジェクトが必要です。というエラーがでます。 解決策をお願いします。

  • DAOでのコードをADOへ書き直し

    Access2003、WinXPです。 レコードセットの取得関係をDAOで書いていたのですが ADOに途中から変更しました。 変数宣言を Public db As DAO.Database ⇒Public cn As ADODB.Connection Public rs As DAO.Recordset ⇒Public rs As ADODB.Recordset Public Fld As DAO.field  ⇒Public Fld As ADODB.field レコードセット取得を Set db = CurrentDb      Set rs = db.OpenRecordset(strSQL) ↓ Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset rs.Open strSQL, cn レコードセット クローズを Set rs = Nothing Set db = Nothing ↓ rs.Close: Set rs = Nothing cn.Close: Set cn = Nothing としました。今のところ動いているようですが、 何か勘違い、気をつけないといけない事等ありますでしょうか・・・?

  • DBから取得したオブジェクトの受け渡し方法

    はじめましてVB初心者でわけが分からなくなっています。DBをクローズした後に取得したレコードセットを他の関数に渡すにはどうしたらよいでしょうか?おそらく、そんなのcloseせずにやればいいと思うかもしれませんが、可能かどうかがわかりません。どうか教えてくださいよろしくお願い致します。 下記のコードにて行ってます。Set rs = cn.Execute(strSQL)で取得しています。rsをDBを閉じた後も他の関数に渡せるようにしたい訳です。m(..)m Dim cn As Object Dim rs As Object Private Sub getData() Dim strSQL As String Set cn = CreateObject("ADODB.Connection") cn.Open "省略" strSQL = "SELECT * FROM swan" Set rs = cn.Execute(strSQL) Set rs = nothing Set cn.close Set cn = nothing End Sub

  • Excelファイルのデータをテーブルへインポートできない

    お世話になります。 このコードは「ここが知りたかった!ACCESS VBA 500の技」 の452ページに載っているものです。 エラーで動作しません。 私には分からないので教えて下さい。 Sub ExceltoMDBTable() Dim adoExcelCon As New ADODB.Connection Dim adoSheetRst As ADODB.Recordset Dim strSQL As String Dim adoMdbCon As New ADODB.Connection adoExcelCon.Open "Driver={Microsoft Excel Driver (*.xls)};" & _ "DBQ=c:\temp\test.xls;ReadOnly=0;" Set adoMdbCon = Application.CurrentProject.Connection Set adoSheetRst = adoExcelCon.Execute("select distinct 得意先コード,得意先名 from [Sheet1$]") Do Until adoSheetRst.EOF = True strSQL = "" strSQL = strSQL & "insert into test" strSQL = strSQL & " (得意先コード" strSQL = strSQL & " ,得意先名" strSQL = strSQL & " ,登録日 )" strSQL = strSQL & "Values ( '" & adoSheetRst("得意先コード") & "'" strSQL = strSQL & " ,'" & adoSheetRst("得意先名") & "'" strSQL = strSQL & " ,#" & Date & "# )" adoMdbCon.Execute (strSQL) adoSheeyRst.MoveNext Loop adoSheetRst.Close adoMdbCon.Close adoExcelCon.Close Set adoSheetRst = Nothing Set adoMdbCon = Nothing Set adoExcelCon = Nothing End Sub

  • Access97 SQLでINSERT されない

    Access97を使って下記のようなモジュールを作成しました。  が、接続DAT にはデータが追加されません。  何故でしょうか?   j = 10 i = 1 strSQL = "" Do Until i = j JIJI = JI(i) strSQL = "INSERT INTO 接続DAT (重複ID,区別記号" strSQL = strSQL & ") VALUES (" strSQL = strSQL & "'" & JIJI & "'" strSQL = strSQL & ", '" & D & "'" strSQL = strSQL & ")" Set DB = CurrentDb() DB.Execute strSQL Set DB = Nothing Set RS = Nothing i = i + 1 Loop

  • アクセスVBA。ADO

    CSVから列を分割してテーブルにしたいかったので 下記のコードを記述しましたが、 Dim cn As ADODB.Connection Dim rs As New ADODB.Recordset Dim datacount As Long Set cn = New ADODB.Connection With cn .ConnectionString = "Provider=Microsoft.jet.OLEDB.4.0;Data Source=" & CurrentProject.Path & "\;" .Properties("Extended Properties").Value = "text;HDR=YES;" .Open End With Set rs = cn.Execute("SELECT * FROM 構成マスタ.csv") datacount = rs.Fields.Count For i = 0 To datacount strsql = "SELECT " & rs.Fields(i).Name & " INTO " & rs.Fields(i).Name & " FROM 構成マスタ.csv;" cn.Execute strsql Next i rs.Close cn.Close Set rs = Nothing Set cn = Nothing SQLを実行するところで、「日付エラー」となってしまいます。 データには特に日付等はないのでエラーになる原因がわかりません。 どなたかご教示いただけますでしょうか。

  • Accessでのデータベースの使用(VBA)

    Private Sub 実行_Click() Dim cn As ADODB.Connection Dim rs As ADODB.Recordset Dim StSQL As String Set cn = CurrentProject.Connection Set rs = New ADODB.Recordset strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;" rs.Open strSQL, cn, , adLockOptimistic '//前のコード(エラーになりました。) ' rs.Close 'cn.Close 'Set rs = Nothing 'Set cn = Nothing Set rs = Nothing: Close Set cn = Nothing: Close Accessを使用したvbaのコードの書き方について教えてほしいです。毎度Access の質問ばかりしてすみません。以下のコードはADOを使用してマスタというテーブルを読み込んで最後にrs.CloseでRecordSetを開放しようとしたのですが「オブジェクトが閉じている場合は、操作は許可されません。」というエラーメッセージが出てしまい原因がわかりませんでした。Openしていて開いているはずなのにエラーが出てしまい、 Set rs = Nothing: Closeに変えたら治りました。何故rs.Closeではエラーが出てしまったのでしょうか。 もう一つお聞きしたいです。 strSQL = "INSERT INTO マスタ(コード) VALUES(コード) ;"でコードという名前を付けたテキストボックスの値をマスタテーブルのコードの列に追加したいのですがテキストボックスの値の取り方が分かりません。(コード.Value)とやってみてもだめでした。どうやったらSQL文でテキストボックスの値をテーブルに追加できるんでしょうか。

  • Access VBA フォームに表示したい

    Access2000で、帳票フォームにSQLの値を表示させたいのですが、 以下のコードだとフォーム上に最後のレコードしか表示されません。 取得したデータを正しく表示するにはどうしたらよいでしょうか。 ・フォームのtext1のコントロールソースにfld1と書く 以外の方法でできますか? できればすべて非連結で、作成したいです。 (本当はフォームのrecordsourceも設定したくないのですが それは無理でしょうか?) よろしくお願いいたします。 Private Sub Form_Load() Dim conn As Connection Dim rs As ADODB.Recordset Dim strSql As String Set conn = CurrentProject.Connection Set rs = New ADODB.Recordset strSql = "select * from table1" rs.Open strSql, conn, adOpenKeyset, adLockOptimistic, adCmdText Me.RecordSource = strSql rs.MoveFirst Do Until rs.EOF me!text1 = rs!fld1 rs.MoveNext Loop rs.Close Set rs = Nothing conn.Close Set connn = Nothing End Sub

  • ACCESSでレコード数の取得の仕方

    Aテーブルのレコード数を取得しようと思い、次のPGを考えました。(Aテーブルには10件のデータが入っています。)ですが、「-1」という数値が返ってきます。なぜでしょうか? Dim objADOCON As ADODB.Connection Dim objADORS As ADODB.Recordset Dim strSQL As String Set objADOCON = Application.CurrentProject.Connection strSQL = "SELECT * FROM Aテーブル" Set objADORS = objADOCON.Execute(strSQL) MsgBox objADORS.RecordCount , vbOKOnly, "レコード数"